{"tiddlers":{"$:/plugins/can/dragtags":{"title":"$:/plugins/can/dragtags","description":"Dragtags - Drag and drop tools for tags","author":"Chris Nicoll","version":"0.1.1","core-version":">=5.1.22","source":"https://github.com/clutterstack/TW5-omni","list":"readme license","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/can/dragtags/ui/ViewTemplate/tags\": {\n \"title\": \"$:/plugins/can/dragtags/ui/ViewTemplate/tags\",\n \"list-after\": \"$:/core/ui/ViewTemplate/subtitle\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"<$reveal type=\\\"nomatch\\\" stateTitle=<<folded-state>> text=\\\"hide\\\" tag=\\\"div\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n<<can-omni-taglist>>\\n</$reveal>\\n\"\n },\n \"$:/plugins/can/dragtags/license\": {\n \"title\": \"$:/plugins/can/dragtags/license\",\n \"caption\": \"license\",\n \"text\": \"BSD 3-Clause License\\n\\nCopyright (c) 2020, Chris Nicoll\\n\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n },\n \"$:/plugins/can/dragtags/dragtaglist\": {\n \"title\": \"$:/plugins/can/dragtags/dragtaglist\",\n \"caption\": \"Drag tags\",\n \"created\": \"20200716164703545\",\n \"modified\": \"20200716165751281\",\n \"tags\": \"$:/tags/SideBar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"<$list filter=\\\"[tags[]!is[system]sort[]]\\\">\\n<$macrocall $name=\\\"tag-pill-body\\\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\\\"\\\"\\\"$button\\\"\\\"\\\" element-attributes=\\\"\\\"\\\" dragFilter='[all[current]]' tag='span'\\\"\\\"\\\"/>\\n</$list>\"\n },\n \"$:/plugins/can/dragtags/readme\": {\n \"title\": \"$:/plugins/can/dragtags/readme\",\n \"caption\": \"readme\",\n \"text\": \"@@background: #ffdd66;font-weight:bold;This is a plugin I wrote for myself, and it has not been extensively tested. It may also change. Back up your data, and use at your own risk!@@\\n\\nThe DragTags plugin provides some tools to manipulate tags using drag and drop. It can be seen in action in the Omni plugin demo: https://clutterstack.github.io/TW5-omni/\\n\\nIt overrides a core tiddler: $:/core/ui/ViewTemplate/tags .\"\n },\n \"$:/plugins/can/dragtags/stylesheet\": {\n \"title\": \"$:/plugins/can/dragtags/stylesheet\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"/* omni style tag area in view template */\\n\\n\\n.can-omni-tags.tc-edit-tags { \\n border: none;\\n -webkit-box-shadow: none; \\n -moz-box-shadow: none; \\n box-shadow: none; \\n padding: 1px;\\n}\\n\\ndiv.tc-tiddler-view-frame > .tc-reveal > div.can-omni-tag-area {\\n width: 100%;\\n\\t\\tjustify-content: flex-start;\\n}\\n\\ndiv.tc-tiddler-view-frame > .tc-reveal > div.can-omni-tag-area > .tc-droppable {\\n width: 100%;\\n\\t\\tmargin-left: 0;\\n}\\n\\n.can-omni-tags.tc-edit-tags {\\n\\ndisplay: flex;\\nflex-direction: row;\\n}\\n\\n\\n.can-omni-tag-area .tc-dragover {\\n background: linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(204,0,255,0.5) 100%);\\n border-radius: 4px;\\n}\\n\\n.can-omni-tag-area .tc-droppable {\\ndisplay: flex;\\nflex-direction: row;\\njustify-content: space-between;\\n}\\n\\n.can-omni-tag-area .tc-droppable:hover {\\n background: linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.2) 100%);\\n border-radius: 4px;\\n}\\n\\n.can-omni-tag-area .ghost-tag { \\n\\t\\tpadding: 1px;\\n fill: #dddddd;\\n}\\n\\n.can-omni-tag-area:hover .ghost-tag, .can-omni-tag-area .tc-dragover .ghost-tag {\\n fill: #ffffff;\\n}\\n\\n.can-omni-tag-area .ghost-tag svg {\\n width: 12pt;\\n height: 12pt;\\n}\\n\"\n },\n \"$:/plugins/can/dragtags/macros\": {\n \"title\": \"$:/plugins/can/dragtags/macros\",\n \"creator\": \"chris\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\n\\n\\\\define can-omni-taglist()\\n<$importvariables filter=\\\"[[$:/core/ui/EditTemplate/tags]]\\\">\\n<$fieldmangler>\\n<div class=\\\"can-omni-tag-area\\\">\\n<$droppable tag=\\\"div\\\" actions=\\\"<$action-listops $tags='[<actionTiddler>]'/><$action-sendmessage $message='tm-auto-save-wiki'/>\\\">\\n\\t<div class=\\\"can-omni-tags tc-edit-tags\\\">\\n\\t\\t<$list filter=\\\"[all[current]tags[]sort[title]]\\\">\\n\\t\\t\\t<$macrocall $name=\\\"tag-body\\\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}}/>\\n\\t\\t</$list>\\n\\t</div>\\n\\t<div class=\\\"ghost-tag\\\">{{$:/plugins/can/omni/tag-area.svg}}</div>\\n\\t</$droppable>\\n</div>\\n</$fieldmangler>\\n</$importvariables>\\n\\\\end\\n\\n\\\\define can-omni-tagadd(this is not used anywhere and looks like it would cause infinite recursion) <$transclude tiddler=\\\"$:/plugins/can/omni/ui/tagaddtemplate\\\"/>\\n\\n\"\n }\n }\n}"},"$:/themes/can/nothing":{"title":"$:/themes/can/nothing","name":"Nothing","author":"Chris Nicoll","core-version":">=5.0.0","version":"0.0.1","plugin-type":"theme","description":"Not really","plugin-priority":"0","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/can/nothing/colours\": {\n \"title\": \"$:/themes/can/nothing/colours\",\n \"tags\": \"\",\n \"text\": \"\\n.tc-page-container {\\nbackground-attachment: fixed;\\nbackground-image: linear-gradient(18deg, #107227 0%, #0c2e52 35%, #0c2e52 50%, #107227 100%);\\n}\\n\\n\\n\\n.tc-sidebar-tab-open-item {\\n background-colour: <<colour background>>;\\n}\\n\\n.tc-tab-content { \\n background-color: <<colour background>>;\\n}\"\n },\n \"$:/themes/can/nothing/base\": {\n \"title\": \"$:/themes/can/nothing/base\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\n/* Set padding on tiddlers */\\n.tc-tiddler-frame {\\n padding: 28px 42px 16px 42px;\\n}\\n\\n\\n/* Button styling */\\n.tc-btn-invisible {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n cursor: pointer;\\n\\tcolor: <<colour foreground>>;\\n}\\n\\nbutton svg.tc-image-button, button .tc-image-button img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n}\\n\\n.tc-tiddler-title-icon {\\n\\tvertical-align: middle;\\n\\tmargin-right: .1em;\\n}\\n\\n.tc-sidebar-tabs-main {\\n/*margin-right: 1em;*/\\n}\\n\\n.tc-tab-content {\\n/*margin-top: 0;\\npadding: 10px 0.4em 1em 0.4em;*/\\n}\\n\\n.tc-tabbed-table-of-contents {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents {\\n\\tz-index: 100;\\n\\tdisplay: inline-block;\\n\\tpadding-left: 1em;\\n\\tmax-width: 50%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n}\\n\\n@media (min-width: {{$:/themes/can/nothing/metrics/sidebarbreakpoint}}) {\\n\\n.tc-sidebar-scrollable {\\n\\t\\tposition: fixed;\\n\\t\\ttop: {{$:/themes/can/nothing/metrics/storytop}};\\n\\t\\tleft: {{$:/themes/can/nothing/metrics/storyright}};\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\toverflow-y: auto;\\n\\t\\toverflow-x: auto;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t\\tmargin: 0 0 0 -42px;\\n\\t\\tpadding: 71px 0 28px 42px;\\n\\t}\\n\\n\\nhtml[dir=\\\"rtl\\\"] .tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tright: {{$:/themes/can/nothing/metrics/storyright}};\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tleft: {{$:/themes/can/nothing/metrics/storyleft}};\\n\\t\\ttop: {{$:/themes/can/nothing/metrics/storytop}};\\n\\t\\twidth: {{$:/themes/can/nothing/metrics/storywidth}};\\n\\t\\tpadding: 42px 42px 42px 42px;\\n\\t}\\n\\n<<if-no-sidebar \\\"\\n\\n\\t.tc-story-river {\\n\\t\\twidth: calc(100% - {{$:/themes/can/nothing/metrics/storyleft}});\\n\\t}\\n\\n\\\">>\\n\\n}\"\n },\n \"$:/themes/can/nothing/metrics/bodyfontsize\": {\n \"title\": \"$:/themes/can/nothing/metrics/bodyfontsize\",\n \"text\": \"15px\"\n },\n \"$:/themes/can/nothing/metrics/bodylineheight\": {\n \"title\": \"$:/themes/can/nothing/metrics/bodylineheight\",\n \"text\": \"22px\"\n },\n \"$:/themes/can/nothing/metrics/fontsize\": {\n \"title\": \"$:/themes/can/nothing/metrics/fontsize\",\n \"text\": \"14px\"\n },\n \"$:/themes/can/nothing/metrics/lineheight\": {\n \"title\": \"$:/themes/can/nothing/metrics/lineheight\",\n \"text\": \"20px\"\n },\n \"$:/themes/can/nothing/metrics/storyleft\": {\n \"title\": \"$:/themes/can/nothing/metrics/storyleft\",\n \"text\": \"0px\"\n },\n \"$:/themes/can/nothing/metrics/storytop\": {\n \"title\": \"$:/themes/can/nothing/metrics/storytop\",\n \"text\": \"0px\"\n },\n \"$:/themes/can/nothing/metrics/storyright\": {\n \"title\": \"$:/themes/can/nothing/metrics/storyright\",\n \"text\": \"770px\"\n },\n \"$:/themes/can/nothing/metrics/storywidth\": {\n \"title\": \"$:/themes/can/nothing/metrics/storywidth\",\n \"text\": \"770px\"\n },\n \"$:/themes/can/nothing/metrics/tiddlerwidth\": {\n \"title\": \"$:/themes/can/nothing/metrics/tiddlerwidth\",\n \"text\": \"686px\"\n },\n \"$:/themes/can/nothing/metrics/sidebarbreakpoint\": {\n \"title\": \"$:/themes/can/nothing/metrics/sidebarbreakpoint\",\n \"text\": \"960px\"\n },\n \"$:/themes/can/nothing/metrics/sidebarwidth\": {\n \"title\": \"$:/themes/can/nothing/metrics/sidebarwidth\",\n \"text\": \"350px\"\n },\n \"$:/themes/can/nothing/tweaks\": {\n \"title\": \"$:/themes/can/nothing/tweaks\",\n \"tags\": \"\",\n \"text\": \"\\n/* Make tiddler titles look normal even though they are links */\\na h2.tc-title { color: <<colour foreground>>; }\\ndiv.tc-titlebar a:hover { text-decoration: none; }\"\n }\n }\n}"},"$:/plugins/can/omni":{"title":"$:/plugins/can/omni","description":"Omni - Create and collate tiddlers","author":"Chris Nicoll","version":"0.1.1","core-version":">=5.1.22","source":"https://github.com/clutterstack/TW5-omni","list":"readme documentation license","plugin-type":"plugin","dependents":"[[$:/plugins/can/quick]] [[$:/plugins/can/dragtags]] [[$:/plugins/can/teaser]]","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/ViewToolbarButtons/Visibility/$:/plugins/can/omni/buttons/omnimodebar\": {\n \"title\": \"$:/config/ViewToolbarButtons/Visibility/$:/plugins/can/omni/buttons/omnimodebar\",\n \"created\": \"20201105012321878\",\n \"modified\": \"20201105013854105\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"hide\"\n },\n \"$:/language/Buttons/omnimodebar-hide/Caption\": {\n \"title\": \"$:/language/Buttons/omnimodebar-hide/Caption\",\n \"created\": \"20201104224654940\",\n \"modified\": \"20201105015516188\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"hide omni modes\"\n },\n \"$:/language/Buttons/omnimodebar-hide/Hint\": {\n \"title\": \"$:/language/Buttons/omnimodebar-hide/Hint\",\n \"created\": \"20201105014314992\",\n \"modified\": \"20201105014653018\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"Hide the omnibus mode switching toolbar\"\n },\n \"$:/language/Buttons/omnimodebar-show/Caption\": {\n \"title\": \"$:/language/Buttons/omnimodebar-show/Caption\",\n \"created\": \"20201104235204896\",\n \"modified\": \"20201105015456280\",\n \"showModeState\": \"hide\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"show omni modes\"\n },\n \"$:/language/Buttons/omnimodebar-show/Hint\": {\n \"title\": \"$:/language/Buttons/omnimodebar-show/Hint\",\n \"created\": \"20201105014617639\",\n \"modified\": \"20201105014637275\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"Show the omnibus mode switching toolbar\"\n },\n \"$:/plugins/can/omni/utilities/export\": {\n \"title\": \"$:/plugins/can/omni/utilities/export\",\n \"caption\": \"OmniExport\",\n \"tags\": \"$:/tags/MoreSideBar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"<$list filter=\\\"[tag[omnibus]!tag[template]]\\\" >\\n<div class=\\\"omni-bundle\\\">\\n<$draggable filter=\\\"[<currentTiddler>] [list[]]\\\">\\n<$view field=\\\"title\\\"/>\\n</$draggable> \\n<$macrocall $name=\\\"exportButton\\\" exportFilter=\\\"[<currentTiddler>] [list[]]\\\" lingoBase=\\\"$:/language/Buttons/ExportTiddlers/\\\"/>\\n</div>\\n</$list>\"\n },\n \"$:/plugins/can/omni/ui/ViewTemplate/makeomnibus\": {\n \"title\": \"$:/plugins/can/omni/ui/ViewTemplate/makeomnibus\",\n \"tags\": \"$:/tags/ViewTemplate\",\n \"list-after\": \"$:/core/ui/ViewTemplate/body\",\n \"text\": \"<$reveal type=\\\"nomatch\\\" stateTitle=<<folded-state>> text=\\\"hide\\\" tag=\\\"div\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n<$list filter=\\\"[all[current]tag[omnibus]]\\\" variable=\\\"null\\\"><<compose-omni>></$list>\\n</$reveal>\"\n },\n \"$:/plugins/can/omni/action-macros\": {\n \"title\": \"$:/plugins/can/omni/action-macros\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define omni-toggle-edit() <$action-setfield $tiddler=<<editstatetid>> editstate=\\\"edit\\\"/>\\n\\\\define omni-toggle-view() <$action-setfield $tiddler=<<editstatetid>> editstate=\\\"view\\\"/>\\n\\n\\\\define omni-startedit-actions() <$action-setfield $tiddler=<<foldstatetiddler>> $value=\\\"show\\\"/><<omni-toggle-edit>><$action-setfield $tiddler=<<editstatetid>> text={{!!text}}/>\\n\\\\define omni-submitedit-actions() <$action-deletetiddler $tiddler=<<editstatetid>>/><$action-sendmessage $message='tm-auto-save-wiki'/>\\n\\\\define omni-canceledit-actions() <$action-setfield text={{$(editstatetid)$}} $timestamp='no'/><<omni-toggle-view>>\\n\\n\\n\\\\define omni-toggle-title-edit() <$action-setfield $tiddler=<<edittitlestatetid>> editstate=\\\"edit\\\"/>\\n\\\\define omni-toggle-title-view() <$action-setfield $tiddler=<<edittitlestatetid>> editstate=\\\"view\\\"/>\\n\\n\\n\\\\define omni-starttitleedit-actions() <<omni-toggle-title-edit>><$action-setfield newtitle={{!!title}} $timestamp='no'/><$action-setfield $tiddler=<<edittitlestatetid>> oldtitle={{!!title}}/>\\n\\\\define omni-submittitleedit-actions() <$action-sendmessage $message=\\\"tm-rename-tiddler\\\" from=<<currentTiddler>> to={{!!newtitle}} /><$action-deletetiddler $tiddler=<<edittitlestatetid>>/><$action-sendmessage $message='tm-auto-save-wiki'/>\\n\\\\define omni-canceltitleedit-actions() <$action-setfield newtitle={{$(edittitlestatetid)$!!oldtitle}} $timestamp='no'/><<omni-toggle-title-view>>\\n\\n\\n\\\\define omni-start-tiddler-drag() \\\"<$action-listops $field=dragstarttiddler $filter=<<parentval>> />\\\"\\n\\n\\\\define can-omni-shift-drop() \\n<$list filter=\\\"[<modifier>match[shift]]\\\" variable=\\\"null\\\">\\n\\t<$set name=dragstarttitle filter=\\\"[<actionTiddler>get[dragstarttiddler]]\\\" select=\\\"0\\\">\\n\\t<$action-listops $tiddler=<<dragstarttitle>> $subfilter='-[<actionTiddler>]'/><$action-listops $tiddler=<<actionTiddler>> $field='omniparent' $subfilter='-[<parentval>]'/>\\n\\t</$set>\\n</$list>\\n\\\\end\\n\\n\\\\define readlevel() [{$(datatiddler)$##$(currentTiddler)$}]\\n\\n\\\\define omni-leveldn-actions() \\\"<$action-listops $tiddler=<<datatiddler>> $index=<<currentTiddler>> $filter='=$(readlevel)$ +[subtract[1]] +[max[0]]'/><$action-sendmessage $message='tm-auto-save-wiki'/>\\\"\\n\\n\\\\define omni-levelup-actions() \\\"<$action-listops $tiddler=<<datatiddler>> $index=<<currentTiddler>> $filter='=$(readlevel)$ +[add[1]] +[min[6]]'/><$action-sendmessage $message='tm-auto-save-wiki'/>\\\"\\n\"\n },\n \"$:/plugins/can/omni/button-macros.tid\": {\n \"title\": \"$:/plugins/can/omni/button-macros.tid\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\n\\\\define can-omni-levelctl() \\n<div class=\\\"can-omni-levelctl\\\">\\n\\t<$button class=\\\"can-omni-button tc-btn-invisible\\\" aria-label=\\\"Unindent\\\" tooltip=\\\"Unindent\\\" actions=\\\"<<omni-leveldn-actions>>\\\">{{$:/plugins/can/omni/unindent.svg}}</$button>\\n\\t<$button class=\\\"can-omni-button tc-btn-invisible\\\" aria-label=\\\"Indent\\\" tooltip=\\\"Indent\\\" actions=\\\"<<omni-levelup-actions>>\\\">{{$:/plugins/can/omni/indent.svg}}</$button>\\n</div>\\n\\\\end\\n\\n\\\\define can-omni-delete()\\n<$button class=\\\"can-omni-button tc-btn-invisible\\\" aria-label=\\\"Delete tiddler\\\" tooltip=\\\"Delete tiddler\\\">\\n<$action-sendmessage $message=\\\"tm-delete-tiddler\\\"/>\\n<$action-listops $tiddler=<<parentval>> $filter='[list<parentval>is[tiddler]]'/>\\n<$action-setfield $tiddler=<<datatiddler>> $index=<<currentTiddler>> />\\n{{$:/core/images/delete-button}}\\n</$button>\\n\\\\end\\n\\n\\\\define can-omni-delist()\\n<$button class=\\\"can-omni-button tc-btn-invisible\\\" aria-label=\\\"Remove from list\\\" tooltip=\\\"Remove from list\\\" actions=\\\"<$action-listops $tiddler=<<parentval>> $subfilter='-[<currentTiddler>]'/><$action-listops $field='omniparent' $subfilter='-[<parentval>]' /><$action-setfield $tiddler=<<datatiddler>> $index=<<currentTiddler>> /><$action-sendmessage $message='tm-auto-save-wiki'/>\\\">{{$:/plugins/can/omni/delist.svg}}</$button>\\n\\\\end\\n\\n\\\\define can-omni-toggleadd()\\n\\t<$reveal type=nomatch state=<<openstatetid>> text=\\\"open\\\" tag=div class=\\\"can-omni-toggleadd\\\"> \\n\\t<$button tag=\\\"div\\\" class=\\\"can-omni-button can-rightedge tc-btn-invisible\\\" tooltip=\\\"Add tiddler here\\\" aria-label=\\\"Add tiddler here\\\" actions=\\\"<$action-setfield $tiddler=<<openstatetid>> text='open'/>\\\" >{{$:/core/images/new-button}}</$button>\\n\\t</$reveal>\\n\\t<$reveal type=match state=<<openstatetid>> text=\\\"open\\\" tag=div class=\\\"can-omni-toggleadd\\\" >\\n\\t<$button tag=\\\"div\\\" class=\\\"can-omni-button can-rightedge tc-btn-invisible\\\" actions=\\\"<$action-setfield $tiddler=<<openstatetid>> text='closed'/>\\\">{{$:/core/images/close-button}}</$button>\\n\\t</$reveal>\\n\\\\end\\n\\n\\\\define can-omni-link()\\n<$draggable tiddler=<<currentTiddler>> startactions=<<omni-start-tiddler-drag>> >\\n<$button class=\\\"can-omni-button tc-btn-invisible\\\" to={{!!title}} tooltip=\\\"Open tiddler in story\\\" aria-label=\\\"Open tiddler in story\\\">{{$:/plugins/can/omni/fish-water.svg}}</$button>\\n</$draggable>\\n\\\\end\\n\\n\\\\define can-omni-title()\\n<$draggable tiddler=<<currentTiddler>> startactions=<<omni-start-tiddler-drag>> >\\n<$button class=\\\"can-omni-button can-omni-title tc-btn-invisible\\\" to={{!!title}} tooltip=\\\"Tiddler link\\\" aria-label=\\\"Tiddler link\\\">\\n<div class=\\\"can-omni-title\\\"><$text text=<<currentTiddler>>/></div>\\n</$button></$draggable>\\n\\\\end\\n\\n\\\\define can-omni-title-link()\\n<$draggable tiddler=<<currentTiddler>> startactions=<<omni-start-tiddler-drag>> >\\n<$button tag=\\\"div\\\" class=\\\"can-omni-button tc-btn-invisible\\\" to={{!!title}} tooltip=\\\"Tiddler link\\\" aria-label=\\\"Tiddler link\\\">\\n<div>{{$:/plugins/can/omni/fish-water.svg}}</div><div class=\\\"can-omni-title\\\"><$text text=<<currentTiddler>>/></div>\\n</$button></$draggable>\\n\\\\end\\n\\n\\\\define can-omni-mark-done()\\n<$button class=\\\"can-omni-button tc-btn-invisible\\\" aria-label=\\\"Tag item as done\\\" tooltip=\\\"Tag item as done\\\" actions=\\\"<$action-listops $tiddler=<<parentval>> $subfilter='-[<currentTiddler>]'/><$action-setfield $tiddler=<<datatiddler>> $index=<<currentTiddler>> /><$action-listops $tags='done'/><$action-sendmessage $message='tm-auto-save-wiki'/>\\\">{{$:/plugins/can/omni/checkmark.svg}}</$button>\\n\\\\end\\n\\n\\\\define can-omni-make-omnibus()\\n<$button class=\\\"can-omni-button tc-btn-invisible\\\" aria-label=\\\"Tag item as omnibus\\\" tooltip=\\\"Tag item as omnibus\\\" actions=\\\"<$action-listops $tags='omnibus'/><$action-sendmessage $message='tm-auto-save-wiki'/>\\\">{{$:/plugins/can/omni/make-omni.svg}}</$button>\\n\\\\end\"\n },\n \"$:/plugins/can/omni/component-macros\": {\n \"title\": \"$:/plugins/can/omni/component-macros\",\n \"created\": \"20200618174950677\",\n \"creator\": \"chris\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define can-omni-folder()\\n<$button class=\\\"can-omni-foldbutton tc-btn-invisible can-small-text-button\\\">\\n<$reveal type=\\\"match\\\" tag=\\\"div\\\" state=<<foldstatetiddler>> text=\\\"hide\\\" >\\n\\t<$action-setfield $tiddler=<<foldstatetiddler>> $value=\\\"show\\\"/>\\n\\t{{$:/core/images/right-arrow}}\\n</$reveal>\\n<$reveal type=\\\"nomatch\\\" state=<<foldstatetiddler>> text=\\\"hide\\\" >\\n\\t<<omni-toggle-view>><$action-setfield $tiddler=<<foldstatetiddler>> $value=\\\"hide\\\"/>\\n\\t{{$:/core/images/down-arrow}}\\n</$reveal>\\n</$button>\\n\\\\end\\n\\n\\\\define can-omni-itemhandle()\\n<$button tag=\\\"div\\\" class=\\\"can-omni-itemhandle tc-btn-invisible\\\" tooltip=\\\"Click to toggle text edit. Drag to move list entry.\\\" aria-label=\\\"Click to toggle text edit. Drag to move list entry.\\\">\\n<$draggable tiddler=<<currentTiddler>> startactions=<<omni-start-tiddler-drag>> >\\n<div class=\\\"can-omni-itemhandle-inner\\\"></div>\\n<$reveal type=\\\"nomatch\\\" stateTitle=<<editstatetid>> stateField=editstate text=\\\"edit\\\">\\n\\t<<omni-startedit-actions>>\\n</$reveal>\\n<$reveal type=\\\"match\\\" stateTitle=<<editstatetid>> stateField=editstate text=\\\"edit\\\">\\n\\t<<omni-submitedit-actions>>\\n</$reveal>\\n</$draggable>\\n</$button>\\n\\\\end\\n\\n\\\\define can-omni-text()\\n<$reveal type=\\\"nomatch\\\" stateTitle=<<editstatetid>> stateField=editstate text=\\\"edit\\\" tag=div>\\n <div class=\\\"omni-text-as-button tc-tiddler-body\\\" title=\\\"Double-click to edit text.\\\" aria-label=\\\"Double-click to edit text.\\\">\\n <$omnidblclick actions=\\\"<<omni-startedit-actions>>\\\"/>\\n\\t<$transclude $tiddler=\\\"<<currentTiddler>>\\\" mode=\\\"block\\\"/>\\n\\t</div>\\n</$reveal>\\n<$reveal type=\\\"match\\\" stateTitle=<<editstatetid>> stateField=editstate text=\\\"edit\\\" tag=div>\\n\\t<$keyboard tag=\\\"div\\\" class=\\\"tc-can-keyboard\\\" key=\\\"cmd-enter\\\" actions=\\\"<<omni-submitedit-actions>>\\\" >\\n\\t<$keyboard tag=\\\"div\\\" class=\\\"tc-can-keyboard\\\" key=\\\"ctrl-enter\\\" actions=\\\"<<omni-submitedit-actions>>\\\" >\\n\\t<$keyboard tag=\\\"div\\\" class=\\\"tc-can-keyboard\\\" key=\\\"escape\\\" actions=\\\"<<omni-canceledit-actions>>\\\">\\n\\t\\t<$edit-text class=\\\"can-quickadd-textarea tc-tiddler-body\\\" field='text' placeholder='New tiddler text' rows=\\\"1\\\" minHeight=\\\"0\\\" focus=true/>\\n\\t</$keyboard></$keyboard></$keyboard>\\n</$reveal>\\n\\\\end\\n\\n\\\\define can-omni-titleheading()\\n<$reveal type=\\\"nomatch\\\" stateTitle=<<edittitlestatetid>> stateField=editstate text=\\\"edit\\\" tag=\\\"div\\\" class=\\\"omni-title-heading view\\\" title=\\\"Double-click to edit title.\\\" aria-label=\\\"Double-click to edit title.\\\">\\n <$omnidblclick actions=\\\"<<omni-starttitleedit-actions>>\\\"/>\\n\\t{{!!title}}\\n</$reveal>\\n<$reveal type=\\\"match\\\" stateTitle=<<edittitlestatetid>> stateField=editstate text=\\\"edit\\\" tag=div class=\\\"omni-title-heading\\\">\\n\\t<$keyboard tag=\\\"div\\\" class=\\\"tc-can-keyboard\\\" key=\\\"cmd-enter\\\" actions=\\\"<<omni-submittitleedit-actions>>\\\" >\\n\\t<$keyboard tag=\\\"div\\\" class=\\\"tc-can-keyboard\\\" key=\\\"ctrl-enter\\\" actions=\\\"<<omni-submittitleedit-actions>>\\\" >\\n\\t<$keyboard tag=\\\"div\\\" class=\\\"tc-can-keyboard\\\" key=\\\"escape\\\" actions=\\\"<<omni-canceltitleedit-actions>>\\\">\\n\\t\\t<$edit-text class=\\\"can-quickadd-textarea\\\" field='newtitle' rows=\\\"1\\\" minHeight=\\\"0\\\" focus=true/>\\n\\t</$keyboard></$keyboard></$keyboard>\\n</$reveal>\\n\\\\end\\n\\n\\\\define classfilt() can-outline-item [[$(datatiddler)$]has:index[$(currentTiddler)$]then{$(datatiddler)$##$(currentTiddler)$}else[0]] +[join[-]] can-omni-text\\n\\n\\\\define can-omni-text-region()\\n\\t<$set name=levelcls filter=<<classfilt>>>\\n <$reveal tag=\\\"div\\\" class=<<levelcls>> type=\\\"match\\\" state=<<foldstatetiddler>> text=\\\"hide\\\" >\\n <<can-omni-teaser>>\\n </$reveal>\\n <$reveal tag=\\\"div\\\" class=<<levelcls>> type=\\\"nomatch\\\" state=<<foldstatetiddler>> text=\\\"hide\\\" >\\n <<can-omni-text>>\\n </$reveal>\\n\\t</$set>\\n\\\\end\\n\\n\\\\define can-omni-text-ro()\\n<$set name=levelcls filter=<<classfilt>>>\\n <$reveal tag=\\\"div\\\" class=<<levelcls>> type=\\\"nomatch\\\" state=<<foldstatetiddler>> text=\\\"hide\\\" >\\n <div class=\\\"tc-tiddler-body\\\">\\n\\t <$transclude $tiddler=\\\"<<currentTiddler>>\\\" mode=\\\"block\\\"/>\\n\\t </div>\\n </$reveal>\\n</$set>\\n\\\\end\\n\\n\\\\define set-toc-view-tiddler() <$action-setfield $tiddler=<<parentval>> toc-view-tiddler=<<currentTiddler>> />\\n\\n\\\\define omni-toc-heading-class-filter() omni-toc-heading [<parentval>get[toc-view-tiddler]match<currentTiddler>then[selected]]\\n\\n\\\\define can-omni-toc-item()\\n\\t<$set name=levelcls filter=<<classfilt>>><$set name=omni-toc-heading-class filter=<<omni-toc-heading-class-filter>> >\\n <$button tag=\\\"div\\\" class=<<omni-toc-heading-class>> actions=<<set-toc-view-tiddler>>>{{!!title}}</$button>\\n\\t<$reveal tag=\\\"div\\\" class=\\\"can-omni-toc-sub can-omni-text\\\" type=\\\"nomatch\\\" state=<<foldstatetiddler>> text=\\\"hide\\\" >\\n\\t <<omni-showomni-subtoc>>\\n\\t</$reveal>\\n\\t</$set></$set>\\n\\\\end\\n\\n\\\\define can-omni-singleview()\\n <div class=\\\"omni-toc-view tc-tiddler-body\\\">\\n <$tiddler tiddler={{!!toc-view-tiddler}} >\\n <<can-omni-title-link>>\\n <$transclude mode=block/>\\n </$tiddler>\\n </div>\\n\\\\end\\n\\n\\\\define can-omni-todo-region() \\n\\t<$set name=levelcls filter=<<classfilt>>>\\n\\t<div class=<<levelcls>>>\\n\\t\\t<div class=\\\"can-omni-todo-text\\\">\\n\\t\\t<<can-omni-text>>\\n\\t\\t</div>\\n\\t</div>\\n\\t</$set>\\n\\\\end\\n\\n\\\\define can-omni-bullet()\\n<div class=\\\"can-omni-bullet\\\"></div>\\n\\\\end\\n\\n\\\\define can-omni-outline-region() \\n\\t<$set name=levelcls filter=<<classfilt>>>\\n\\t<div class=<<levelcls>>><<can-omni-teaser>></div> \\n\\t</$set>\\n\\\\end\\n\\n\\\\define omni-showomni() \\n<$reveal tag=\\\"div\\\" class=\\\"omni-showomni\\\" type=\\\"nomatch\\\" state=<<foldstatetiddler>> text=\\\"hide\\\" >\\n<$list filter=\\\"[<currentTiddler>tag[omnibus]]\\\"><$macrocall $name=\\\"compose-omni\\\" mode=<<mode>>/></$list>\\n</$reveal>\\n\\\\end\\n\\n\\\\define omni-showomni-subtoc() \\n<$reveal tag=\\\"div\\\" class=\\\"omni-showomni-subtoc\\\" type=\\\"nomatch\\\" state=<<foldstatetiddler>> text=\\\"hide\\\" >\\n<$list filter=\\\"[<currentTiddler>tag[omnibus]]\\\"><<compose-omni-subtoc>></$list>\\n</$reveal>\\n\\\\end\\n\"\n },\n \"$:/plugins/can/omni/component-state-defs\": {\n \"title\": \"$:/plugins/can/omni/component-state-defs\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define editstatetid() $:/keepstate/can/omni/editstate/$(createdid)$\\n\\n\\\\define edittitlestatetid() $:/keepstate/can/omni/edittitlestate/$(createdid)$\\n\\n\\n\\\\define foldstatetiddler() $:/keepstate/can/omni/fold/$(createdid)$\\n\\n\\\\define top-quick-openstatetid() $:/keepstate/can/omni/top-openstate/$(omniqual)$\\n\\\\define top-quickstatetid() $:/keepstate/can/omni/top-quickstate/$(omniqual)$\\n\\n\\\\define peri-quick-openstatetid() $:/keepstate/can/omni/peri-openstate/$(createdid)$\\n\\\\define peri-quickstatetid() $:/keepstate/can/omni/peri-quickstate/$(createdid)$\\n\\n\\\\define append-quick-openstatetid() $:/keepstate/can/omni/append-openstate/$(omniqual)$\\n\\\\define append-quickstatetid() $:/keepstate/can/omni/append-quickstate/$(omniqual)$\\n\\n\"\n },\n \"$:/plugins/can/omni/documentation\": {\n \"title\": \"$:/plugins/can/omni/documentation\",\n \"caption\": \"documentation\",\n \"text\": \"See the demo ~TiddlyWiki at https://clutterstack.github.io/TW5-omni\\n\\n''Omni'' (short for \\\"omnibus\\\") is a plugin that I am writing to make it easier to add and to organize content within my ~TiddlyWiki, particularly grouped content, like notes on a subject (or notes from a single source), or lists of things to do.\\n\\n''Omni'' has much in common with plugins such as [[Streams|https://saqimtiaz.github.io/sq-tw/streams.html]] by [[Saq Imtiaz|https://github.com/saqimtiaz]] and [[NotoWritey|https://marxsal.github.io/various/notowritey.html]] by Mark S. ([[Marxsal|https://github.com/Marxsal]]).\\n\\n!!Basic capabilities\\n\\n* Quickly add tiddlers within a collection, without needing to think of a title right away (or ever) (using the ''Quick'' plugin)\\n* Edit tiddler text in-place\\n* Rearrange tiddlers within and between omnibuses by drag and drop\\n* Drag and drop to add tiddlers to the omnibus\\n* Add (existing) tags to tiddlers by drag and drop\\n* Set indentation levels or styles for tiddlers within the omnibus\\n* \\\"Fold\\\" and \\\"unfold\\\" tiddler transclusions \\n\\n!!Dependencies\\n\\nThe ''Omni'' plugin requires the companion ''Quick'' plugin (https://github.com/clutterstack/TW5-quick) for entering new tiddlers within omnibuses.\\n\\nCameron Fischer's Relink plugin (https://github.com/flibbles/tw5-relink) is not strictly necessary but is very handy for any ~TiddlyWiki, and it can be configured to watch the omniparent field generated by ''Omni''. However, the `omniparent` field is redundant for the moment and may be removed from the ''Omni'' plugin.\\n\\n''Omni'' currently uses multiline text in a custom field. This creates problems with saving tiddlers on node.js. [[Saq Imtiaz's patch|https://groups.google.com/g/tiddlywiki/c/H1CAnuKWgng/m/Gf3mZaaZCQAJ]] fixed it for me.\\n\\n\\n''Omnibuses:''\\n\\n<<<\\n Are tiddlers that transclude a set of other tiddlers (determined by their presence in the omnibus tiddler's `list` field).\\n Offer display and limited editing options for listed tiddlers.\\n<<<\\n\\nAnother way to look at an omnibus is as something kind of like a tiddler with a ''list-links-draggable'' macro in it, with a complicated ''itemTemplate''.\\n\\nA tiddler can be made into an \\\"omnibus\\\" by tagging it <<tag omnibus>>. It can also have other tags, other fields, and text, like any tiddler.\\n\\n!! Motivations\\n\\n* to present multiple related tiddlers at once with the ability to reorganize, edit, and tag them from a \\\"bird's eye\\\" view;\\n* to reduce mental overhead during note capture while adding some inherent organization;\\n* to provide a scaffolding to create a structured document out of tiddlers.\\n* to free up tags for general relationships rather than specific tiddler grouping;\\n\"\n },\n \"$:/plugins/can/omni/fleet-macros\": {\n \"title\": \"$:/plugins/can/omni/fleet-macros\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define fleet()\\n<$set name=parentval value=<<currentTiddler>> >\\n<div class=\\\"can-fleet-stream\\\">\\n\\t<$list filter=\\\"[all[current]list[]is[tiddler]]\\\">\\n\\t\\t<<check-if-omni-for-caption>><br>\\n <<fleet>><br>\\n\\t</$list>\\n</div>\\n\\n</$set>\\n\\\\end\"\n },\n \"$:/plugins/can/omni/omnitab\": {\n \"title\": \"$:/plugins/can/omni/omnitab\",\n \"tags\": \"$:/tags/SideBar\",\n \"caption\": \"Omni\",\n \"list-after\": \"$:/core/ui/SideBar/Open\",\n \"text\": \"<<new-omnibus-button>>\\n<<fleettoc>>\"\n },\n \"$:/plugins/can/omni/checkmark.svg\": {\n \"title\": \"$:/plugins/can/omni/checkmark.svg\",\n \"text\": \"<svg\\n width=\\\"22.0px\\\"\\n height=\\\"22.0px\\\"\\n viewBox=\\\"0 0 22.0 22.0\\\">\\n <g>\\n <path\\n d=\\\"M 19.593799,-0.00844703 C 13.454028,4.7259572 9.3446824,11.99357 7.6719245,15.112646 6.677435,13.151145 5.2034927,10.646341 2.835987,8.2747561 L 0.7148933,10.393896 c 3.4023181,3.408181 5.4316406,8.466797 5.4316406,8.466797 l 1.2226563,3.13086 1.5117187,-3.001954 c 0,0 5.9575031,-11.5449655 12.5429681,-16.623046 z\\\">\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/delist.svg\": {\n \"title\": \"$:/plugins/can/omni/delist.svg\",\n \"text\": \"<svg\\n viewBox=\\\"0 0 32.0 32.0\\\"\\n height=\\\"22.0px\\\"\\n width=\\\"22.0px\\\">\\n <g>\\n <path\\n d=\\\"M 14.794524,0 H 30.205476 C 31.199642,0 32,0.80035758 32,1.7945237 V 4.2054763 C 32,5.1996424 31.199642,6 30.205476,6 H 14.794524 C 13.800358,6 13,5.1996424 13,4.2054763 V 1.7945237 C 13,0.80035758 13.800358,0 14.794524,0 Z\\\"\\n />\\n <path\\n d=\\\"m 9.268064,2.9895639 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-2.99999996 3,3 0 0 1 3,2.99999996\\\" />\\n <path\\n d=\\\"m 9.268064,29.029032 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3\\\" />\\n <path\\n d=\\\"m 2.0253906,10.201172 c -0.1481002,5.02e-4 -0.2970584,0.05801 -0.4101562,0.171875 l -1.20703128,1.216797 c -0.22619555,0.227733 -0.22578012,0.592164 0.001953,0.818359 L 4.2304688,16.201172 0.41015625,19.994141 C 0.182423,20.220336 0.18200757,20.58672 0.40820312,20.814453 l 1.20703128,1.214844 c 0.2261955,0.227733 0.5925792,0.230102 0.8203125,0.0039 l 3.8320312,-3.806641 3.8339839,3.806641 c 0.227735,0.226196 0.592164,0.223827 0.81836,-0.0039 l 1.207031,-1.214844 c 0.226196,-0.227733 0.22578,-0.594117 -0.002,-0.820312 L 8.3066406,16.201172 12.125,12.408203 c 0.227733,-0.226195 0.228149,-0.590626 0.002,-0.818359 l -1.207031,-1.216797 c -0.226196,-0.227733 -0.590626,-0.228149 -0.81836,-0.002 l -3.8339839,3.80664 -3.8320312,-3.80664 C 2.3216802,10.257996 2.1734908,10.20067 2.0253906,10.201172 Z\\\"/>\\n <path\\n d=\\\"M 14.794524,13 H 30.205476 C 31.199642,13 32,13.800358 32,14.794524 v 2.410952 C 32,18.199642 31.199642,19 30.205476,19 H 14.794524 C 13.800358,19 13,18.199642 13,17.205476 V 14.794524 C 13,13.800358 13.800358,13 14.794524,13 Z\\\" />\\n <path\\n d=\\\"M 14.794524,26 H 30.205476 C 31.199642,26 32,26.800358 32,27.794524 v 2.410952 C 32,31.199642 31.199642,32 30.205476,32 H 14.794524 C 13.800358,32 13,31.199642 13,30.205476 V 27.794524 C 13,26.800358 13.800358,26 14.794524,26 Z\\\" />\\n </g>\\n</svg>\"\n },\n \"$:/plugins/can/omni/fastarrow-top.svg\": {\n \"title\": \"$:/plugins/can/omni/fastarrow-top.svg\",\n \"text\": \"<svg\\n viewBox=\\\"40 42 85 95\\\"\\n height=\\\"22px\\\"\\n width=\\\"22px\\\">\\n <g>\\n <path\\n d=\\\"M 89.048827,42.334883 A 1.2609298,1.2609298 0 0 0 87.77707,43.595787 V 63.688102 H 48.109208 a 1.5875,1.5875 0 0 0 -1.5875,1.5875 v 18.825207 a 1.5875,1.5875 0 0 0 1.5875,1.5875 H 87.77707 v 20.092831 a 1.2609298,1.2609298 0 0 0 2.055172,0.97927 l 37.497448,-30.4059 a 2.1454366,2.1454366 0 0 0 0,-3.332612 L 89.832242,42.616003 a 1.2609298,1.2609298 0 0 0 -0.783415,-0.28112 z\\\" />\\n <path\\n d=\\\"m 51.004478,43.27296 v 2.883334 a 1.0583333,1.0583333 45 0 0 1.058333,1.058333 H 81.760247 A 1.0583333,1.0583333 135 0 0 82.81858,46.156294 V 43.27296 A 1.0583333,1.0583333 45 0 0 81.760247,42.214627 H 52.062811 a 1.0583333,1.0583333 135 0 0 -1.058333,1.058333 z\\\"/>\\n <path\\n d=\\\"m 35.93881,54.021224 v 2.883334 a 1.0583333,1.0583333 45 0 0 1.058333,1.058333 h 37.026253 a 1.0583333,1.0583333 135 0 0 1.058333,-1.058333 V 54.021224 A 1.0583333,1.0583333 45 0 0 74.023396,52.962891 H 36.997143 a 1.0583333,1.0583333 135 0 0 -1.058333,1.058333 z\\\"/>\\n <path\\n d=\\\"m 58.371094,102.88605 v 2.88334 a 1.0583333,1.0583333 45 0 0 1.058333,1.05833 h 21.488802 a 1.0583333,1.0583333 135 0 0 1.058333,-1.05833 v -2.88334 a 1.0583333,1.0583333 45 0 0 -1.058333,-1.05833 H 59.429427 a 1.0583333,1.0583333 135 0 0 -1.058333,1.05833 z\\\"/>\\n <path\\n d=\\\"m 40.017273,92.39557 v 2.883334 a 1.0583333,1.0583333 45 0 0 1.058333,1.058333 h 37.092623 a 1.0583333,1.0583333 135 0 0 1.058333,-1.058333 V 92.39557 A 1.0583333,1.0583333 45 0 0 78.168229,91.337237 H 41.075606 a 1.0583333,1.0583333 135 0 0 -1.058333,1.058333 z\\\"/>\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/fish-nosquare.svg\": {\n \"title\": \"$:/plugins/can/omni/fish-nosquare.svg\",\n \"text\": \"<svg\\n viewBox=\\\"0 0 22.0 22.0\\\"\\n height=\\\"22.0px\\\"\\n width=\\\"22.0px\\\">\\n <g\\n transform=\\\"matrix(1.2678533,0,0,1.2678533,-2.5424848,-2.0950321)\\\">\\n <path\\n d=\\\"m 11.851562,6.171875 c 0.233756,0.6667476 0.435949,1.2452296 0.572266,2.0039062 C 12.270119,8.2136303 11.609037,8.2926151 11.501953,8.328125 11.028488,7.4485896 10.526723,6.8969209 9.8828125,6.2851562 10.227176,7.0899873 10.568795,7.8568999 10.607422,8.5332031 10.13863,8.6520485 10.414085,8.6277761 9.9492188,8.7734375 9.5719284,8.8630752 9.4232082,8.8989156 9.125,8.96875 8.6296379,8.0700472 7.7455057,6.9631724 7.3164062,6.7460938 7.8906098,7.5896971 8.4281613,8.5191764 8.6464844,9.109375 8.555314,9.1327216 8.5152057,9.1544959 8.421875,9.1796875 8.0856625,8.5499356 7.3343206,7.6306804 6.8398438,7.3925781 7.3936108,8.1326329 7.7978949,8.6265312 8.0292969,9.2773438 7.9160662,9.3092714 7.8906436,9.3240549 7.7753906,9.3574219 7.4590877,8.8818723 6.7167893,8.1411056 6.4179688,8.0253906 6.8742943,8.6477835 7.2402243,8.9720331 7.4160156,9.4511719 7.3149677,9.4811869 7.2654917,9.4888029 7.1640625,9.5195312 6.9409979,9.101852 6.352229,8.6967904 6.1425781,8.5859375 6.4970642,9.068419 6.7175571,9.2857104 6.875,9.6152344 6.7353285,9.6574454 6.7122901,9.6606659 6.5722656,9.7011719 6.3868657,9.3954542 6.0605941,9.1854662 5.8808594,9.0664062 6.0558929,9.3826448 6.3105469,9.78125 6.3105469,9.78125 5.9196199,9.888597 5.5538604,9.9936302 4.9121094,9.9570312 4.5072968,9.9339462 2.613827,6.9933666 2.2285156,7.3554688 c -0.516279,0.922473 0.024228,2.2745724 0.029297,3.0585932 0.0038,0.589008 -0.3189963,1.505912 -0.066406,3.029297 0.3778151,0.691151 2.226792,-2.21032 2.6757813,-2.24414 0.6562538,-0.04943 1.064319,0.07338 1.546875,0.330078 -0.1049829,0.285681 -0.1540594,0.520675 -0.3066406,0.832031 0.2920098,-0.277304 0.4475334,-0.553599 0.5488281,-0.771484 0.09823,0.017 0.098053,0.04497 0.1972656,0.06445 -0.112076,0.399033 -0.2728979,0.717877 -0.5058594,1.126953 -0.1944971,0.341534 0.6886659,-0.681383 0.8242188,-1.027344 0.097957,0.02101 0.1047857,0.04847 0.203125,0.07227 -0.1181485,0.47223 -0.3451531,0.925868 -0.5957031,1.419922 0.2959791,-0.305218 0.816278,-0.899294 0.9492187,-1.333985 0.105207,0.02984 0.1176563,0.04224 0.2402344,0.07031 -0.1230572,0.438106 -0.4787786,0.987321 -0.7265625,1.521484 0.368277,-0.368084 0.9111817,-0.891876 1.0957031,-1.414062 0.2458337,0.06925 0.4317829,0.119536 0.6855469,0.195312 0.8605239,0.263932 2.4783361,0.661162 2.6660151,0.666016 -0.03884,0.04796 -0.165099,0.08303 -0.1875,0.185547 0.0627,0.159021 1.010853,1.012909 1.287109,0.818359 0.306916,-0.263713 0.423275,-0.671161 0.507813,-0.74414 2.837512,-0.311098 4.23578,-1.155313 5.830078,-2.007813 -0.0049,-0.156822 0.235889,-0.77103 0.230469,-0.927734 C 18.70199,9.8705947 18.866354,9.9599863 18.083984,9.5195312 17.408628,8.833115 16.546904,8.6420359 13.154297,8.1152344 12.795642,7.3969875 12.519337,6.8030307 11.851562,6.171875 Z m 5.128907,3.1679688 c 0.0013,-3.9e-6 0.0026,-3.9e-6 0.0039,0 0.35929,-2.163e-4 0.650607,0.2911002 0.650391,0.6503906 2.16e-4,0.3592906 -0.291101,0.6506066 -0.650391,0.6503906 -0.358527,-8.62e-4 -0.648653,-0.291863 -0.648437,-0.6503906 -2.27e-4,-0.3570124 0.287531,-0.6473869 0.644531,-0.6503906 z\\\" />\\n <path \\n d=\\\"M 9.3416624,9.1214654 C 8.8834535,8.3639605 9.0346124,8.4490735 8.2817437,7.5750587 7.8511937,7.6531835 6.6824069,8.2834781 6.101005,9.4929922 l 0.485357,0.6926698 z\\\"\\n style=\\\"opacity:0.5;\\\" />\\n <path\\n style=\\\"opacity:0.5;\\\"\\n d=\\\"M 8.7996259,11.616319 C 8.3377096,12.344258 8.3054165,12.488859 7.5628087,13.214225 7.1502852,12.99189 6.7517152,12.885783 6.1703133,11.676269 L 6.497875,10.766771 Z\\\" />\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/fish-square.svg\": {\n \"title\": \"$:/plugins/can/omni/fish-square.svg\",\n \"text\": \"<svg\\n viewBox=\\\"0 0 22.0 22.0\\\"\\n height=\\\"22.0px\\\"\\n width=\\\"22.0px\\\">\\n <g\\n <g\\n transform=\\\"matrix(0.72727253,0,0,0.72727253,2.9321688,3.1183511)\\\"\\n >\\n <path\\n d=\\\"M 3.3210351,0 C 1.5573802,0 0.09251953,1.4648606 0.09251951,3.2285156 v 1.7792969 c 0.20178128,-0.024812 0.41432903,-0.030447 0.64648438,-0.019531 0.58075661,0.027311 1.12253531,0.2560106 1.33203121,0.3632812 0.3839967,0.1966217 0.662604,0.4245911 0.875,0.6132812 V 3.2285156 c 0,-0.2326729 0.1423273,-0.375 0.375,-0.375 H 18.865957 c 0.232673,0 0.375,0.1423271 0.375,0.375 v 3.7539063 c 0.498824,0.2184529 0.912702,0.5496115 1.375,0.8222656 a 2.0977077,2.0977077 0 0 1 0.679688,0.2363281 c 0.461918,0.2600487 0.605636,0.3586263 0.796875,0.4726563 V 3.2285156 C 22.09252,1.4648606 20.629612,0 18.865957,0 Z M 22.09252,15.398438 c -0.818593,0.424206 -1.757736,0.857389 -2.851563,1.255858 v 2.117188 c 0,0.232673 -0.142327,0.376953 -0.375,0.376953 H 3.3210351 c -0.2326727,0 -0.3749999,-0.144279 -0.375,-0.376953 v -1.265625 c -0.04507,0.03776 -0.07642,0.07533 -0.1269531,0.113281 -0.1965906,0.14764 -0.879191,0.62043 -1.6835937,0.742188 a 2.0977077,2.0977077 0 0 1 -0.00391,0 c -0.41540284,0.06287 -0.7475223,0.04215 -1.03906249,-0.02148 v 0.431641 c 0,1.763655 1.46486059,3.228516 3.22851559,3.228515 H 18.865957 c 1.763655,0 3.226563,-1.46486 3.226563,-3.228515 z\\\" />\\n <g\\n transform=\\\"matrix(1.2678536,0,0,1.2678536,-2.4499704,-1.3470889)\\\"\\n >\\n <path\\n d=\\\"m 11.851562,6.171875 c 0.233756,0.6667476 0.435949,1.2452296 0.572266,2.0039062 C 12.270119,8.2136303 11.609037,8.2926151 11.501953,8.328125 11.028488,7.4485896 10.526723,6.8969209 9.8828125,6.2851562 10.227176,7.0899873 10.568795,7.8568999 10.607422,8.5332031 10.13863,8.6520485 10.414085,8.6277761 9.9492188,8.7734375 9.5719284,8.8630752 9.4232082,8.8989156 9.125,8.96875 8.6296379,8.0700472 7.7455057,6.9631724 7.3164062,6.7460938 7.8906098,7.5896971 8.4281613,8.5191764 8.6464844,9.109375 8.555314,9.1327216 8.5152057,9.1544959 8.421875,9.1796875 8.0856625,8.5499356 7.3343206,7.6306804 6.8398438,7.3925781 7.3936108,8.1326329 7.7978949,8.6265312 8.0292969,9.2773438 7.9160662,9.3092714 7.8906436,9.3240549 7.7753906,9.3574219 7.4590877,8.8818723 6.7167893,8.1411056 6.4179688,8.0253906 6.8742943,8.6477835 7.2402243,8.9720331 7.4160156,9.4511719 7.3149677,9.4811869 7.2654917,9.4888029 7.1640625,9.5195312 6.9409979,9.101852 6.352229,8.6967904 6.1425781,8.5859375 6.4970642,9.068419 6.7175571,9.2857104 6.875,9.6152344 6.7353285,9.6574454 6.7122901,9.6606659 6.5722656,9.7011719 6.3868657,9.3954542 6.0605941,9.1854662 5.8808594,9.0664062 6.0558929,9.3826448 6.3105469,9.78125 6.3105469,9.78125 5.9196199,9.888597 5.5538604,9.9936302 4.9121094,9.9570312 4.5072968,9.9339462 2.613827,6.9933666 2.2285156,7.3554688 c -0.516279,0.922473 0.024228,2.2745724 0.029297,3.0585932 0.0038,0.589008 -0.3189963,1.505912 -0.066406,3.029297 0.3778151,0.691151 2.226792,-2.21032 2.6757813,-2.24414 0.6562538,-0.04943 1.064319,0.07338 1.546875,0.330078 -0.1049829,0.285681 -0.1540594,0.520675 -0.3066406,0.832031 0.2920098,-0.277304 0.4475334,-0.553599 0.5488281,-0.771484 0.09823,0.017 0.098053,0.04497 0.1972656,0.06445 -0.112076,0.399033 -0.2728979,0.717877 -0.5058594,1.126953 -0.1944971,0.341534 0.6886659,-0.681383 0.8242188,-1.027344 0.097957,0.02101 0.1047857,0.04847 0.203125,0.07227 -0.1181485,0.47223 -0.3451531,0.925868 -0.5957031,1.419922 0.2959791,-0.305218 0.816278,-0.899294 0.9492187,-1.333985 0.105207,0.02984 0.1176563,0.04224 0.2402344,0.07031 -0.1230572,0.438106 -0.4787786,0.987321 -0.7265625,1.521484 0.368277,-0.368084 0.9111817,-0.891876 1.0957031,-1.414062 0.2458337,0.06925 0.4317829,0.119536 0.6855469,0.195312 0.8605239,0.263932 2.4783361,0.661162 2.6660151,0.666016 -0.03884,0.04796 -0.165099,0.08303 -0.1875,0.185547 0.0627,0.159021 1.010853,1.012909 1.287109,0.818359 0.306916,-0.263713 0.423275,-0.671161 0.507813,-0.74414 2.837512,-0.311098 4.23578,-1.155313 5.830078,-2.007813 -0.0049,-0.156822 0.235889,-0.77103 0.230469,-0.927734 C 18.70199,9.8705947 18.866354,9.9599863 18.083984,9.5195312 17.408628,8.833115 16.546904,8.6420359 13.154297,8.1152344 12.795642,7.3969875 12.519337,6.8030307 11.851562,6.171875 Z m 5.128907,3.1679688 c 0.0013,-3.9e-6 0.0026,-3.9e-6 0.0039,0 0.35929,-2.163e-4 0.650607,0.2911002 0.650391,0.6503906 2.16e-4,0.3592906 -0.291101,0.6506066 -0.650391,0.6503906 -0.358527,-8.62e-4 -0.648653,-0.291863 -0.648437,-0.6503906 -2.27e-4,-0.3570124 0.287531,-0.6473869 0.644531,-0.6503906 z\\\" />\\n <path\\n d=\\\"M 9.3416624,9.1214654 C 8.8834535,8.3639605 9.0346124,8.4490735 8.2817437,7.5750587 7.8511937,7.6531835 6.6824069,8.2834781 6.101005,9.4929922 l 0.485357,0.6926698 z\\\"/>\\n <path\\n d=\\\"M 8.7996259,11.616319 C 8.3377096,12.344258 8.3054165,12.488859 7.5628087,13.214225 7.1502852,12.99189 6.7517152,12.885783 6.1703133,11.676269 L 6.497875,10.766771 Z\\\"/>\\n </g>\\n </g>\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/fish-water.svg\": {\n \"title\": \"$:/plugins/can/omni/fish-water.svg\",\n \"text\": \"<svg\\n width=\\\"22.000204\\\"\\n height=\\\"21.93346\\\"\\n viewBox=\\\"0 0 22.000204 21.93346\\\">\\n <g\\n transform=\\\"translate(-12.771484,-32.548825)\\\">\\n <path\\n d=\\\"m 22.029297,50.120953 c -1.540284,-0.0016 -2.681835,0.745522 -3.621094,1.333984 -0.939259,0.588465 -1.673874,1.024448 -2.613281,1.017579 -0.932442,-0.0068 -1.645549,-0.422081 -2.570313,-0.990235 -0.142528,-0.08757 -0.300298,-0.179622 -0.453125,-0.271484 v 2.328125 c 0.818433,0.473895 1.783982,0.924642 3.007813,0.933594 1.571934,0.0115 2.744872,-0.729243 3.691406,-1.322266 0.946534,-0.593023 1.668208,-1.030211 2.556641,-1.029297 0.888642,9.25e-4 1.552062,0.426482 2.478515,1.021484 0.926454,0.595004 2.112176,1.337647 3.740235,1.339844 1.635172,0.0022 2.823179,-0.743067 3.748047,-1.339844 0.924868,-0.596774 1.582157,-1.02159 2.46875,-1.021484 0.106745,1.3e-5 0.205758,0.02473 0.308593,0.03711 v -2.019532 c -0.102444,-0.0069 -0.202438,-0.01756 -0.308593,-0.01758 -1.537214,-1.83e-4 -2.646209,0.756858 -3.552735,1.341797 -0.905913,0.584544 -1.614455,1.020318 -2.660156,1.019531 -1.039871,-0.0014 -1.75244,-0.439213 -2.662109,-1.023437 -0.90967,-0.584224 -2.022637,-1.336292 -3.558594,-1.337891 z\\\" />\\n <path\\n d=\\\"m 20.201172,32.548828 c -1.541182,-0.0016 -2.684786,0.745523 -3.625,1.333984 -0.940214,0.588463 -1.676186,1.024453 -2.617188,1.017579 -0.442864,-0.0032 -0.825037,-0.03722 -1.1875,-0.08984 v 2.007812 c 0.371044,0.04635 0.754218,0.07898 1.171875,0.08203 1.572884,0.01149 2.745872,-0.729251 3.69336,-1.322266 0.946866,-0.592626 1.671353,-1.029636 2.560547,-1.029297 0.890186,9.26e-4 1.555034,0.426477 2.482422,1.021484 0.927386,0.595009 2.113059,1.337709 3.742187,1.339844 1.636231,0.0022 2.826159,-0.743081 3.751953,-1.339844 0.925794,-0.596761 1.584505,-1.021589 2.472656,-1.021484 0.742865,8.8e-5 1.381677,0.318877 2.125,0.771484 v -2.27539 c -0.618742,-0.284012 -1.313882,-0.495998 -2.125,-0.496094 -1.538108,-1.82e-4 -2.649186,0.756856 -3.55664,1.341797 -0.907455,0.584941 -1.615538,1.02091 -2.664063,1.019531 -1.041504,-0.0014 -1.755421,-0.439203 -2.666015,-1.023437 -0.910595,-0.584235 -2.021726,-1.336292 -3.558594,-1.337891 z\\\" />\\n <path\\n d=\\\"m 25.255243,37.559882 c 0.296368,0.961836 0.552719,1.796341 0.725549,2.890792 -0.19488,0.0546 -1.289841,0.287068 -1.642904,0.358048 -0.600284,-1.268799 -1.236449,-2.064625 -2.052833,-2.947143 0.436602,1.161032 0.869726,2.267363 0.918699,3.242984 -0.34985,0.182547 -1.110242,0.512354 -1.610975,0.747009 -0.628047,-1.29645 -1.748997,-2.893203 -2.293033,-3.206356 0.728007,1.216964 1.409543,2.557811 1.686345,3.409219 -0.115591,0.03368 -0.166442,0.06509 -0.284772,0.101431 -0.426268,-0.908467 -1.37886,-2.234565 -2.005784,-2.578046 0.702096,1.067587 1.214669,1.780074 1.508053,2.718923 -0.14356,0.04606 -0.175793,0.06738 -0.321916,0.115519 -0.401026,-0.686018 -1.342152,-1.754632 -1.721013,-1.92156 0.578554,0.89785 1.0425,1.365606 1.265378,2.056801 -0.128114,0.0433 -0.190843,0.05429 -0.31944,0.09861 -0.282813,-0.602535 -1.029286,-1.186868 -1.295093,-1.346782 0.449437,0.696017 0.728989,1.009477 0.928604,1.484841 -0.177083,0.06089 -0.206292,0.06554 -0.383823,0.123972 -0.23506,-0.441022 -0.648724,-0.743946 -0.876602,-0.915699 0.221917,0.456199 0.544781,1.031218 0.544781,1.031218 -0.495638,0.154856 -0.753785,0.0494 -1.567431,-0.0034 -0.513244,-0.0333 -2.913886,-4.275319 -3.402404,-3.752958 -0.654567,1.33074 0.03072,3.281249 0.03714,4.412261 0.0048,0.84969 -0.404441,2.172396 -0.08419,4.369999 0.479014,0.99704 2.823246,-3.18856 3.392499,-3.237348 0.832033,-0.07131 1.195214,-0.04833 1.807024,0.321976 -0.133103,0.412117 -0.195325,0.751115 -0.388775,1.20027 0.370225,-0.400033 0.567406,-0.79861 0.695833,-1.112926 0.124541,0.02452 0.124317,0.06487 0.250104,0.09297 -0.142096,0.575636 -0.345994,1.035594 -0.641356,1.625718 -0.246593,0.49269 0.873128,-0.982948 1.044989,-1.482024 0.124195,0.03031 0.132853,0.06992 0.257533,0.104255 -0.149795,0.681229 -0.437604,1.335637 -0.755264,2.048349 0.375258,-0.440301 1.034921,-1.297302 1.20347,-1.924378 0.133387,0.04305 0.149171,0.06093 0.304582,0.101428 -0.156018,0.632002 -0.607021,1.424288 -0.921175,2.19486 0.466921,-0.53099 1.155245,-1.286601 1.389191,-2.039896 0.311681,0.0999 0.547438,0.17244 0.869173,0.281753 1.091019,0.380743 3.296355,1.107965 3.534304,1.114968 -0.04924,0.06919 -0.209321,0.119777 -0.237722,0.267666 0.07949,0.2294 1.281613,1.461201 1.631865,1.180547 0.389125,-0.380427 0.536651,-0.968202 0.643833,-1.07348 3.59755,-0.448784 5.370349,-1.66663 7.391685,-2.896429 -0.0062,-0.226228 0.299073,-1.112271 0.292201,-1.338329 C 33.940582,42.895576 34.148972,43.02453 33.157041,42.389139 32.300789,41.39893 31.208249,41.123283 26.90692,40.36333 26.452198,39.327203 26.101883,38.470374 25.255243,37.559882 Z m 6.502703,4.570044 c 0.0016,-6e-6 0.0033,-6e-6 0.0049,0 0.455528,-3.12e-4 0.824875,0.419935 0.824601,0.938239 2.74e-4,0.518305 -0.369073,0.938552 -0.824601,0.93824 -0.454559,-0.0012 -0.822397,-0.421035 -0.822123,-0.93824 -2.88e-4,-0.515018 0.364547,-0.933906 0.817171,-0.938239 z\\\"/>\\n <path\\n d=\\\"m 21.610497,42.02048 c -0.580942,-1.09276 -0.389295,-0.969978 -1.343822,-2.230813 -0.545874,0.112701 -2.027725,1.021951 -2.764857,2.76677 l 0.615361,0.999233 z\\\" />\\n <path\\n d=\\\"m 21.094085,45.095144 c -0.441414,1.118418 -0.454371,1.330601 -1.249018,2.49247 -0.560889,-0.248645 -1.082037,-0.333442 -2.043749,-1.965271 l 0.237886,-1.355466 z\\\" />\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/foldall.svg\": {\n \"title\": \"$:/plugins/can/omni/foldall.svg\",\n \"text\": \"<svg\\n width=\\\"22px\\\"\\n height=\\\"22px\\\"\\n viewBox=\\\"0 0 5.8208332 5.8208332\\\">\\n <g\\n id=\\\"layer1\\\"\\n transform=\\\"translate(-65.176061,-76.464584)\\\">\\n <path\\n d=\\\"m 66.047394,79.640625 a 0.2102645,0.2102645 0 0 0 -0.121093,0.06055 0.2102645,0.2102645 0 0 0 0,0.296875 l 0.964843,0.964844 -0.964843,0.96289 a 0.2102645,0.2102645 0 0 0 0,0.298828 0.2102645,0.2102645 0 0 0 0.296875,0 l 1.113281,-1.113281 a 0.21028553,0.21028553 0 0 0 0,-0.296875 l -1.113281,-1.113281 a 0.2102645,0.2102645 0 0 0 -0.175782,-0.06055 z\\\"\\n />\\n <path\\n d=\\\"m 66.086457,76.464844 a 0.2102645,0.2102645 0 0 0 -0.160156,0.06055 0.2102645,0.2102645 0 0 0 0,0.298828 l 0.964843,0.96289 -0.964843,0.964844 a 0.2102645,0.2102645 0 0 0 0,0.296875 0.2102645,0.2102645 0 0 0 0.296875,0 l 1.113281,-1.113281 a 0.21028553,0.21028553 0 0 0 0,-0.296875 l -1.113281,-1.113281 a 0.2102645,0.2102645 0 0 0 -0.136719,-0.06055 z\\\"\\n />\\n </g>\\n <path\\n d=\\\"M 4.7366664,1.5257064e-8 A 0.5032092,0.5032092 0 0 0 4.2333333,0.5033331 V 5.3174999 A 0.5032092,0.5032092 0 0 0 4.7366664,5.8208332 0.5032092,0.5032092 0 0 0 5.2399993,5.3174999 V 0.5033331 A 0.5032092,0.5032092 0 0 0 4.7366664,1.5257064e-8 Z\\\"\\n />\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/indent.svg\": {\n \"title\": \"$:/plugins/can/omni/indent.svg\",\n \"created\": \"20200623134702379\",\n \"creator\": \"chris\",\n \"modified\": \"20200623134840844\",\n \"modifier\": \"chris\",\n \"text\": \"<svg width=\\\"22.0px\\\" height=\\\"22.0px\\\" viewBox=\\\"0 0 32.0 32.0\\\"><g><path d=\\\"M 11 0 C 11 6.4444444 13.543492 9.644468 15.738281 11.427734 C 16.835676 12.319368 17.723114 12.932551 18.220703 13.523438 C 18.718292 14.114324 19 14.630952 19 16 C 19 17.369048 18.718292 17.885676 18.220703 18.476562 C 17.723114 19.067449 16.835676 19.680632 15.738281 20.572266 C 13.543492 22.355532 11 25.555556 11 32 L 15 32 C 15 26.444444 16.456508 25.144468 18.261719 23.677734 C 19.164324 22.944368 20.276886 22.245051 21.279297 21.054688 C 22.281708 19.864324 23 18.130952 23 16 C 23 13.869048 22.281708 12.135676 21.279297 10.945312 C 20.276886 9.7549492 19.164324 9.0556324 18.261719 8.3222656 C 16.456508 6.855532 15 5.5555556 15 0 L 11 0 z \\\"/><path d=\\\"M 7.7832031 7.1796875 L 5.1796875 10.216797 L 6.6992188 11.517578 L 9.5957031 14 L 0 14 L 0 18 L 9.5957031 18 L 6.6992188 20.482422 L 5.1796875 21.783203 L 7.7832031 24.820312 L 9.3007812 23.517578 L 18.072266 16 L 9.3007812 8.4824219 L 7.7832031 7.1796875 z \\\"/> <rect y=\\\"0\\\" x=\\\"18\\\" height=\\\"4\\\" width=\\\"14\\\"/><rect y=\\\"11\\\" x=\\\"25\\\" height=\\\"4\\\" width=\\\"7\\\"/><rect y=\\\"17\\\" x=\\\"25\\\" height=\\\"4\\\" width=\\\"7\\\"/><rect y=\\\"28\\\" x=\\\"18\\\" height=\\\"4\\\" width=\\\"14\\\" /></g></svg>\"\n },\n \"$:/plugins/can/omni/label-tilted.svg\": {\n \"title\": \"$:/plugins/can/omni/label-tilted.svg\",\n \"text\": \"<svg\\n width=\\\"22.0px\\\"\\n height=\\\"22.0px\\\"\\n viewBox=\\\"0 0 22.0 22.0\\\"\\n> \\n <g\\n transform=\\\"matrix(0.82152236,0.35130888,-0.35130888,0.82152236,4.6687619,1.077263)\\\">\\n <path\\n d=\\\"M 1.9511719,0 A 2,2 0 0 0 0,2 v 10.357422 a 2,2 0 0 0 2,2 h 18 a 2,2 0 0 0 2,-2 V 2 A 2,2 0 0 0 20,0 H 2 A 2,2 0 0 0 1.9511719,0 Z M 2.0839844,2.0839844 H 19.916016 V 12.273438 H 2.0839844 Z\\\" />\\n <path\\n d=\\\"M 3.8152325,4.4339099 H 18.184762 V 6.4105594 H 3.8152325 Z\\\" />\\n <path\\n d=\\\"M 3.8152325,7.7763553 H 15.892248 V 9.7530048 H 3.8152325 Z\\\" />\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/make-omni.svg\": {\n \"title\": \"$:/plugins/can/omni/make-omni.svg\",\n \"text\": \"<svg\\n viewBox=\\\"0 0 22.0 22.0\\\"\\n height=\\\"22.0px\\\"\\n width=\\\"22.0px\\\">\\n <g>\\n <path\\n d=\\\"M 13.075923,2.2550036 C 12.729229,2.374713 11.897168,2.5198004 11.54476,2.5906496 10.989068,1.5850721 10.745388,1.3776823 10.104431,0.82288844 10.344571,1.7208971 10.363848,1.9121297 10.41273,2.8859406 10.063529,3.0681494 8.459552,3.8582519 7.959748,4.0924714 7.5200742,3.6082705 7.3778875,3.5210244 6.9468165,3.5527095 6.0008879,3.9210828 5.4016145,4.2378224 5.3250843,4.7809735 4.8303645,4.935533 4.5828845,4.8507854 3.7707449,4.7980863 3.2584528,4.7648532 1.5386053,0.65366704 0.28242147,1.0520878 -0.37093171,2.3803592 0.3130842,4.3272524 0.31949229,5.4561669 0.32427532,6.3042811 -0.08419861,7.6245338 0.23545912,9.8180625 1.389927,10.751768 3.3608976,6.5739284 3.929095,6.5252314 4.7595863,6.4540584 4.8146668,6.5385174 5.4253441,6.9080969 5.4889143,7.4579462 5.8384522,7.74877 6.51517,8.0358437 6.8970493,8.2101972 7.1275886,8.0441637 7.5554292,7.4865975 8.8277789,7.7518249 10.838274,8.6850131 12.25527,9.109348 c -0.04915,0.06906 -0.208933,0.1195493 -0.237281,0.2671693 0.07934,0.2289736 1.279236,1.4584917 1.628839,1.1783577 0.388404,-0.379722 0.535656,-0.9664073 0.642638,-1.07149 3.59088,-0.4479518 5.360391,-1.6635397 7.37798,-2.8910568 -0.0063,-0.2258088 0.298518,-1.1102089 0.291658,-1.335848 C 21.129646,4.6736239 21.33765,4.8023381 20.347558,4.1681257 19.492893,3.179754 18.511073,2.9046174 14.217721,2.146074 13.763841,1.1118674 13.479396,0.90880298 12.634325,0 c 0.231529,0.99338251 0.306707,1.5089531 0.441598,2.2550036 z m 6.703172,2.5908992 c 2.73e-4,0.5173427 -0.368389,0.9150719 -0.823072,0.9147597 -0.453717,-0.0012 -0.820872,-0.3985152 -0.8206,-0.9147597 C 18.135137,4.3318387 18.499295,3.935467 18.955,3.933149 c 0.455706,-0.00224 0.824368,0.3954096 0.824095,0.9127538 z\\\" />\\n <path\\n d=\\\"m 13.998023,14.901204 c -0.284186,0.09812 -0.966227,0.217053 -1.255095,0.275129 -0.455502,-0.824273 -0.655246,-0.994272 -1.18064,-1.449036 0.196842,0.736099 0.212645,0.892853 0.252713,1.691086 C 11.52876,15.567738 10.21398,16.215387 9.8042908,16.407376 9.4438902,16.010478 9.3273391,15.93896 8.973989,15.964933 c -0.7753809,0.301958 -1.2666066,0.561588 -1.3293393,1.00681 -0.4055215,0.126694 -0.6083819,0.05722 -1.2740931,0.01403 -0.4199263,-0.02724 -1.8296869,-3.397185 -2.8593819,-3.070598 -0.5355541,1.088784 0.025134,2.684654 0.030387,3.610027 0.00391,0.695201 -0.3309058,1.777412 -0.068883,3.575449 0.9463185,0.765359 2.5619248,-2.659218 3.0276768,-2.699136 0.6807551,-0.05833 0.7259046,0.0108 1.2264761,0.313836 0.052108,0.450711 0.3386253,0.689101 0.893334,0.924415 0.3130279,0.142917 0.5020009,0.0068 0.8527039,-0.450219 1.0429445,0.217409 2.6909505,0.982343 3.8524625,1.330171 -0.04029,0.05661 -0.171264,0.09799 -0.194499,0.218999 0.06504,0.18769 1.048591,1.195528 1.335161,0.965901 0.318374,-0.311259 0.439078,-0.792165 0.526771,-0.878301 2.943451,-0.367188 4.393923,-1.363606 6.047741,-2.369802 -0.0052,-0.185097 0.244696,-0.91004 0.239072,-1.094997 -0.679906,-0.477767 -0.509406,-0.37226 -1.320985,-0.892125 -0.700571,-0.810169 -1.505369,-1.035699 -5.024637,-1.657477 -0.372047,-0.84774 -0.605208,-1.014192 -1.297913,-1.759139 0.189784,0.814276 0.251409,1.23689 0.361979,1.848428 z m 5.4946,2.123761 c 2.24e-4,0.424067 -0.301968,0.750086 -0.674673,0.74983 -0.371911,-9.83e-4 -0.672868,-0.326664 -0.672646,-0.74983 -2.34e-4,-0.421378 0.298267,-0.746284 0.671808,-0.748185 0.373543,-0.0018 0.675735,0.324119 0.675511,0.748185 z\\\" />\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/new-tag.svg\": {\n \"title\": \"$:/plugins/can/omni/new-tag.svg\",\n \"created\": \"20200629193323690\",\n \"creator\": \"chris\",\n \"modified\": \"20200629193631817\",\n \"modifier\": \"chris\",\n \"text\": \"<svg\\n viewBox=\\\"0 0 22.0 22.0\\\"\\n height=\\\"22.0px\\\"\\n width=\\\"22.0px\\\">\\n <g transform=\\\"matrix(0.46555854,0,0,0.46555854,-24.370154,-90.418716)\\\">\\n <path\\n d=\\\"m 302.2832,734.05078 c -4.77996,0.12596 -8.60012,1.82764 -12.21875,5.39258 -5.14855,5.07216 -15.94955,15.71347 -18.07031,17.80273 v 12.84766 h 8.5 c 6.70418,-6.60464 14.42874,-14.21522 20.17774,-19.87891 -0.20126,0.19828 3.05734,-1.01743 2.77539,-1.03515 l 47.03711,2.95312 c 4.72371,0.29696 8.35966,3.98332 8.58593,8.71094 l 2.25196,47.08203 c 0.0495,1.0345 -0.34035,2.03293 -1.07813,2.75977 L 273.54297,896.0957 213.9707,835.63086 c 22.18493,-21.85576 19.75981,-19.46595 22.4668,-22.13281 v -8.34375 h -13.07227 c -10.64207,10.48412 0.93974,-0.9262 -21.82421,21.5 -4.87736,4.80499 -4.9378,12.8824 -0.13282,17.75976 l 63.16602,64.11133 c 4.80498,4.87737 12.88436,4.9378 17.76172,0.13281 l 88.51562,-87.20898 c 3.79525,-3.73894 5.82697,-8.9246 5.57227,-14.2461 l -2.25781,-47.08203 C 373.57741,747.82353 363.7249,737.81727 351.4375,737.04492 l -47.04492,-2.95312 c -0.72424,-0.0455 -1.42652,-0.059 -2.10938,-0.041 z\\\"\\n transform=\\\"scale(0.26458333)\\\" />\\n <path\\n d=\\\"m -79.523438,204.80664 c -1.998543,0 -3.640626,1.64208 -3.640624,3.64063 6e-6,1.99853 1.642086,3.64062 3.640624,3.64062 1.998539,0 3.638666,-1.64209 3.638672,-3.64062 10e-7,-1.99855 -1.640128,-3.64063 -3.638672,-3.64063 z m 0,2 c 0.917663,0 1.638673,0.72296 1.638672,1.64063 -3e-6,0.91766 -0.721011,1.64062 -1.638672,1.64062 -0.91766,0 -1.640622,-0.72296 -1.640624,-1.64062 -10e-7,-0.91767 0.722961,-1.64063 1.640624,-1.64063 z\\\"\\n transform=\\\"rotate(-44.571775)\\\" />\\n <g\\n transform=\\\"translate(-21.296628,-3.7521578)\\\">\\n <path\\n d=\\\"m 248.0332,744.24219 v 37.43945 h -37.4414 v 15.11914 h 37.4414 v 37.44141 h 15.11719 v -37.44141 h 37.44141 v -15.11914 h -37.44141 v -37.43945 z\\\"transform=\\\"matrix(0.26458333,0,0,0.26458333,21.296628,3.7521578)\\\" />\\n </g>\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/omni-modebar-hide.svg\": {\n \"title\": \"$:/plugins/can/omni/omni-modebar-hide.svg\",\n \"text\": \"<svg\\n width=\\\"22pt\\\"\\n height=\\\"22pt\\\"\\n viewBox=\\\"0 0 44.495857 44.495857\\\">\\n <path\\n d=\\\"M 0,0 C 0,2.1166666 0,4.2333331 0,6.3499997 H 6.3499997 V 0 Z\\\"/>\\n <path\\n d=\\\"m 0,9.7729144 v 1.0156296 7.64648 H 44.478515 V 9.7729144 Z\\\"/>\\n <path\\n d=\\\"m 40.418052,19.579167 v 6.35 h 1.184731 v -6.35 z\\\"/>\\n <path\\n d=\\\"m 37.835418,22.161801 v 1.184731 h 6.35 v -1.184731 z\\\"/>\\n <path\\n d=\\\"m 7.2648394,0.00106 c 0,2.1166666 0,4.2333332 0,6.3499997 H 13.614838 V 0.00106 Z\\\"/>\\n <path\\n d=\\\"m 0,28.064301 v 1.015629 7.64648 h 44.478515 v -8.662109 z\\\"/>\\n <path\\n d=\\\"m 40.418053,37.870553 v 6.35 h 1.18473 v -6.35 z\\\"/>\\n <path\\n d=\\\"m 37.835418,40.453187 v 1.184731 h 6.35 v -1.184731 z\\\"/>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/omni-modebar-show.svg\": {\n \"title\": \"$:/plugins/can/omni/omni-modebar-show.svg\",\n \"text\": \"<svg\\n width=\\\"22pt\\\"\\n height=\\\"22pt\\\"\\n viewBox=\\\"0 0 44.495857 44.495857\\\"\\n >\\n<path\\n d=\\\"m 30.954367,0 c 0,1.3469697 0,2.6939393 0,4.040909 h 6.35 V 0 Z\\\"\\n/> \\n<path\\n d=\\\"m 38.219204,0 c 0,0.9621212 0,1.9242424 0,2.8863635 h 6.35 V 0 Z\\\" />\\n <path\\n d=\\\"M 0,0 C 0,2.1166666 0,4.2333331 0,6.3499997 H 6.3499997 V 0 Z\\\"/>\\n <path\\n d=\\\"m 0,9.7729144 v 1.0156296 7.64648 H 44.478515 V 9.7729144 Z\\\"/>\\n <path\\n d=\\\"m 40.418052,19.579167 v 6.35 h 1.184731 v -6.35 z\\\"/>\\n <path\\n d=\\\"m 37.835418,22.161801 v 1.184731 h 6.35 v -1.184731 z\\\"/>\\n <path\\n d=\\\"m 7.2648394,0.00106 c 0,2.1166666 0,4.2333332 0,6.3499997 H 13.614838 V 0.00106 Z\\\"/>\\n <path\\n d=\\\"m 23.681269,0 c 0,1.7318181 0,3.4636363 0,5.1954544 h 6.35 V 0 Z\\\"/>\\n <path\\n d=\\\"m 0,28.064301 v 1.015629 7.64648 h 44.478515 v -8.662109 z\\\"/>\\n <path\\n d=\\\"m 40.418053,37.870553 v 6.35 h 1.18473 v -6.35 z\\\"\\n />\\n <path\\n d=\\\"m 37.835418,40.453187 v 1.184731 h 6.35 v -1.184731 z\\\"\\n />\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/omnimode-edit.svg\": {\n \"title\": \"$:/plugins/can/omni/omnimode-edit.svg\",\n \"text\": \"<svg\\n viewBox=\\\"0 0 44.495857 44.495857\\\"\\n height=\\\"44.495857mm\\\"\\n width=\\\"44.495857mm\\\">\\n <path d=\\\"m 1.42e-4,3e-5 c 0,2.084652 0,4.1693041 0,6.253956 h 21.24414 V 3e-5 Z\\\" />\\n <path d=\\\"m 26.191864,-4.8e-4 c 0,2.0846367 0,4.1692733 0,6.25391 h 7.39062 V -4.8e-4 Z\\\"/>\\n <path d=\\\"m 37.16087,5.8e-4 c 0,2.0839867 0,4.1679733 0,6.25196 h 7.39062 V 5.8e-4 Z\\\"/>\\n <path d=\\\"M 0,8.7145812 V 9.7302104 17.37669 H 44.478515 V 8.7145812 Z\\\"/>\\n <path d=\\\"m 38.312139,19.579167 v 10.279677 h 1.917896 V 19.579167 Z\\\"/>\\n <path d=\\\"m 34.131249,23.760057 v 1.917896 h 10.279677 v -1.917896 z\\\" />\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/omnimode-listwithtags.svg\": {\n \"title\": \"$:/plugins/can/omni/omnimode-listwithtags.svg\",\n \"text\": \"<svg\\n viewBox=\\\"0 0 44.495857 44.495857\\\"\\n height=\\\"22px\\\"\\n width=\\\"22px\\\">\\n <g transform=\\\"matrix(1.2368602,0,0,0.56382448,-71.904435,-90.096257)\\\"> \\n <path\\n d=\\\"m 58.134766,159.79492 c 0,5.12109 0,10.24219 0,15.36328 h 21.24414 v -15.36328 z\\\"/>\\n </g>\\n <path\\n d=\\\"m 29.366866,3.0029121 v 0.1824864 a 3,3 45 0 0 3,3 l 9.173728,0 a 3,3 135 0 0 3,-3 V 3.0029121 a 3,3 45 0 0 -3,-2.99999997 l -9.173728,0 a 3,3 135 0 0 -3,2.99999997 z\\\"/>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/omnimode-simple.svg\": {\n \"title\": \"$:/plugins/can/omni/omnimode-simple.svg\",\n \"text\": \"<svg\\n width=\\\"44.495857mm\\\"\\n height=\\\"44.495857mm\\\"\\n viewBox=\\\"0 0 44.495857 44.495857\\\">\\n <path\\n d=\\\"m 1.42e-4,-0.02536 c 0,2.88737 0,5.77474 0,8.66211 h 21.166666 v -8.66211 z\\\"/>\\n <path\\n d=\\\"m 38.312139,12.699996 v 10.279677 h 1.917896 V 12.699996 Z\\\"/>\\n <path\\n d=\\\"m 34.131249,16.880886 v 1.917896 h 10.279677 v -1.917896 z\\\"/>\\n <path\\n d=\\\"m 26.193749,0 c 0,2.0846367 0,4.1692733 0,6.2539102 h 7.39062 V 0 Z\\\"/>\\n <path\\n d=\\\"m 37.162755,0.00106 c 0,2.0839867 0,4.1679733 0,6.2519602 h 7.39062 V 0.00106 Z\\\"/>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/omnimode-simple2.svg\": {\n \"title\": \"$:/plugins/can/omni/omnimode-simple2.svg\",\n \"text\": \"<svg\\n width=\\\"22px\\\"\\n height=\\\"22px\\\"\\n viewBox=\\\"0 0 44.495857 44.495857\\\">\\n <g\\n transform=\\\"translate(-58.134624,-159.79489)\\\"\\n >\\n <path \\n d=\\\"m 58.134766,159.79492 v 0.97461 14.38867 h 21.24414 v -15.36328 z\\\"\\n />\\n </g>\\n <g\\n transform=\\\"translate(-118.91335,-100.02782)\\\" >\\n <path \\n d=\\\"m 144.41469,100.39492 h 6.65622 v 5.51864 h -6.65622 z\\\" />\\n <path\\n d=\\\"m 144.04688,100.02734 v 0.36719 5.88672 h 7.39062 v -6.25391 z\\\"/>\\n </g>\\n <g \\n transform=\\\"translate(-106.94145,-100.02782)\\\">\\n <path \\n d=\\\"m 144.41469,100.39492 h 6.65622 v 5.51864 h -6.65622 z\\\"\\n />\\n <path \\n d=\\\"m 144.04688,100.02734 v 0.36719 5.88672 h 7.39062 v -6.25391 z\\\"\\n />\\n </g>\\n <path \\n d=\\\"m 38.280119,18.579698 v 10.279677 h 1.917896 V 18.579698 Z\\\"\\n />\\n <path \\n d=\\\"m 34.099229,22.760588 v 1.917896 h 10.279677 v -1.917896 z\\\"\\n />\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/omnimode-view.svg\": {\n \"title\": \"$:/plugins/can/omni/omnimode-view.svg\",\n \"text\": \"<svg\\n width=\\\"22px\\\"\\n height=\\\"22px\\\"\\n viewBox=\\\"0 0 44.495857 44.495857\\\">\\n <g\\n transform=\\\"translate(-58.134624,-159.79489)\\\">\\n <g>\\n <path\\n d=\\\"m 59.150799,160.78505 h 42.447041 v 6.63128 H 59.150799 Z\\\" />\\n <path\\n d=\\\"m 58.134766,159.76953 v 1.01563 7.64648 h 44.478514 v -8.66211 z m 2.03125,2.03125 h 40.416014 v 4.59961 H 60.166016 Z\\\"/>\\n </g>\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/tag-area.svg\": {\n \"title\": \"$:/plugins/can/omni/tag-area.svg\",\n \"tags\": \"$:/tags/images\",\n \"text\": \"<svg\\n viewBox=\\\"0 0 22.0 22.0\\\"\\n height=\\\"22.0px\\\"\\n width=\\\"22.0px\\\">\\n <path\\n d=\\\"M 3.1437584,8.7594097 C 1.8328785,10.050833 3.2595146,8.6453213 0.45547335,11.407759 -0.14531512,11.999633 -0.15276007,12.9946 0.43911271,13.595389 L 8.2198418,21.49256 c 0.5918728,0.60079 1.5870829,0.608234 2.1878712,0.01636 L 21.310981,10.766602 c 0.467496,-0.460559 0.717761,-1.0993235 0.686387,-1.7548207 L 21.719253,3.2122625 C 21.646749,1.697461 20.433126,0.46489964 18.919576,0.36976231 L 13.124629,0.00599985 C 13.035419,3.95209e-4 12.948911,-0.00126771 12.864797,9.49515e-4 v -2.46386e-6 C 12.276007,0.01646268 11.805443,0.22607397 11.359704,0.66519982 10.72551,1.2899836 9.3950535,2.6007698 9.1338203,2.8581228 m 1.0470217,1.5825623 c 0.825814,-0.8135531 1.777318,-1.751017 2.485475,-2.4486648 -0.02479,0.024424 0.3766,-0.1253261 0.341869,-0.1275088 l 5.793986,0.3637625 c 0.581862,0.036579 1.029735,0.4906615 1.057606,1.0730051 l 0.277395,5.7995188 c 0.0061,0.1274287 -0.04192,0.2504143 -0.132803,0.3399458 L 9.3246037,19.961483 1.9865493,12.513483 C 4.7192674,9.8213115 4.4205435,10.115686 4.7539879,9.7871847\\\" />\\n <path\\n d=\\\"m 16.17231,3.4882637 c -0.662819,0.652984 -0.6709,1.7340989 -0.01791,2.396919 0.652982,0.6628121 1.734099,0.6708957 2.396916,0.017913 C 19.214133,5.250113 19.221562,4.1696338 18.568586,3.5068178 17.9156,2.8439968 16.835133,2.835279 16.172315,3.4882628 Z m 0.65346,0.6633016 c 0.304343,-0.299828 0.77968,-0.2956334 1.07951,0.00871 0.299826,0.3043437 0.296916,0.7796889 -0.0074,1.0795163 -0.304343,0.299827 -0.780327,0.2962702 -1.080154,-0.00807 -0.299831,-0.3043456 -0.296273,-0.7803293 0.0081,-1.0801573 z\\\"/>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/tiddler-fish.svg\": {\n \"title\": \"$:/plugins/can/omni/tiddler-fish.svg\",\n \"text\": \"<svg\\n width=\\\"22.0px\\\"\\n height=\\\"22.0px\\\"\\n viewBox=\\\"0 0 22.0 22.0\\\"\\n >\\n <g>\\n <path\\n d=\\\"m 10.78125,6.5 c 0.309779,0.8333522 0.697636,1.8608062 0.511719,2.5371094 -0.593861,0.1188454 -0.651348,0.094573 -1.240235,0.2402344 C 9.7219388,8.8754562 9.3450185,8.3786369 8.8144531,8.0371094 9.0598033,8.4636417 9.2832579,8.8501885 9.4453125,9.3613281 9.2542225,9.4228755 9.1093321,9.4489895 8.9381027,9.4902346 8.3105835,8.5915318 7.3283668,7.4328812 6.7847883,7.2158026 7.5121831,8.059406 8.1238214,9.0230826 8.4003906,9.6132812 8.284897,9.6366278 8.2354179,9.6584022 8.1171875,9.6835938 7.6912773,9.0538419 6.8076704,8.1003893 6.1812727,7.862287 6.8827786,8.6023418 7.3260031,9.1304375 7.6191406,9.78125 7.4757013,9.8131777 7.4431774,9.8282623 7.2971762,9.8616293 6.8964873,9.3860797 6.0697647,8.6458964 5.6912222,8.5301814 6.2692903,9.1525743 6.6191065,9.4759393 6.8417969,9.9550781 6.7137906,9.9850931 6.6519268,9.9927096 6.5234375,10.023438 6.2408617,9.6057588 5.6312601,9.1836351 5.3656767,9.0727822 5.8147357,9.5552637 5.9587562,9.789617 6.1582031,10.119141 5.9812688,10.161352 5.9520238,10.164572 5.7746423,10.205078 5.5397798,9.8993603 5.2385201,9.6716199 5.0108342,9.55256 5.2325647,9.8687985 5.4414062,10.285156 5.4414062,10.285156 4.9461842,10.392503 4.484838,10.497537 3.671875,10.460938 3.1590629,10.437853 0.75959255,7.4972729 0.27148438,7.859375 c -0.65401651,0.9224731 0.0306884,2.274572 0.0371094,3.058594 0.004824,0.589007 -0.4039623,1.505912 -0.0839844,3.029297 0.4786118,0.691151 2.81989712,-2.210321 3.38867182,-2.244141 0.8313349,-0.04943 1.3485725,0.07338 1.959869,0.330078 -0.1329907,0.285681 -0.1728308,0.485519 -0.366119,0.796875 0.3699148,-0.277304 0.5456693,-0.518142 0.6739883,-0.736027 0.1244368,0.017 0.1230908,0.04468 0.2487713,0.06416 -0.1419766,0.399033 -0.2311622,0.663189 -0.5262752,1.072266 -0.2463869,0.341534 0.7581307,-0.625326 0.9298477,-0.971287 0.1240913,0.02101 0.1320086,0.0471 0.2565837,0.0709 -0.1496692,0.47223 -0.253803,0.763759 -0.571197,1.257813 0.374943,-0.305218 0.8524933,-0.736582 1.0209011,-1.171273 0.1332751,0.02984 0.1469686,0.04164 0.3022491,0.06971 -0.1558875,0.438106 -0.3998853,0.987321 -0.7137752,1.521484 0.4665292,-0.368084 0.949562,-0.891876 1.1833116,-1.414062 0.3114194,0.06925 0.5460042,0.119536 0.8674696,0.195312 1.090102,0.263932 2.4907468,0.744182 3.7578128,0.796876 0,-10e-7 -0.940682,0.26202 -1.234375,0.716796 1.023385,0.595374 1.590594,1.017179 2.11914,0.789063 0.252731,-0.485246 0.537358,-0.780023 0.772011,-1.269216 1.467576,-0.161805 1.767961,-0.222152 2.807233,-0.465993 1.673291,-0.392599 3.482758,-1.065772 4.887553,-2.106588 -0.0062,-0.156822 -0.01263,-0.313999 -0.01953,-0.470703 C 21.031462,10.188702 21.350605,10.221965 20.099609,9.703125 18.16635,8.9013212 17.177497,8.7364521 14.519531,8.6191406 14.047125,7.972197 13.510016,7.3354582 13.025391,6.6757812 13.32151,7.3425288 13.696948,8.0077524 13.923828,8.6523438 13.422001,8.6901924 12.922738,8.7537393 12.425781,8.8320312 12.13027,8.2030922 11.760012,7.7202959 11.386719,7.2597656 11.183305,7.0068093 10.977849,6.7612356 10.78125,6.5 Z m 8.166016,3.4023438 c 0.0013,-3.9e-6 0.0026,-3.9e-6 0.0039,0 0.35929,-2.156e-4 0.650606,0.2911002 0.65039,0.6503902 2.16e-4,0.35929 -0.2911,0.650607 -0.65039,0.650391 -0.358528,-8.61e-4 -0.648655,-0.291862 -0.648438,-0.650391 -2.27e-4,-0.357013 0.287532,-0.647387 0.644532,-0.6503902 z\\\"/>\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/tiddler-here.svg\": {\n \"title\": \"$:/plugins/can/omni/tiddler-here.svg\",\n \"created\": \"20200623125558901\",\n \"creator\": \"chris\",\n \"modified\": \"20200623130307735\",\n \"modifier\": \"chris\",\n \"text\": \"<svg\\n width=\\\"36.0pt\\\"\\n height=\\\"36.0pt\\\"\\n viewBox=\\\"0 0 22.0 22.0\\\">\\n <g>\\n <path\\n d=\\\"m 17.693707,4.7162875 c -0.288525,0.181298 -0.602085,0.3534993 -0.933165,0.5183885 -0.511433,0.2547046 -1.052776,0.4962893 -1.606658,0.7532698 -0.0238,-0.2466223 0.02085,-0.4622284 0.11283,-0.7612162 -0.118311,0.2826831 -0.264557,0.561497 -0.293999,0.8464007 -0.169262,0.079224 -0.340259,0.160491 -0.50917,0.2428215 -0.0615,-0.3944744 0.0055,-0.7281201 0.162097,-1.205547 -0.197961,0.4520456 -0.438691,0.8985354 -0.44783,1.3463524 -0.123731,0.062285 -0.246838,0.1263133 -0.369011,0.1910223 -0.155226,-0.5259352 -0.119216,-0.9418994 0.02509,-1.5542181 -0.161181,0.4703348 -0.358008,0.932741 -0.372185,1.4019751 -0.0024,0.1099092 0.0049,0.2192039 0.02448,0.3280062 -0.138024,0.076481 -0.274028,0.1552505 -0.408103,0.2332877 C 12.94667,6.6330061 12.922222,6.262974 12.974155,5.8341179 13.001714,5.632302 13.047349,5.4156321 13.1086,5.1736528 13.041266,5.3610036 12.969729,5.5491901 12.903278,5.7378139 12.725732,6.2697331 12.591823,6.7917316 12.68175,7.2945719 12.572885,7.3612774 12.464631,7.4282289 12.359783,7.4954472 12.138858,6.856208 12.154566,6.3188945 12.311504,5.5274049 12.079507,6.2964817 11.79846,7.0492907 11.954252,7.7656078 11.886855,7.8116702 11.814532,7.8597225 11.74957,7.9057715 11.648277,7.96524 11.547133,8.024316 11.446037,8.0856673 11.201607,7.6020726 11.065348,7.1221989 10.938131,6.6328407 10.892369,7.2337437 10.79493,7.8327897 10.978785,8.377122 10.436404,8.7241691 9.9058861,9.097025 9.3937411,9.4952702 8.7137772,9.1730567 8.1819799,8.1644679 7.7546601,7.3056985 7.8111157,7.6563451 7.8540059,8.0025259 7.90754,8.3485161 8.0031031,8.9827 8.1321689,9.6180282 8.445636,10.284453 8.0432133,10.645069 7.657657,11.025416 7.2995202,11.431206 6.9037056,10.827566 6.5985546,10.075557 6.2516145,9.3808459 6.459693,10.238324 6.6375088,11.11207 6.8882396,11.923215 5.3419657,13.87895 4.4242805,16.356776 4.8509124,19.691756 c 0.1426115,0.08304 0.2852075,0.166131 0.4278077,0.249186 2.5121643,-1.169947 4.2994047,-3.16814 5.7712619,-5.351085 l 1.62891,0.407469 c 0.49557,-0.240159 0.466607,-0.92311 0.633447,-2.07706 -0.545801,-0.106324 -1.091899,0.273218 -1.637811,0.706231 0.174502,-0.279485 0.346138,-0.559867 0.513308,-0.840995 0.832747,-1.384494 1.520766,-2.734731 2.281743,-3.8931664 0.302715,0.156334 0.628544,0.2178208 0.952552,0.2634824 0.219173,0.036035 0.437823,0.064137 0.655699,0.1080631 C 15.774087,9.1705789 15.532108,9.0927067 15.296266,8.9848209 15.083817,8.8926499 14.882799,8.778761 14.658054,8.6148626 c 0.05879,-0.085873 0.118163,-0.1708299 0.17799,-0.2545873 0.02897,-0.041948 0.05818,-0.083386 0.08772,-0.1245911 0.427114,0.2254959 0.927728,0.2431356 1.397208,0.3295991 -0.51056,-0.1477655 -0.828338,-0.2598274 -1.225894,-0.5644804 0.07555,-0.098814 0.152871,-0.1951491 0.231382,-0.2901802 0.363956,0.1639844 0.809412,0.1605281 1.227486,0.2113552 -0.447738,-0.099921 -0.730968,-0.1841146 -1.05331,-0.4157235 0.08198,-0.09403 0.165061,-0.1871111 0.249181,-0.2768401 0.242889,0.097411 0.532707,0.1005419 0.806669,0.1354023 C 16.267012,7.2985422 16.074693,7.2413702 15.872507,7.1022824 16.292942,6.6690606 16.7371,6.2865119 17.173405,5.9787351 17.455632,5.7808306 17.73414,5.609582 18.009313,5.4698796 19.026949,5.0753925 21.074488,5.9147939 22.284837,5.715567 22.52927,5.2515373 21.472479,3.7702698 20.329195,2.4208809 19.221635,1.1136593 18.476148,0.19531882 18.223867,0.22640321 17.318231,2.037674 17.876785,3.5690257 17.693707,4.7162875 Z M 6.2601453,16.469827 h 6.183e-4 c 0.353095,-10e-5 0.6394097,0.286071 0.639486,0.639166 -7.53e-5,0.353096 -0.2863903,0.639268 -0.639486,0.639168 -0.3529711,-7.6e-5 -0.6390919,-0.286197 -0.6391672,-0.639168 7.6e-5,-0.352723 0.2858099,-0.63874 0.6385326,-0.639166 z\\\"/>\\n <path\\n d=\\\"M 7.0979943,18.344417 A 7.8899225,1.6890131 0 0 1 12.613173,19.955812 7.8899225,1.6890131 0 0 1 4.7224701,21.645035 7.8899225,1.6890131 0 0 1 0.44192768,21.374405 8.1507188,1.8112708 0 0 0 6.4506064,21.961653 8.1507188,1.8112708 0 0 0 14.601325,20.150382 8.1507188,1.8112708 0 0 0 7.0979943,18.344417 Z\\\" />\\n <path\\n d=\\\"M 4.4058515,18.676956 A 5.2633089,1.1696242 0 0 0 0.75147097,19.791312 5.2633089,1.1696242 0 0 0 6.0137081,20.960501 5.2633089,1.1696242 0 0 0 11.277714,19.791312 5.2633089,1.1696242 0 0 0 8.0903019,18.71587 c -0.062034,0.05118 -0.1175467,0.108879 -0.1804196,0.159194 a 3.8655902,0.7425289 0 0 1 2.0306045,0.652694 3.8655902,0.7425289 0 0 1 -3.86487,0.742903 3.8655902,0.7425289 0 0 1 -3.8648699,-0.742903 3.8655902,0.7425289 0 0 1 2.1933358,-0.668614 c -0.00187,-0.06243 0.00284,-0.120273 0.00177,-0.182188 z\\\" />\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/omni/unfoldall.svg\": {\n \"title\": \"$:/plugins/can/omni/unfoldall.svg\",\n \"text\": \"<svg\\n width=\\\"22px\\\"\\n height=\\\"22px\\\"\\n viewBox=\\\"0 0 5.8208332 5.8208332\\\">\\n <g\\n transform=\\\"translate(0,0.10847452)\\\">\\n <g\\n transform=\\\"translate(-65.881248,-76.464584)\\\">\\n <path\\n d=\\\"m 66.102661,80.152344 a 0.2102645,0.2102645 0 0 0 -0.158203,0.0625 0.2102645,0.2102645 0 0 0 0,0.296875 l 1.111328,1.111328 a 0.21028553,0.21028553 0 0 0 0.296875,0 l 1.113281,-1.111328 a 0.2102645,0.2102645 0 0 0 0,-0.296875 0.2102645,0.2102645 0 0 0 -0.296875,0 l -0.964843,0.96289 -0.962891,-0.96289 a 0.2102645,0.2102645 0 0 0 -0.138672,-0.0625 z\\\"/>\\n <path\\n d=\\\"m 66.102661,76.976562 a 0.21047604,0.21047604 0 0 0 -0.160156,0.0625 0.21047604,0.21047604 0 0 0 0,0.296876 l 1.113281,1.113281 a 0.21049709,0.21049709 0 0 0 0.298828,0 l 1.111328,-1.113281 a 0.21047604,0.21047604 0 0 0 0,-0.296876 0.21047604,0.21047604 0 0 0 -0.296875,0 l -0.96289,0.964844 -0.964844,-0.964844 a 0.21047604,0.21047604 0 0 0 -0.138672,-0.0625 z\\\"/>\\n </g>\\n </g>\\n <path\\n d=\\\"M 4.7366664,1.5257062e-8 A 0.5032092,0.5032092 0 0 0 4.2333333,0.50333307 V 5.3175001 A 0.5032092,0.5032092 0 0 0 4.7366664,5.8208332 0.5032092,0.5032092 0 0 0 5.2399993,5.3175001 V 0.50333307 A 0.5032092,0.5032092 0 0 0 4.7366664,1.5257062e-8 Z\\\"/>\\n</svg>\"\n },\n \"$:/plugins/can/omni/unindent.svg\": {\n \"title\": \"$:/plugins/can/omni/unindent.svg\",\n \"created\": \"20200623134234839\",\n \"creator\": \"chris\",\n \"modified\": \"20200623134632387\",\n \"modifier\": \"chris\",\n \"text\": \"<svg width=\\\"22.0px\\\" height=\\\"22.0px\\\" viewBox=\\\"0 0 32.0 32.0\\\"><g><path d=\\\"m 21,0 c 0,6.4444444 -2.543492,9.644468 -4.738281,11.427734 -1.097395,0.891634 -1.984833,1.504817 -2.482422,2.095704 C 13.281708,14.114324 13,14.630952 13,16 c 0,1.369048 0.281708,1.885676 0.779297,2.476562 0.497589,0.590887 1.385027,1.20407 2.482422,2.095704 C 18.456508,22.355532 21,25.555556 21,32 H 17 C 17,26.444444 15.543492,25.144468 13.738281,23.677734 12.835676,22.944368 11.723114,22.245051 10.720703,21.054688 9.718292,19.864324 9,18.130952 9,16 9,13.869048 9.718292,12.135676 10.720703,10.945312 11.723114,9.7549492 12.835676,9.0556324 13.738281,8.3222656 15.543492,6.855532 17,5.5555556 17,0 Z\\\"/><path d=\\\"M 24.216797,7.1796875 26.820312,10.216797 25.300781,11.517578 22.404297,14 H 32 v 4 h -9.595703 l 2.896484,2.482422 1.519531,1.300781 -2.603515,3.037109 L 22.699219,23.517578 13.927734,16 22.699219,8.4824219 Z\\\" /><rect transform=\\\"scale(-1,1)\\\" y=\\\"0\\\" x=\\\"-14\\\" height=\\\"4\\\" width=\\\"14\\\"/><rect transform=\\\"scale(-1,1)\\\" y=\\\"11\\\" x=\\\"-7\\\" height=\\\"4\\\" width=\\\"7\\\" /><rect transform=\\\"scale(-1,1)\\\" y=\\\"17\\\" x=\\\"-7\\\" height=\\\"4\\\" width=\\\"7\\\" /><rect transform=\\\"scale(-1,1)\\\" y=\\\"28\\\" x=\\\"-14\\\" height=\\\"4\\\" width=\\\"14\\\"/></g></svg>\\n\"\n },\n \"$:/plugins/can/omni/license\": {\n \"title\": \"$:/plugins/can/omni/license\",\n \"caption\": \"license\",\n \"text\": \"BSD 3-Clause License\\n\\nCopyright (c) 2020, Chris Nicoll\\n\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n },\n \"$:/can/macros/omnifleettoc\": {\n \"title\": \"$:/can/macros/omnifleettoc\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define omnitoclabel(chars:100)\\n<$wikify name=\\\"can-long-label\\\" text={{{ [{!!title}!match{!!created}] ~[<currentTiddler>get[text]!is[blank]] ~[<currentTiddler>get[title]]}}}>\\n\\t\\t<$text text={{{ [<can-long-label>split[]first[$chars$]join[]] }}}/>\\n</$wikify>\\n\\\\end\\n\\n\\\\define omni-link-caption(class)\\n<$draggable tag=\\\"span\\\" tiddler=<<currentTiddler>> startactions=<<omni-start-tiddler-drag>> >\\n <$button class=\\\"can-omni-dragdrop tc-btn-invisible $class$\\\" to={{!!title}} tooltip=\\\"Tiddler link\\\" aria-label=\\\"Tiddler link\\\"><<omnitoclabel chars:35>>\\n </$button>\\n</$draggable>\\n\\\\end\\n\\n\\\\define omni-dragdrop-caption(class) \\n<$droppable actions=\\\"<<can-omni-shift-drop>><$action-listops $tiddler=<<actionTiddler>> $field='omniparent' $subfilter='[<currentTiddler>]'/><$action-listops $subfilter='[<actionTiddler>]'/><$action-sendmessage $message='tm-auto-save-wiki'/>\\\" >\\n <<omni-link-caption class:$class$ >>\\n</$droppable>\\n\\\\end\\n\\n\\\\define fleettoc-level-component()\\n<$list filter=\\\"[all[current]tag[fleet]]\\\" emptyMessage=\\\"<<check-if-omni-for-caption>>\\\" ><<omni-dragdrop-caption class:'fleet-label'>></$list>\\n\\\\end\\n\\n\\\\define check-if-omni-for-caption()\\n<$list filter=\\\"[all[current]tag[omnibus]]\\\" emptyMessage=\\\"<<omni-link-caption>>\\\" >\\n<<omni-dragdrop-caption class:'omnibus-label'>>\\n</$list>\\n\\\\end\\n\\n\\\\define fleettoc-linked-body(root,sort:\\\"\\\",itemClassFilter,exclude,path)\\n<$qualify name=\\\"toc-state\\\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\\n <$vars parentval=<<__root__>> >\\n <$set name=\\\"toc-item-class\\\" filter=<<__itemClassFilter__>> emptyValue=\\\"toc-item-selected\\\" value=\\\"toc-item\\\" >\\n <li class=<<toc-item-class>>>\\n <$list filter=\\\"[all[current]list[]$sort$limit[1]]\\\" variable=\\\"ignore\\\" emptyMessage=\\\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\\\">\\n <$reveal type=\\\"nomatch\\\" stateTitle=<<toc-state>> text=\\\"open\\\">\\n <$button setTitle=<<toc-state>> setTo=\\\"open\\\" class=\\\"tc-btn-invisible tc-popup-keep\\\">\\n {{$:/core/images/right-arrow}}\\n </$button>\\n </$reveal>\\n <$reveal type=\\\"match\\\" stateTitle=<<toc-state>> text=\\\"open\\\">\\n <$button setTitle=<<toc-state>> setTo=\\\"close\\\" class=\\\"tc-btn-invisible tc-popup-keep\\\">\\n {{$:/core/images/down-arrow}}\\n </$button>\\n </$reveal>\\n </$list>\\n <<fleettoc-level-component>>\\n <$reveal type=\\\"match\\\" stateTitle=<<toc-state>> text=\\\"open\\\">\\n <$macrocall $name=\\\"fleettoc-list\\\" root=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\\n </$reveal>\\n </li>\\n </$set>\\n </$vars>\\n</$qualify>\\n\\\\end\\n\\n\\\\define fleettoc-unlinked-body(root,sort:\\\"\\\",itemClassFilter,exclude,path)\\n<$qualify name=\\\"toc-state\\\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\\n <$vars parentval=<<__root__>> >\\n <$set name=\\\"toc-item-class\\\" filter=<<__itemClassFilter__>> emptyValue=\\\"toc-item-selected\\\" value=\\\"toc-item\\\">\\n <li class=<<toc-item-class>>>\\n <$list filter=\\\"[all[current]list[]$sort$limit[1]]\\\" variable=\\\"ignore\\\" emptyMessage=\\\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\\\">\\n <$reveal type=\\\"nomatch\\\" stateTitle=<<toc-state>> text=\\\"open\\\">\\n <$button setTitle=<<toc-state>> setTo=\\\"open\\\" class=\\\"tc-btn-invisible tc-popup-keep\\\">\\n {{$:/core/images/right-arrow}}\\n <<omnilabel chars:35>>\\n </$button>\\n </$reveal>\\n <$reveal type=\\\"match\\\" stateTitle=<<toc-state>> text=\\\"open\\\">\\n <$button setTitle=<<toc-state>> setTo=\\\"close\\\" class=\\\"tc-btn-invisible tc-popup-keep\\\">\\n {{$:/core/images/down-arrow}}\\n <<omnilabel chars:35>>\\n </$button>\\n </$reveal>\\n </$list>\\n <$reveal type=\\\"match\\\" stateTitle=<<toc-state>> text=\\\"open\\\">\\n <$macrocall $name=\\\"fleettoc-list\\\" root=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\\n </$reveal>\\n </li>\\n </$set>\\n </$vars>\\n</$qualify>\\n\\\\end\\n\\n\\\\define fleettoc-empty-message()\\n<$macrocall $name=\\\"fleettoc-linked-body\\\" root=<<root>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\\n\\\\end\\n\\n\\\\define fleettoc-list(root,sort:\\\"\\\",itemClassFilter,exclude,path)\\n<$vars root=<<__root__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__root__>] }}}>\\n <$set name=\\\"excluded\\\" filter=\\\"\\\"\\\"[enlist<__exclude__>] [<__root__>]\\\"\\\"\\\">\\n <ol class=\\\"tc-toc omni-toc\\\">\\n <$list filter=\\\"\\\"\\\"[all[shadows+tiddlers]list<__root__>!has[draft.of]$sort$] -[<__root__>] -[enlist<__exclude__>]\\\"\\\"\\\">\\n <$list filter=\\\"[all[current]toc-link[no]]\\\" variable=\\\"ignore\\\" emptyMessage=<<fleettoc-empty-message>> >\\n <$macrocall $name=\\\"fleettoc-unlinked-body\\\" root=<<__root__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\\n </$list>\\n </$list>\\n </ol>\\n </$set>\\n</$vars>\\n\\\\end\\n\\n\\\\define fleettoc()\\n<div class=\\\"omni-sidebar-toc\\\">\\n<span class=\\\"fleet-label\\\">Omnibus Fleets</span>\\n<ol class=\\\"tc-toc omni-toc fleet-list\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]tag[fleet]!has[draft.of]sort[]]\\\">\\n<$macrocall $name=\\\"fleettoc-linked-body\\\" root=<<currentTiddler>> />\\n</$list>\\n</ol>\\n<<fleetless-omnis>>\\n</div>\\n\\\\end\\n\\n\\\\define omnis-filter() [all[shadows+tiddlers]tag[omnibus]!tag[fleet]!has[draft.of]sort[]]\\n\\n\\\\define fleetless-omnis()\\n<hr>\\n<<delist-from-omni class:\\\"fleet-label\\\" caption:\\\"Solo omnibuses\\\">>\\n<ol class=\\\"tc-toc omni-toc\\\">\\n<$list filter=<<omnis-filter>>>\\n <$list filter=\\\"[all[current]listed[]tag[fleet]]\\\" variable=\\\"ignore\\\" emptyMessage=\\\"<$macrocall $name='fleettoc-linked-body' root=<<currentTiddler>> />\\\">\\n </$list>\\n</$list>\\n</ol>\\n\\\\end\\n\\n\\\\define delist-from-omni(class caption)\\n<$droppable actions=\\\"<<can-omni-shift-drop>><$action-sendmessage $message='tm-auto-save-wiki'/>\\\" >\\n<span class=\\\"can-omnibus-droppable $class$\\\">$caption$ :</span>\\n</$droppable><br>\\n\\\\end\\n\"\n },\n \"$:/plugins/can/omni/omnibus-macros\": {\n \"title\": \"$:/plugins/can/omni/omnibus-macros\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define omni-datastate() <<qualify '$:/state/can/omni/$(currentTiddler)$-data'>>\\n\\n\\\\define omni-mode-from-parent-or-self() {{$(parentval)$!!omnibus-mode}}\\n\\n\\\\define omni-mode-from-self() {{!!omnibus-mode}}\\n\\n\\\\define can-omni-teaser() <div class=\\\"omni-teaser tc-tiddler-body\\\"><$macrocall $name=teaser title=<<currentTiddler>> chars=300 maxelements=1 /></div>\\n\\n\\\\define omni-mode-call-macro() <$macrocall $name=every$(mode)$ />\\n\\n\\\\define omni-stream-class() can-omni-stream $(mode)$\\n\\n\\\\define compose-omni(mode:{{!!omnibus-mode}})\\n<$vars datatiddler=$(omni-datastate)$ parentval=<<currentTiddler>> >\\n<$set name=mode value=$mode$ emptyValue=read >\\n<$qualify name=omniqual title={{!!created}}>\\n<<can-omni-toptools>>\\n<div class=\\\"omni-stream-container\\\">\\n <div class=<<omni-stream-class>> >\\n <$list filter=\\\"[<mode>match[read]then[]] [<mode>match[toc]then[]] [<mode>match[namedro]then[]] [<mode>match[list]then[]]\\\" variable=\\\"null\\\" emptyMessage=<<can-omni-topadd>>/>\\n <$list filter=\\\"[all[current]list[]is[tiddler]]\\\">\\n <$qualify name=createdid title={{!!created}} >\\n <<omni-mode-call-macro>>\\n </$qualify>\\n </$list>\\n <$list filter=\\\"[<mode>match[read]then[]] [<mode>match[toc]then[]] [<mode>match[namedro]then[]] [<mode>match[list]then[]]\\\" variable=\\\"null\\\" emptyMessage=<<can-omni-quickappend>>/> \\n </div>\\n <$list filter=\\\"[<mode>!match[toc]then[]]\\\" variable=\\\"null\\\" emptyMessage=<<can-omni-singleview>>/> \\n</div>\\n</$qualify>\\n</$set>\\n</$vars>\\n\\n\\\\end\\n\\n\\\\define compose-omni-subtoc()\\n<$vars datatiddler=$(omni-datastate)$>\\n<$qualify name=omniqual title={{!!created}}>\\n<div class=\\\"can-omni-stream subtoc\\\" >\\n\\t<$list filter=\\\"[all[current]list[]is[tiddler]]\\\">\\n <$qualify name=createdid title={{!!created}} >\\n <<everytoc>>\\n </$qualify>\\n\\t</$list>\\n</div>\\n</$qualify>\\n</$vars>\\n\\\\end\"\n },\n \"$:/plugins/can/omni/buttons/omnimodebar\": {\n \"title\": \"$:/plugins/can/omni/buttons/omnimodebar\",\n \"caption\": \"{{$:/plugins/can/omni/omni-modebar-hide.svg}}{{$:/language/Buttons/omnimodebar-hide/Caption}}\",\n \"created\": \"20201104222546779\",\n \"description\": \"{{$:/language/Buttons/omnimodebar-hide/Hint}}\",\n \"modified\": \"20201105015227943\",\n \"showModeState\": \"show\",\n \"showmodestate\": \"show\",\n \"tags\": \"$:/tags/ViewToolbar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n<$reveal type=\\\"nomatch\\\" state=!!showModeState text=\\\"hide\\\" default=\\\"show\\\">\\n<$button tooltip={{$:/language/Buttons/omnimodebar-hide/Hint}} aria-label={{$:/language/Buttons/omnimodebar-hide/Caption}} class=<<tv-config-toolbar-class>>>\\n<$action-setfield $tiddler=<<currentTiddler>> showModeState=hide/>\\n<$list filter=\\\"[<tv-config-toolbar-icons>match[yes]]\\\" variable=\\\"listItem\\\">\\n{{$:/plugins/can/omni/omni-modebar-hide.svg}}\\n</$list>\\n<$list filter=\\\"[<tv-config-toolbar-text>match[yes]]\\\">\\n<span class=\\\"tc-btn-text\\\">\\n<$text text=\\\" \\\"/>\\n<$text text={{$:/language/Buttons/omnimodebar-hide/Caption}}/>\\n</span>\\n</$list>\\n</$button>\\n</$reveal>\\n<$reveal type=\\\"match\\\" state=!!showModeState text=\\\"hide\\\" default=\\\"show\\\">\\n<$button tooltip={{$:/language/Buttons/omnimodebar-show/Hint}} aria-label={{$:/language/Buttons/omnimodebar-show/Caption}} class=<<tv-config-toolbar-class>>>\\n<$action-setfield $tiddler=<<currentTiddler>> showModeState=show/>\\n<$list filter=\\\"[<tv-config-toolbar-icons>match[yes]]\\\" variable=\\\"listItem\\\">\\n{{$:/plugins/can/omni/omni-modebar-show.svg}}\\n</$list>\\n<$list filter=\\\"[<tv-config-toolbar-text>match[yes]]\\\">\\n<span class=\\\"tc-btn-text\\\">\\n<$text text=\\\" \\\"/>\\n<$text text={{$:/language/Buttons/omnimodebar-show/Caption}}/>\\n</span>\\n</$list>\\n</$button>\\n</$reveal>\\n\"\n },\n \"$:/plugins/can/omni/omni2clicklistener.js\": {\n \"title\": \"$:/plugins/can/omni/omni2clicklistener.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/can/omni/omni2clicklistener.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nMashup between the core keyboard widget and https://danielorodriguez.com/TW5-2click2edit/:\\nAllows an event to trigger actions or messages, like the keyboard widget, but for the \\ndblclick event only, and like 2click2edit it doesn't enclose child content in yet another element\\nbut instead adds a listener to its parent element.\\n\\nIn fact, don't enclose anything in it; it won't get rendered. Just close it:\\ne.g. <$omnidblclick actions=\\\"<<omni-startedit-actions>>\\\"/>\\n\\nI haven't actually tested messages, so it's possible I haven't got that working properly.\\n\\n\\\\*/\\n\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n\\nvar ClickListener = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nClickListener.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nClickListener.prototype.render = function(parent,nextSibling) {\\n this.parentDomNode = parent;\\n this.computeAttributes();\\n\\tthis.execute();\\n\\tvar self = this;\\n /*Danielo says: Since the event listener have been added to the parent, the \\\"this\\\" property is pointing to the\\n wrong object, we should call our edit function with our widget object set as the this property.*/\\n parent.addEventListener(\\\"dblclick\\\",function(event){\\n var handled = self.invokeActions(self,event);\\n\\t\\t\\tif(self.actions) {\\n\\t\\t\\t\\tself.invokeActionString(self.actions,self,event);\\n\\t\\t\\t}\\n\\t\\t\\tself.dispatchMessage(event);\\n\\t\\t\\tif(handled || self.actions || self.message) {\\n\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n });\\n};\\n\\nClickListener.prototype.dispatchMessage = function(event) {\\n\\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\\\"currentTiddler\\\")});\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nClickListener.prototype.execute = function() {\\n var self = this;\\n\\t// Get attributes\\n\\tthis.actions = this.getAttribute(\\\"actions\\\",\\\"\\\");\\n\\tthis.message = this.getAttribute(\\\"message\\\",\\\"\\\");\\n\\tthis.param = this.getAttribute(\\\"param\\\",\\\"\\\");\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nClickListener.prototype.refresh = function(changedTiddlers) {\\n\\treturn false;\\n};\\n\\nexports.omnidblclick = ClickListener;\\n\\n})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/can/omni/ui/tagaddtemplate\": {\n \"title\": \"$:/plugins/can/omni/ui/tagaddtemplate\",\n \"created\": \"20200630202624857\",\n \"creator\": \"chris\",\n \"modified\": \"20200705021705324\",\n \"modifier\": \"chris\",\n \"omni-tagaddtoggle\": \"show\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"THis tiddler isn't used yet. It's for adding tags through the TW widget, but that's too ugly still.\\n\\n\\\\define can-omni-tagaddbutton() \\n<$set name=\\\"newTagNameTiddler\\\" value=<<qualify \\\"$:/temp/NewTagName\\\">>>\\n<$set name=\\\"tag\\\" value={{{ [<newTagNameTiddler>get[text]] }}}>\\n<$button set=\\\"$:/temp/NewTagName\\\" setTo=\\\"\\\" class=\\\"can-omnibus-meta-controls tc-btn-invisible\\\">\\n<$macrocall $name=\\\"add-tag-actions\\\" actions=<<__actions__>>/>\\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\\n{{$:/plugins/can/omni/new-tag.svg}}\\n</$button>\\n</$set></$set>\\n\\\\end\\n\\n\\\\define can-omni-tagadd()\\n<$importvariables filter=\\\"[[$:/core/ui/EditTemplate/tags]]\\\">\\n<$fieldmangler>\\n<div class=\\\"can-omni-tagadd\\\">\\n <$set name=\\\"tabIndex\\\" value={{$:/config/EditTabIndex}}>\\n <$reveal type=\\\"match\\\" state=\\\"!!omni-tagaddtoggle\\\" text=\\\"show\\\" tag=div class=\\\"can-omni-button-container\\\">\\n\\t<$button class=\\\"can-omnibus-meta-controls tc-btn-invisible\\\" actions=\\\"<$action-setfield omni-tagaddtoggle='hide'/>\\\">{{$:/core/images/cancel-button}}</$button>\\n </$reveal>\\n\\t<$reveal type=\\\"match\\\" state=\\\"!!omni-tagaddtoggle\\\" text=\\\"show\\\" tag=div>\\n <$macrocall $name=\\\"tag-picker\\\"/>\\n </$reveal>\\n <$reveal type=\\\"nomatch\\\" state=\\\"!!omni-tagaddtoggle\\\" text=\\\"show\\\" tag=div class=\\\"can-omni-button-container\\\">\\n <$button class=\\\"can-omnibus-meta-controls tc-btn-invisible\\\" actions=\\\"<$action-setfield omni-tagaddtoggle='show'/>\\\">{{$:/plugins/can/omni/new-tag.svg}}</$button>\\n </$reveal>\\n <$reveal type=\\\"match\\\" state=\\\"!!omni-tagaddtoggle\\\" text=\\\"show\\\" tag=div class=\\\"can-omni-button-container\\\">\\n\\t<<can-omni-tagaddbutton>>\\n </$reveal>\\n </$set>\\n</div>\\n</$fieldmangler>\\n</$importvariables>\\n\\\\end\\n\\n<<can-omni-tagadd>>\"\n },\n \"$:/plugins/can/omni/overhead-macros\": {\n \"title\": \"$:/plugins/can/omni/overhead-macros\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define can-omni-toptools()\\n <div class=\\\"can-omni-toptools\\\">\\n <$list filter=\\\"[<mode>match[todo]then[]] [<mode>match[list]then[]]\\\" emptyMessage=<<can-omni-foldall>> variable=\\\"null\\\"/>\\n <$list filter=\\\"[{!!showModeState}match[hide]then[]]\\\" emptyMessage=<<omni-viewswitcher>> variable=\\\"null\\\"/>\\n </div>\\n\\\\end\\n\\n\\\\define omni-viewswitcher()\\n <div class=\\\"can-omni-viewswitcher\\\">\\n\\t\\t<$button set=\\\"!!omnibus-mode\\\" setTo=\\\"edit\\\" class=\\\"tc-btn-invisible can-omni-button\\\" selectedClass=\\\"can-omni-button-selected\\\" tooltip=\\\"Deluxe editing\\\" aria-label=\\\"Deluxe editing\\\">{{$:/plugins/can/omni/omnimode-edit.svg}}</$button>\\n\\t\\t<$button set=\\\"!!omnibus-mode\\\" setTo=\\\"todo\\\" class=\\\"tc-btn-invisible can-omni-button\\\" selectedClass=\\\"can-omni-button-selected\\\" tooltip=\\\"Todo list\\\" aria-label=\\\"Todo list\\\"><<unfoldallactions>>{{$:/plugins/can/omni/omnimode-simple.svg}}</$button>\\n\\t\\t<!--<$button set=\\\"!!omnibus-mode\\\" setTo=\\\"list\\\" class=\\\"tc-btn-invisible can-omni-button\\\" selectedClass=\\\"can-omni-button-selected\\\" tooltip=\\\"List with tags\\\" aria-label=\\\"List with tags\\\"><<unfoldallactions>>{{$:/plugins/can/omni/omnimode-listwithtags.svg}}</$button>-->\\n\\t\\t<$button set=\\\"!!omnibus-mode\\\" setTo=\\\"read\\\" class=\\\"tc-btn-invisible can-omni-button\\\" selectedClass=\\\"can-omni-button-selected\\\" tooltip=\\\"Reading mode\\\" aria-label=\\\"Reading mode\\\">{{$:/plugins/can/omni/omnimode-view.svg}}</$button>\\n <$button set=\\\"!!omnibus-mode\\\" setTo=\\\"named\\\" class=\\\"tc-btn-invisible can-omni-button\\\" selectedClass=\\\"can-omni-button-selected\\\" tooltip=\\\"Edit mode with title\\\" aria-label=\\\"Edit mode with title\\\">named</$button>\\n <$button set=\\\"!!omnibus-mode\\\" setTo=\\\"namedro\\\" class=\\\"tc-btn-invisible can-omni-button\\\" selectedClass=\\\"can-omni-button-selected\\\" tooltip=\\\"Read-only mode with title\\\" aria-label=\\\"Read-only mode with title\\\">namedro</$button>\\n\\t\\t<$button set=\\\"!!omnibus-mode\\\" setTo=\\\"toc\\\" class=\\\"tc-btn-invisible can-omni-button\\\" selectedClass=\\\"can-omni-button-selected\\\" tooltip=\\\"TOC mode\\\" aria-label=\\\"TOC mode\\\">toc</$button>\\n\\t</div>\\n\\\\end\\n\\n\\\\define unfoldallactions() \\n <$list filter='[all[current]list[]is[tiddler]]'>\\n <$qualify name=createdid title={{!!created}} >\\n <$action-setfield $tiddler=<<foldstatetiddler>> $value='show'/>\\n </$qualify>\\n </$list>\\n\\\\end\\n\\n\\\\define foldallactions() \\n <$list filter='[all[current]list[]is[tiddler]]'>\\n <$qualify name=createdid title={{!!created}} >\\n <$action-setfield $tiddler=<<foldstatetiddler>> $value='hide'/>\\n </$qualify>\\n </$list>\\n\\\\end\\n\\n\\\\define can-omni-foldall()\\n<div class=\\\"can-omni-foldall\\\">\\n <$button class=\\\"tc-btn-invisible can-omni-button\\\" tooltip=\\\"Unfold all items\\\" aria-label=\\\"Unfold all items\\\">\\n {{$:/core/images/unfold-all-button}}\\n <$list filter='[all[current]list[]is[tiddler]]'>\\n <$qualify name=createdid title={{!!created}} >\\n <$action-setfield $tiddler=<<foldstatetiddler>> $value='show'/>\\n </$qualify>\\n </$list>\\n </$button>\\n <$button class=\\\"tc-btn-invisible can-omni-button\\\" tooltip=\\\"Fold all items\\\" aria-label=\\\"Fold all items\\\">\\n {{$:/core/images/fold-all-button}}\\n <$list filter='[all[current]list[]is[tiddler]]'>\\n <$qualify name=createdid title={{!!created}} >\\n <$action-setfield $tiddler=<<foldstatetiddler>> $value='hide'/>\\n </$qualify>\\n </$list>\\n </$button>\\n</div>\\n\\\\end\\n\\n\\\\define classfilt() can-outline-item [[$(datatiddler)$]has:index[$(currentTiddler)$]then{$(datatiddler)$##$(currentTiddler)$}else[0]] +[join[-]] can-omni-text\\n\\n\\n\\\\define can-omni-topadd()\\n<$vars openstatetid=<<top-quick-openstatetid>> quickstatetid=<<top-quickstatetid>>>\\n<div class=\\\"can-omni-topadd\\\">\\n\\t<$droppable tag=\\\"div\\\" actions=\\\"<<can-omni-shift-drop>><$action-listops $subfilter='[<actionTiddler>] +[putfirst[]]'/><$action-listops $tiddler=<<actionTiddler>> $field='omniparent' $subfilter='[<currentTiddler>]' /><$action-sendmessage $message='tm-auto-save-wiki'/>\\\">\\n\\t\\t<<can-omni-toggleadd>>\\n\\t</$droppable>\\n</div>\\n<$reveal type=match state=<<openstatetid>> text=\\\"open\\\" tag=div class=\\\"can-omni-bottom\\\">\\n\\t<$macrocall $name=\\\"quickadd\\\" layout=\\\"subui\\\" quickstatetid=<<quickstatetid>> omniparent=<<parentval>> position=\\\"omni-listtop\\\" openstatetid=<<openstatetid>> endstate=\\\"closed\\\" />\\n</$reveal>\\n</$vars>\\n\\\\end\\n\\n\\\\define can-omni-peripheral()\\n<$vars openstatetid=<<peri-quick-openstatetid>> quickstatetid=<<peri-quickstatetid>>>\\n<div class=\\\"can-omni-peripheral\\\">\\n\\t<$droppable tag=\\\"div\\\" actions=\\\"<<can-omni-shift-drop>><$action-listops $tiddler=<<parentval>> $subfilter='+[insertbefore:currentTiddler<actionTiddler>] +[move<actionTiddler>]'/><$action-listops $tiddler=<<actionTiddler>> $field='omniparent' $subfilter='[<parentval>]' /><$action-sendmessage $message='tm-auto-save-wiki'/>\\\">\\n\\t\\t<$macrocall $name=\\\"can-omni-toggleadd\\\"/>\\n\\t</$droppable>\\n</div>\\n<$reveal type=match state=<<openstatetid>> text=\\\"open\\\" tag=div class=\\\"can-omni-bottom\\\">\\n\\t<$macrocall $name=\\\"quickadd\\\" layout=\\\"subui\\\" quickstatetid=<<quickstatetid>> omniparent=<<parentval>> openstatetid=<<openstatetid>> endstate=\\\"closed\\\" />\\n</$reveal>\\n</$vars>\\n\\\\end\\n\\n\\\\define can-omni-quickappend()\\n<$vars openstatetid=<<append-quick-openstatetid>> quickstatetid=<<append-quickstatetid>>>\\n<div class=\\\"can-omni-bottom\\\">\\n\\t<$reveal type=nomatch state=<<openstatetid>> text=\\\"open\\\" tag=div class=\\\"can-omni-quickappend\\\"> \\n\\t\\t<$button tag=\\\"div\\\" class=\\\"can-omni-button big tc-btn-invisible\\\" tooltip=\\\"Open quickadd interface\\\" aria-label=\\\"Open quickadd interface\\\" actions=\\\"<$action-setfield $tiddler=<<openstatetid>> text='open'/>\\\" >{{$:/plugins/can/quick/quickadd-toolbar-btn-dark.svg}}</$button>\\n\\t</$reveal>\\n\\t<$reveal type=match state=<<openstatetid>> text=\\\"open\\\" tag=div class=\\\"can-omni-quickappend\\\" >\\n\\t\\t<$button tag=\\\"div\\\" class=\\\"can-omni-button tiny tc-btn-invisible\\\" actions=\\\"<$action-setfield $tiddler=<<openstatetid>> text='closed'/>\\\">{{$:/core/images/close-button}}</$button>\\n\\t</$reveal>\\n\\t<$reveal type=match state=<<openstatetid>> text=\\\"open\\\" tag=div class=\\\"can-omni-bottom\\\">\\n\\t\\t<$macrocall $name=\\\"quickadd\\\" layout=\\\"subui\\\" omniparent=<<parentval>> quickstatetid=<<quickstatetid>> openstatetid=<<openstatetid>> endstate=\\\"open\\\" />\\n\\t</$reveal>\\t\\n</div>\\n</$vars>\\n\\\\end\\n\"\n },\n \"$:/plugins/can/omni/readme\": {\n \"title\": \"$:/plugins/can/omni/readme\",\n \"caption\": \"readme\",\n \"text\": \"<div style=\\\"background-color: #ffee88; \\\">\\n<p>\\n''Warning:''This plugin does all sorts of things, including altering and deleting tiddlers. It may do something unexpected to your tiddlers! Use at your own risk, with your data backed up.\\n</p><p>\\nNot only that, but I may introduce breaking changes.</p>\\n</div>\\n\\nThe Omni (short for omnibus) plugin is meant to make it easier to collect and organise related bits of information or writing. Demo: https://clutterstack.github.io/TW5-omni/\\n\\nIt depends on my Quick plugin (https://github.com/clutterstack/TW5-quick) for adding tiddlers in-line. \\n\\nThe Relink plugin (https://github.com/flibbles/tw5-relink) by Cameron Fischer is highly recommended at this time.\\n\"\n },\n \"$:/plugins/can/omni/styles-btns-ctls.tid\": {\n \"title\": \"$:/plugins/can/omni/styles-btns-ctls.tid\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \".can-omni-ctlrow {\\n grid-column: 3/5; \\n display: flex; \\n flex-direction:row; \\n flex-wrap: wrap; \\n justify-content: space-between;\\n padding-top: 0.4em; \\n margin-right: 2em;}\\n\\n.can-omni-ctl { \\n grid-column: 4/5; \\n display: flex; \\n flex-direction: row; \\n justify-content: flex-end; \\n align-content: flex-start; \\n padding-top: 0.4em; \\n padding-left: 0.4em;\\n }\\n\\n.can-omni-subctl {\\n display: flex; \\n flex-direction: row; \\n flex-wrap: wrap; \\n align-content: flex-start;\\n }\\n\\n\\n.can-omni-foldbutton {\\n grid-column: 1/2; \\n align-self: start; \\n height: 1.5em; \\n z-index: 9999; \\n display: flex; \\n flex-direction: column; \\n justify-content: flex-start;\\n margin-top: 0.4em;\\n margin-right: 0.2em;\\n }\\n\\n.can-omni-foldbutton:hover svg {fill: #666666;}\\n\\n\\n.namedro .can-omni-ctlrow {\\n font-size: 1.4em;\\n font-weight: 500;\\n margin-bottom: 0.4rem;\\n\\n}\\n\\n/*.namedro .can-omni-foldbutton {margin-top: 1.2rem;}*/\\n\\n.can-omni-title { font-size: 0.8em;}\\nspan.can-omni-title {vertical-align: bottom;}\\ndiv.can-omni-title {margin-left: 0.4em; align-self: flex-end;}\\na:hover.can-omni-title { color: inherit; text-decoration: none; }\\n\\na.can-omni-title { color: #cccccc; align-self: flex-end;}\\n\\n.can-omni-levelctl { display: flex; flex-direction: row; flex: 0 0 auto; }\\n\\n.can-small-text-button {font-size: 0.8rem;}\\n\\n.can-small-text-button .tc-menubar-dropdown-arrow {padding-left: 0.4em;}\\n\\n.can-omni-button svg, .can-omni-foldbutton svg {flex: 0 0 auto; fill: #cccccc;}\\n\\n.can-omni-button.can-omni-button-selected {color: #66c;} \\n.can-omni-button.can-omni-button-selected svg { fill: #66c; }\\n\\n.can-omni-button:hover, .can-omni-button:hover svg {fill: #999999;}\\n.can-omni-button {color: #cccccc;}\\n\\ndiv.can-omni-button, .todo button.can-omni-button {\\n display: flex; \\n flex-direction: row; \\n align-self: flex-start;\\n}\\n\\n.can-omni-ctlrow .tc-draggable {\\n display: flex; \\n flex-direction:row;\\n}\\n\\n/* .omni-toc-view.can-omni-button {\\n display: flex;\\n flex-direction: row;\\n} */\\n\\n/*.can-omni-ctl .tc-draggable svg, .can-omni-ctlrow .tc-draggable svg {\\n align-self: flex-end;\\n }*/\\n\\n.can-omni-foldall, .can-omni-viewswitcher {display: flex; flex-direction: row; justify-content: flex-end;}\\n\\n.can-omni-viewswitcher .can-omni-button svg {\\n width: 20pt;\\n height: 20pt;\\n}\\n.can-omni-foldall .can-omni-button svg {\\n width: 14pt;\\n height: 14pt;\\n}\\n\\n/* Shrink the control icons in sub-omnis */\\n\\n.can-omni-stream .can-omni-stream .can-omni-button svg, .can-omni-stream .can-omni-foldall .can-omni-button svg { \\n width: 10pt;\\n height: 10pt;\\n }\\n\\n.can-omni-stream .can-omni-stream .can-omni-button.big svg { \\n width: 14pt;\\n height: 14pt;\\n }\\n\\n\\n/* don't show the view switcher in a sub-omni */\\n\\n.can-omni-stream .can-omni-toptools .can-omni-viewswitcher {\\n display: none; \\n}\\n\\n/*.can-omni-stream .can-omni-toptools {\\n margin: 0.6em 0 0 0; \\n}*/\\n\\n\"\n },\n \"$:/plugins/can/omni/styles-components\": {\n \"title\": \"$:/plugins/can/omni/styles-components\",\n \"created\": \"20200507184921957\",\n \"creator\": \"chris\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\n.can-omni-toptools {\\nmargin: 0 0 0.4em 0;\\ndisplay: flex;\\nflex-direction: row;\\njustify-content: space-between;\\n}\\n\\n.omni-stream-container {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n margin-bottom: 0.5rem;\\n}\\n\\n.can-omni-stream { \\ndisplay: grid; \\ngrid-template-columns: auto auto 7fr max-content; /* 1em auto 7fr auto; */\\ngrid-template-rows: auto; \\nmargin-left: -0.6em;\\nwidth: 100%;\\n}\\n\\n.can-omni-stream pre {\\n /* max-width: calc({{$:/themes/tiddlywiki/vanilla/metrics/storywidth}} - 25%); */\\n overflow: auto;\\n}\\n\\n.can-omni-stream ul {\\n margin: 0;\\n padding-left: 1em;\\n}\\n/* Style the quickadd for in an omnibus */\\n\\n.can-quickadd.sub {margin-top: 0;}\\n\\n.can-omni-itemhandle {width: 1.6em; grid-column: 2/3; \\n grid-row: span 2; margin-left: -0.8em;}\\n\\n.can-omni-itemhandle .tc-draggable { height: 100%;}\\n\\n.can-omni-itemhandle-inner { \\n box-sizing: content-box; \\n border-radius: 2px;\\n height: 100%; \\n width: 2px;\\n background-color: #cccccc;\\n margin-left: 0.8em;\\n }\\n\\n.can-omni-itemhandle:hover .can-omni-itemhandle-inner { \\n background-color: #999999;\\n }\\n\\n.can-omni-stream > div.tc-draggable { cursor: pointer; }\\n\\n.can-omni-stream .omni-title-heading {\\n grid-column:3/5;\\n flex: 1;\\n font-size: 1.2rem;\\n font-weight: 400;\\n margin-right: 0.4em;\\n}\\n\\n.can-omni-stream .omni-title-heading.view {\\n margin: 0.2em 0.4em 0.4em 0;\\n}\\n\\n.can-omni-stream .omni-title-heading .can-quickadd-textarea { \\n margin: 0 0.4em 0 0; \\n border: 1px solid #ccc; \\n }\\n\\n.omni-text-as-button {height: 100%;}\\n\\n.todo > .can-omni-text {display: flex; flex-direction: row;}\\n\\n.can-omni-text { grid-column: 3/4; display: flex; flex-direction: row; z-index: 10;}\\n\\n.can-omni-text[hidden] {display: none;}\\n\\n.can-omni-text .tc-reveal, .can-omni-todo-text {width: 100%; }\\n\\n.can-omni-text p, .can-omni-text li { \\n margin-top: 0; \\n margin-bottom: 0.5em; \\n max-width: 40em;\\n}\\n\\np > svg, ol >li > svg, ul > li > svg {width: 1.2em; height: 1.2em;}\\n.can-omni-text p:nth-child(1) { margin-top: 0; }\\n/* .can-omni-text p:last-child { margin-bottom: 0.6em; }*/\\n\\n\\n\\n.can-omni-meta { display: flex; flex-direction: row; }\\n\\n\\n.omni-showomni {grid-column:3/5; }\\n\\n/* Space to the left of subomnis */\\n\\n.can-omni-stream .can-omni-stream.todo, .can-omni-stream .can-omni-stream.read, .can-omni-stream .can-omni-stream.namedro {\\n margin-left: 1em;\\n}\\n\\n\\n/* Above and below item droppable zones */\\n\\n.can-omni-peripheral, .can-omni-topadd { grid-column: 1/5; display: flex; flex-direction: row; justify-content: space-between; line-height: 16pt; background-color: #ffffff;}\\n\\n.can-omni-peripheral .tc-droppable, .can-omni-topadd .tc-droppable { width: 100%; display: flex; flex-direction: row; justify-content: flex-end; }\\n\\n.can-omni-peripheral .tc-dragover, .can-omni-topadd .tc-dragover, .tc-dragover .can-omnibus-droppable { border-radius: 5px;background-color: #0ff; }\\n\\n.can-omni-toggleadd .can-omni-button {justify-content: flex-end;}\\n\\n.can-omni-toggleadd .can-omni-button svg {height: 10pt; width: 10pt;}\\n\\n.can-omni-toggleadd, .can-omni-toggleadd .can-omni-button {padding: 1px; border-radius: 4px; width: 100%;}\\n\\n.can-omni-toggleadd:hover {background-color: #efefef;}\\n\\n.can-omni-bottom { grid-column: 2/5; margin-bottom: 0.8em; }\\n\\n/* Depending on view mode */\\n\\n.todo > .can-omni-foldbutton {display: none;}\\n\\n/*.read > .can-omni-text {margin-left: 0.3em; margin-bottom: 0.5em;}*/\\n\\n.zone .can-omni-itemhandle, .zone .can-omni-text {margin-bottom: 0.8em;}\\n\\n.can-omni-stream.todo {grid-template-columns: auto auto 7fr auto; } \\n\\n\\n/* Styling according to level in data tiddler (could do by layout mode too) */\\n\\n/* .can-outline-item-0.can-omni-text { } */\\n.can-outline-item-1.can-omni-text { padding-left: 2em; } \\n.can-outline-item-2.can-omni-text { padding-left: 4em; } \\n.can-outline-item-3.can-omni-text { padding-left: 6em; } \\n.can-outline-item-4.can-omni-text { padding-left: 8em; } \\n.can-outline-item-5.can-omni-text { padding-left: 10em;} \\n.can-outline-item-6.can-omni-text { background-color: #9fd; } \\n.can-outline-item-7.can-omni-text {} \\n.can-outline-item-8.can-omni-text {}\\n\\n\\n/* ----------------------------------------- */\\n/* omni-bullet */\\n/* ----------------------------------------- */\\n\\n.can-omni-bullet { flex: 0 0 auto; box-sizing: content-box; border-radius: 50%; width: 6px; height: 6px; background-color: #333333; align-self: flex-start; margin-top: 0.5em;margin-right: 0.5em;}\\n\\n/* --------------- */\\n/* media-dependent */\\n/* --------------- */\\n\\n\\n@media (max-width: 620px) {\\n\\n.can-omni-stream { \\ngrid-template-columns: auto auto 5fr auto; \\n}\\n\\n.can-omni-stream .can-omni-text {\\n grid-column: 3/4;\\n}\\n\\n.can-omni-stream .can-omni-ctl { \\n grid-column: 3/4;\\n margin: 0.4em 1em 0 0;\\n }\\n\\n.can-omni-stream .can-omni-tag-area {\\n grid-column: 4/5; }\\n }\\n\\n.can-omni-stream .can-omni-tags.tc-edit-tags {\\n margin-bottom: -12pt;\\n}\\n\\n/* more */\\n .omni-bundle {\\n display: flex;\\n flex-direction: row;\\n }\\n\\n /* headings */\\n\\n .can-omni-stream h1, .can-omni-stream h2, .can-omni-stream h3 {\\n margin-top: 0;\\n }\"\n },\n \"$:/plugins/can/omni/styles-sidebar-fleets.tid\": {\n \"title\": \"$:/plugins/can/omni/styles-sidebar-fleets.tid\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"/* Fleet outliner styles */\\n\\nol.omni-toc {\\n list-style: none;\\n padding: 0;\\n margin: 0;\\n}\\n.omni-sidebar-toc h1 {\\n margin: 0.4em 0 0 0;\\n font-size: 1.2em;\\n font-weight: 500;\\n}\\n.omni-toc > li.toc-item li.toc-item {padding-left: 0.2em;}\\n\\n.fleet-label, .omnibus-label, .tc-sidebar-lists button {color: #999999; fill: #999999;}\\n\\n\\n.omni-toc .tc-sidebar-lists button {color: #ff9999; fill: #ff9999;}\\n\\n.fleet-label {font-size: 1.2em; font-weight: 500;}\\n.omnibus-label {font-weight: 500;}\\n.tc-dragover .fleet-label, .tc-dragover .omnibus-label { border-radius: 5px;background-color: #0ff; }\\n.can-omni-dragdrop {display: inline;}\\n\"\n },\n \"$:/plugins/can/omni/styles-tagging.tid\": {\n \"title\": \"$:/plugins/can/omni/styles-tagging.tid\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"/* Tagging */\\n\\n.can-omni-stream > .can-omni-tag-area {grid-column: 4/5; min-width: 2em; min-height: 1em; display: flex; flex-direction: row; justify-content: flex-end; padding-left: 0.4em;}\\n\\n.can-omni-stream .can-omni-tags {height: 100%; max-width: 10em; padding: 0.2em 0.4em 0.2em 2em; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: flex-end; align-content: flex-start; min-width: 5em;}\\n\\n.can-omni-stream .can-omni-tag-area .tc-droppable {height: 100%; margin-left: -2em; display: flex; flex-direction: column; justify-content: flex-end; align-content: flex-end;}\\n\\n.can-omni-stream .can-omni-tag-area .tc-dragover {\\n background: linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(204,0,255,0.5) 100%);\\n border-radius: 4px;\\n}\\n\\n.can-omni-stream .can-omni-tag-area .tc-droppable:hover {\\n background: linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.2) 100%);\\n border-radius: 4px;\\n}\\n\\n.can-omni-stream .tc-tag-label {\\n margin: 0.1em;\\n}\\n\\n.can-omni-stream .can-omni-tag-area .ghost-tag {\\n display: flex;\\n flex-direction: row;\\n justify-content: flex-end;\\n padding: 2px; \\n fill: <<colour tiddler-background>>;\\n}\\n\\n.can-omni-stream .can-omni-tag-area:hover .ghost-tag, .can-omni-stream .can-omni-tag-area .tc-dragover .ghost-tag {\\n fill: #ffffff;\\n}\\n\\n.can-omni-stream .can-omni-tag-area .ghost-tag svg {\\n width: 12pt;\\n height: 12pt;\\n}\\n\\n.can-omni-stream .can-omni-tags { font-size: 0.7em; }\\n\\n.can-omni-tagadd { display: flex; flex-direction: row; }\\n\\n.can-omni-tagadd .tc-add-tag-button button { display: none; }\\n\\n\"\n },\n \"$:/plugins/can/omni/styles-toc-mode.tid\": {\n \"title\": \"$:/plugins/can/omni/styles-toc-mode.tid\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\n.can-omni-stream.toc {\\n align-content: start;\\n flex-shrink: 0;\\n max-width:50%; \\n background-color: #eeeeee; \\n padding: 1em 0 1em 0.4em;\\n margin-bottom: 1rem;\\n margin-left: 0;\\n border: 1px solid #dddddd;\\n border-right-style: none;\\n } \\n\\n.can-omni-stream .can-omni-stream.subtoc {\\n padding-left: 2em; \\n font-size: 0.8em;\\n }\\n\\ndiv.omni-toc-heading {\\n grid-column: 2/5; \\n font-size: 1.2em;\\n line-height: 1.1;\\n padding: 0.2em 1em 0.2em 0.2em;\\n margin: 0.1em 0;\\n cursor: pointer;\\n}\\n\\ndiv.omni-toc-heading.selected {\\n background-color: #ffffff;\\n}\\n\\ndiv.omni-toc-heading:hover {\\n background-color: #dddddd;\\n}\\n\\n.omni-toc-view {\\n width: 100%;\\n flex: 1;\\n border: 1px solid #dddddd;\\n border-left-style: none;\\n margin: 0 0 1rem 0;\\n padding: 0.4rem 1rem 0.4rem 1rem;\\n}\\n\\n.can-omni-toc-sub.can-omni-text {\\n grid-column: 2/5;\\n}\"\n },\n \"$:/plugins/can/omni/template-macros\": {\n \"title\": \"$:/plugins/can/omni/template-macros\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define everyedit()\\n\\t<<can-omni-folder>>\\n\\t<<can-omni-itemhandle>>\\n\\t<div class=\\\"can-omni-ctlrow\\\">\\t\\t\\t\\n\\t\\t<div>\\n\\t\\t\\t<<can-omni-title-link>>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"can-omni-subctl\\\">\\n\\t\\t\\t<<can-omni-levelctl>>\\n\\t\\t\\t<<can-omni-delist>>\\n\\t\\t\\t<<can-omni-delete>>\\n\\t\\t\\t<<can-omni-make-omnibus>>\\n\\t\\t</div>\\n\\t</div>\\n <<can-omni-text-region>>\\n\\t<<can-omni-taglist>>\\n\\t<<omni-showomni>>\\n\\t<<can-omni-peripheral>>\\n\\\\end\\n\\n\\\\define everynamed()\\n\\t<<can-omni-folder>>\\n\\t<<can-omni-itemhandle>>\\n\\t<div class=\\\"can-omni-ctlrow\\\">\\t\\t\\n <<can-omni-titleheading>>\\n\\t\\t<div class=\\\"can-omni-subctl\\\">\\n <<can-omni-link>>\\n\\t\\t\\t<<can-omni-levelctl>>\\n\\t\\t\\t<<can-omni-delist>>\\n\\t\\t\\t<<can-omni-delete>>\\n\\t\\t\\t<<can-omni-make-omnibus>>\\n\\t\\t</div>\\n\\t</div>\\n <<can-omni-text-region>>\\n\\t<<can-omni-taglist>>\\n\\t<<omni-showomni>>\\n\\t<<can-omni-peripheral>>\\n\\\\end\\n\\n\\n\\\\define everynamedro()\\n\\t<<can-omni-folder>>\\n\\t<div class=\\\"can-omni-ctlrow\\\">\\t\\t\\n <div class=\\\"omni-title-heading\\\">{{!!title}}</div>\\n\\t</div>\\n <<can-omni-text-ro>>\\n\\t<<omni-showomni>>\\n\\\\end\\n\\n\\\\define everysimple()\\n\\t<<can-omni-itemhandle>>\\n\\t<div class=\\\"can-omni-text\\\">\\n\\t<<can-omni-text>>\\n\\t</div>\\n\\\\end\\n\\n\\\\define everytodo()\\n\\t<<can-omni-itemhandle>>\\n\\t<<can-omni-todo-region>>\\n\\t<div class=\\\"can-omni-ctl\\\">\\n\\t\\t<<can-omni-make-omnibus>>\\n\\t\\t<<can-omni-link>>\\n\\t\\t<<can-omni-delete>>\\n\\t\\t<<can-omni-mark-done>>\\n\\t</div>\\n\\t<<omni-showomni>>\\n\\t<<can-omni-peripheral>>\\n\\\\end\\n\\n\\\\define everylist()\\n <div class=\\\"can-omni-text\\\"><<omnilabel>> </div>\\n <<can-omni-taglist>>\\n\\t<<omni-showomni>>\\n\\\\end\\n\\n\\\\define everyread()\\n <<can-omni-folder>>\\n <<can-omni-text-region>>\\n <<omni-showomni>>\\n\\\\end\\n\\n\\\\define everyoutline()\\n\\t\\t<<can-omni-outline-region>>\\n\\\\end\\n\\n\\\\define everytoc()\\n <$list filter=\\\"[<currentTiddler>tag[omnibus]]\\\"><<can-omni-folder>></$list>\\n <<can-omni-toc-item>>\\n\\\\end\\n\\n\\\\define everylist2(looks bad while teaser always displays ellipses)\\n <div class=\\\"can-omni-text\\\">\\n\\t\\t<$link><$macrocall $name=teaser title=<<currentTiddler>> chars=100 maxelements=1 /></$link>\\n </div> \\n <<can-omni-taglist>>\\n\\t\\t<<omni-showomni>>\\n\\\\end\"\n }\n }\n}"},"$:/plugins/can/omniteaser":{"title":"$:/plugins/can/omniteaser","description":"Omniteaser - Generate a teaser preview for a tiddler","author":"Chris Nicoll","version":"0.1.0","core-version":">=5.1.22","source":"https://github.com/clutterstack/TW5-omni","list":"readme documentation license","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/can/omniteaser/macro\": {\n \"title\": \"$:/plugins/can/omniteaser/macro\",\n \"tags\": \"tests teaser $:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define teaser(title, chars:100, maxelements:2)\\n<$wikify name=wik text={{$title$}} output=html>\\n<$macrocall $name=shortenwikified wikifiedtext=<<wik>> chars=$chars$ maxelements=$maxelements$/>\\n</$wikify>\\n\\\\end\"\n },\n \"$:/plugins/can/omniteaser/documentation\": {\n \"title\": \"$:/plugins/can/omniteaser/documentation\",\n \"caption\": \"documentation\"\n },\n \"$:/plugins/can/omniteaser/license\": {\n \"title\": \"$:/plugins/can/omniteaser/license\",\n \"caption\": \"license\",\n \"text\": \"BSD 3-Clause License\\n\\nCopyright (c) 2020, Chris Nicoll\\n\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n },\n \"$:/plugins/can/omniteaser/macros/regexteaser.js\": {\n \"title\": \"$:/plugins/can/omniteaser/macros/regexteaser.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/can/omniteaser/macros/regexteaser.js\\ntype: application/javascript\\nmodule-type: macro\\nMacro to take wikified text and return a teaser made from the first chars characters of its first maxelements html elements. Deals with possible nested elements.\\n\\\\*/\\n\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n/*\\nMacro to take wikified text and return a teaser made from the first chars characters of its first maxelements html elements. Deals with possible nested elements.\\n*/\\n\\nexports.name = \\\"shortenwikified\\\";\\n\\nexports.params = [\\n\\t{name: \\\"wikifiedtext\\\"}, {name: \\\"chars\\\"}, {name: \\\"maxelements\\\", default: 1}\\n];\\n\\nconst openClosePattern = /\\\\<(?<tag>[^\\\\/\\\\>]*)( ?.*?)\\\\>(.*?)\\\\<\\\\/\\\\k<tag>\\\\>/gms;\\nconst emptyTagPairPattern = /\\\\<(?<tag>[^\\\\/\\\\> ]*) ?[^\\\\/\\\\>]*?\\\\>\\\\<\\\\/\\\\k<tag>\\\\>/gm;\\n// const openClosePattern = /\\\\<(?<tag>[^\\\\/ ]*?) .*?\\\\>(.*?)\\\\<\\\\/\\\\k<tag>\\\\>/gms;\\nconst openClosePatternG = /(\\\\<(?<tag>[^\\\\/]*?).*?\\\\>(.*?)\\\\<\\\\/\\\\k<tag>\\\\>)/gm;\\nconst tagsAtEndsPattern = /^\\\\<(?<tag>[^\\\\/]*?).*?\\\\>(.*?)\\\\<\\\\/\\\\k<tag>\\\\>$/m;\\nconst betweenEndTagsPattern = /(?<=\\\\<(?<tag>[^\\\\/]*?).*?\\\\>)(.*?)(?=\\\\<\\\\/\\\\k<tag>\\\\>)/gm; //only gets rid of one outer set of tags\\n\\n/*\\nRun the macro\\n*/\\nexports.run = function(wikifiedtext, chars, maxelements) {\\n //console.log(\\\"wikifiedtext: \\\", wikifiedtext);\\n if (wikifiedtext.trim().length == 0) { \\n return \\\"\\\"; \\n }\\n var maxchars = parseFloat(chars);\\n const firstElementString = getFirstElements(wikifiedtext, maxelements);\\n //console.log(\\\"check output of getFirstElements:\\\",getFirstElements(wikifiedtext, maxelements) );\\n const splitArr = splitText(firstElementString);\\n //console.log(\\\"splitText(firstElementString):\\\", splitText(firstElementString) );\\n console.log(\\\"splitArr: \\\", splitArr );\\n var countText = getLastIndex(splitArr, maxchars);\\n //console.log(\\\"gotLastIndex: \\\", countText);\\n const lastIndex = countText[1];\\n const total = countText[0];\\n if (total > maxchars) {\\n const zappedArray = countText[2];\\n //console.log(\\\"zapped: \\\", zappedArray);\\n //console.log(\\\"lastIndex: \\\", lastIndex);\\n const outArray = trimLast(zappedArray, lastIndex, total - maxchars);\\n //console.log(\\\"final array: \\\" , outArray);\\n var newString = outArray.join(\\\"\\\");\\n //console.log(\\\"newString: \\\",newString);\\n return deleteTrailingTags(newString);\\n } \\n else if (total == 0){\\n //console.log(\\\"total text chars was 0\\\");\\n return \\\"\\\";\\n } else {\\n var countedArray = countText[2];\\n countedArray[lastIndex] = countedArray[lastIndex]+\\\" (...)\\\";\\n return countedArray.join(\\\"\\\"); \\n }\\n};\\n\\nfunction getFirstElements(inString, maxelements) {\\n //console.log(\\\"getFirstElements matches:\\\", inString.match(openClosePattern));\\n //console.log(\\\"want first \\\", maxelements, \\\" matches.\\\");\\n var outArray = [];\\n var match = inString.match(openClosePattern);\\n if (match !== null) {\\n for (let i = 0; i < maxelements; i++) {\\n //console.log(\\\"now adding match at index \\\",i);\\n if (match[i] !== null) {\\n outArray.push(match[i]);\\n }\\n }\\n }\\n //console.log(\\\"getFirstElements: \\\", outArray.join(\\\"\\\"));\\n return outArray.join(\\\"\\\");\\n};\\n\\nfunction splitText(inStr) {\\n const rawsplit = inStr.split(/(\\\\<.*?\\\\>)/);\\n const result = rawsplit; //.filter(word => word.length > 0);\\n return result;\\n};\\n\\nfunction isTag(inStr) {\\n //returns true or false\\n const reg = /^\\\\<.*?\\\\>$/;\\n return reg.test(inStr); //should test for svg and perhaps other things that have renderable content inside opening tag\\n};\\n\\nfunction getLastIndex(inArray, maxchars) {\\n var tot = 0;\\n var index = 0;\\n var lastIndex = 0;\\n var outArray = []; //inArray; //WATCH OUT -- ASSIGN BY REFERENCE!!\\n for (const element of inArray) {\\n const check = isTag(element);\\n //console.log(\\\"check \\\", element, \\\" : \\\",check);\\n if (check == false) {\\n if (tot > maxchars) {\\n //console.log(\\\"total maxchars \\\", tot, \\\" has exceeded limit of \\\", maxchars, \\\" at index \\\",index);\\n outArray[index] = \\\"\\\";\\n } else {\\n if (element.trim().length == 0 ) { //only whitespace\\n outArray[index] = \\\"\\\";\\n lastIndex = index;\\n } else {\\n outArray[index] = element;\\n //console.log(\\\"adding \\\", element.length, \\\" chars to total (previously \\\", tot,\\\") at index \\\", index);\\n lastIndex = index;\\n tot += element.length;\\n }\\n }\\n } else if (element == \\\"<br>\\\") {\\n if (tot > maxchars) {\\n //console.log(\\\"found a <br> after the last needed text\\\");\\n outArray[index] = \\\"\\\";\\n } else {\\n outArray[index] = element;\\n }\\n }\\n index += 1;\\n }\\n //console.log(\\\"tot: \\\", tot, \\\"; maxchars: \\\", maxchars);\\n return [tot, lastIndex, outArray];\\n};\\n\\nfunction trimLast(inArray, index, diff) {\\n var outArray = inArray; //This assignment by reference, deliberately. Pass in something that can be changed.\\n var lastEl = outArray[index];\\n //console.log(\\\"diff: \\\", diff);\\n //console.log(\\\"last text element is \\\", lastEl);\\n var lastElTrim = lastEl.substring(0,lastEl.length - diff ) + \\\" (...)\\\";\\n //console.log(\\\"trimming element to length \\\", lastElTrim.length,\\\" from \\\", lastEl.length);\\n //console.log(\\\"last text element is now \\\", lastElTrim);\\n outArray[index] = lastElTrim;\\n return outArray;\\n};\\n\\nfunction deleteTrailingTags(inString) {\\n // Delete empty tag pairs until none remain\\n const reg = emptyTagPairPattern;\\n var reduced = inString;\\n if (reg.test(reduced) == true) {\\n //console.log(\\\"test is true: reduced is \\\", reduced);\\n reduced = reduced.replace(reg,\\\"\\\");\\n reduced = deleteTrailingTags(reduced);\\n } else if (reg.test(reduced) == false) {\\n //console.log(\\\"test is false: reduced is \\\", reduced);\\n }\\n return reduced;\\n };\\n\\n})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"macro\",\n \"creator\": \"chris\",\n \"tags\": \"teaser $:/tags/Macro\"\n }\n }\n}"},"$:/plugins/can/omnitools":{"title":"$:/plugins/can/omnitools","description":"Omnitools - accessories for TW","author":"Chris Nicoll","version":"0.1.1","core-version":">=5.1.22","list":"readme documentation license","plugin-type":"plugin","dependents":"[[$:/plugins/can/omni]], [[$:/plugins/can/quick]]","type":"application/json","text":"{\n \"tiddlers\": {\n \"Find a shadow tiddler by title\": {\n \"title\": \"Find a shadow tiddler by title\",\n \"tags\": \"$:/tags/OmniTool\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define composefilter() [all[shadows]search:title:literal[$(termfield)$]]\\n\\n\\\\define makelist()\\n<$set name=termfield filter=\\\"\\\"\\\"[{$:/state/tagbrowse-search!!searchinput}]\\\"\\\"\\\">\\nsearch term is: <<termfield>><br>\\n<$list filter=<<composefilter>>><$link/><br></$list>\\n\\\\end\\n\\n<<searchterm>>\\n\\n<div>Search for a literal term in the tiddler title: <$edit tiddler=\\\"$:/state/tagbrowse-search\\\" field=searchinput class=\\\"omni-search-input\\\"/></div>\\n\\n''Results:''\\n\\n<<makelist>>\"\n },\n \"$:/config/omnitools/dashlist\": {\n \"title\": \"$:/config/omnitools/dashlist\",\n \"list\": \"[[Browse by tags]]\"\n },\n \"$:/plugins/can/omnitools/documentation\": {\n \"title\": \"$:/plugins/can/omnitools/documentation\",\n \"caption\": \"documentation\",\n \"text\": \"\"\n },\n \"$:/plugins/can/omnitools/extrapanel-macros\": {\n \"title\": \"$:/plugins/can/omnitools/extrapanel-macros\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\n\\\\define can-omni-listfield()\\nList: <$list filter=\\\"[list[]join[, ]]\\\">{{!!title}}</$list><br>\\n\\\\end\\n\\n\\n\\\\define can-todo-done()\\n<$button class=\\\"tc-btn-invisible can-small-text-button\\\">\\n<$reveal type=\\\"nomatch\\\" state=\\\"!!show-done\\\" text=\\\"show\\\" >\\n\\t<$action-setfield show-done='show'/>\\n\\tDone items<span class=\\\"tc-menubar-dropdown-arrow\\\"><$transclude tiddler=\\\"$:/core/images/down-arrow\\\" mode=\\\"inline\\\"/></span>\\n</$reveal>\\n<$reveal type=\\\"match\\\" state=\\\"!!show-done\\\" text=\\\"show\\\" >\\n\\t<$action-setfield show-done='hide'/>\\n\\tDone items<span class=\\\"tc-menubar-dropdown-arrow\\\"><$transclude tiddler=\\\"$:/core/images/up-arrow\\\" mode=\\\"inline\\\"/></span>\\n</$reveal>\\n</$button>\\n<$reveal type=\\\"match\\\" state=\\\"!!show-done\\\" text=\\\"show\\\" >\\n<br>\\n<$list filter=\\\"[tag[todo]tag[done]contains:omniparent[$(currentTiddler)$]]\\\"><<omnilabel>><br></$list>\\n</$reveal>\\n\\\\end\\n\\n\\n\\\\define can-clean-list() <$button actions=\\\"<$action-listops $filter='[all[current]list[]is[tiddler]]'/><$action-sendmessage $message='tm-auto-save-wiki'/>\\\">clean list</$button>\\n\\n\"\n },\n \"$:/plugins/can/omnitools/license\": {\n \"title\": \"$:/plugins/can/omnitools/license\",\n \"caption\": \"license\",\n \"text\": \"BSD 3-Clause License\\n\\nCopyright (c) 2020, Chris Nicoll\\n\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n },\n \"$:/plugins/can/omnitools/new-omnibus-button\": {\n \"title\": \"$:/plugins/can/omnitools/new-omnibus-button\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define new-omnibus-button()\\n<$button>\\n<$action-sendmessage $message=\\\"tm-new-tiddler\\\" title=\\\"Create new omnibus tiddler\\\" tags=\\\"omnibus\\\" />\\nNew omnibus\\n</$button>\\n\\\\end\"\n },\n \"$:/plugins/can/omnitools/macros/omni-bookmark-button\": {\n \"title\": \"$:/plugins/can/omnitools/macros/omni-bookmark-button\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define omni-bookmark-button(title)\\n<$vars tidtitle=\\\"$title$\\\">\\n<$set name=labelclass filter='omni-bookmark-button [[$:/StoryList]contains:list<tidtitle>then[bookmark-button-open]]'>\\n<div class=<<labelclass>> >\\n <$button class=\\\"omni-pill-lhs\\\" message=tm-close-tiddler param=<<tidtitle>> >×</$button><$button class=\\\"omni-pill-rhs\\\" to=<<tidtitle>> ><<tidtitle>></$button>\\n</div>\\n</$set></$vars>\\n\\\\end \\n\"\n },\n \"$:/plugins/can/omnitools/macros/cleanlists.tid\": {\n \"title\": \"$:/plugins/can/omnitools/macros/cleanlists.tid\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define omni-cleanlists-actions()\\n<$list filter='[tag[omnibus]]'>\\n<$action-listops $filter='[all[current]list[]is[tiddler]]'/>\\n</$list>\\n\\\\end\\n\\n\\\\define omni-cleanlists-button()\\n<$button actions=\\\"<<omni-cleanlists-actions>>\\\">Remove nonexistent tiddlers from omnibuses</$button>\\n\\\\end\"\n },\n \"$:/plugins/can/omnitools/macros/toolbutton\": {\n \"title\": \"$:/plugins/can/omnitools/macros/toolbutton\",\n \"created\": \"20200915201442088\",\n \"modified\": \"20200915201949789\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define omnivistitle() $:/can/omni/visibility/$(tid)$\\n\\n\\\\define omni-toolbutton(tidd)\\n<$vars tid=$tidd$>\\n<$set name=btnclass filter=\\\"\\\"\\\"tc-btn-invisible [<omnivistitle>get[text]match[open]then[can-btn-highlight]]\\\"\\\"\\\"> \\n<$set name=btnsetto filter=\\\"\\\"\\\"[<omnivistitle>get[text]match[open]then[closed]else[open]]\\\"\\\"\\\" >\\n<$button class=<<btnclass>> set=<<omnivistitle>> setTo=<<btnsetto>> >Dash</$button>\\n</$set></$set></$vars>\\n\\\\end\\n\"\n },\n \"$:/plugins/can/omnitools/omnitools-dash\": {\n \"title\": \"$:/plugins/can/omnitools/omnitools-dash\",\n \"tags\": \"$:/tags/SideBar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"caption\": \"Omnitools\",\n \"text\": \"\\\\whitespace trim\\n\\\\define lingo-base() $:/language/CloseAll/\\n\\n\\\\define drop-actions()\\n<$action-listops $tiddler=\\\"$:/config/omnitools/dashlist\\\" $subfilter=\\\"+[insertbefore:currentTiddler<actionTiddler>]\\\"/>\\n\\\\end\\n\\n\\\\define placeholder()\\n<div class=\\\"tc-droppable-placeholder\\\"/>\\n\\\\end\\n\\n\\\\define droppable-item(button)\\n\\\\whitespace trim\\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\\n<<placeholder>>\\n<div>\\n$button$\\n</div>\\n</$droppable>\\n\\\\end\\n\\n\\\\define buttondef()\\n<$button message=\\\"tm-close-tiddler\\\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<labelclass>> >{{$:/core/images/close-button}}</$button> <$link to={{!!title}}><$view field=\\\"title\\\"/></$link>\\n\\\\end\\n\\n<div class=\\\"tc-sidebar-tab-open\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]list[$:/config/omnitools/dashlist]]\\\">\\n <$set name=labelclass filter='tc-btn-invisible tc-btn-mini omnitools-closebutton [[$:/StoryList]contains:list<currentTiddler>then[bookmark-button-open]]'>\\n <div class=\\\"tc-sidebar-tab-open-item\\\">\\n <$macrocall $name=\\\"droppable-item\\\" button=<<buttondef>>/>\\n\\t\\t\\t\\t</div>\\n\\t\\t</$set>\\n</$list>\\n</div>\\n\\n<hr>\\n\\n<div class=\\\"omnitools-buttons\\\">\\n <<omni-cleanlists-button>>\\n</div>\"\n },\n \"$:/plugins/can/omnitools/stylesheet\": {\n \"title\": \"$:/plugins/can/omnitools/stylesheet\",\n \"created\": \"20200916002933664\",\n \"modified\": \"20200916003007571\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"/* for omnitools */\\n\\n.omni-bookmark-button {\\n display: flex;\\n flex-direction: row;\\n border-radius: 3px;\\n align-self: flex-start;\\n margin-bottom: 0.4em;\\n\\n}\\n\\n.omni-pill-lhs {\\n/* border-radius: 1em 0 0 1em; */\\nmargin-right: 0;\\n border: none;\\n background-color: none;\\n}\\n\\n.omni-pill-rhs {\\n/* border-radius: 0 1em 1em 0; */\\nmargin-left: 0;\\nborder: none;\\nbackground-color: none;\\n}\\n\\ndiv.omnitools-buttons {\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.tc-sidebar-tab-open .tc-btn-mini.omnitools-closebutton svg {\\n fill: none;\\n}\\n\\n.tc-sidebar-tab-open .omnitools-closebutton.bookmark-button-open svg {\\n fill: #ffaaaa;\\n}\\n\\n.omni-search-input { width: 10em; }\\n\\ndiv.omni-info-panel { background-color: #eee;}\"\n },\n \"$:/plugins/can/omnitools/infopanelold\": {\n \"title\": \"$:/plugins/can/omnitools/infopanelold\",\n \"tags\": \"\",\n \"list-after\": \"\",\n \"text\": \"\\\\define makefoldstate() $:/state/omnitools/$(currentTiddler)$-infofold\\n\\n<$list filter=\\\"[all[current]!tag[omnibus]]\\\" variable=\\\"null\\\">\\n<div class=\\\"omni-info-panel\\\">\\n<h3><$reveal type=\\\"nomatch\\\" state=<<makefoldstate>> text=\\\"show\\\" tag=\\\"span\\\">\\n<$button class=<<tv-config-toolbar-class>> setTitle=<<makefoldstate>> setTo=\\\"show\\\">{{$:/core/images/right-arrow}}</$button>\\n</$reveal><$reveal type=\\\"match\\\" state=<<makefoldstate>> text=\\\"show\\\" tag=\\\"span\\\">\\n<$button class=<<tv-config-toolbar-class>> setTitle=<<makefoldstate>> setTo=\\\"hide\\\">{{$:/core/images/down-arrow}}</$button>\\n</$reveal>Links and lists</h3>\\n\\n<$reveal type=\\\"match\\\" state=<<makefoldstate>> text=\\\"show\\\">\\nBacklinks:<br>\\n<$list filter=\\\"[!is[system]all[current]backlinks[]sort[title]] -[is[current]]\\\"><$link><$view field=\\\"title\\\"/></$link>\\n<$reveal type=\\\"nomatch\\\" stateTitle=\\\"$:/state/omnitools/infofold\\\" stateIndex=<<currentTiddler>> text=\\\"show\\\">\\n<$button class=<<tv-config-toolbar-class>> setTitle=\\\"$:/state/omnitools/infofold\\\" setIndex=<<currentTiddler>> setTo=\\\"show\\\">{{$:/core/images/right-arrow}}</$button><br/>\\n</$reveal>\\n<$reveal type=\\\"match\\\" stateTitle=\\\"$:/state/omnitools/infofold\\\" stateIndex=<<currentTiddler>> text=\\\"show\\\">\\n<$button class=<<tv-config-toolbar-class>> setTitle=\\\"$:/state/omnitools/infofold\\\" setIndex=<<currentTiddler>> setTo=\\\"hide\\\">{{$:/core/images/down-arrow}}</$button>\\n<span><$transclude field=\\\"text\\\" mode=\\\"block\\\" /></span>\\n</$reveal>\\n</$list>\\n\\nListing tiddlers:<br>\\n<$list filter=\\\"[!is[system]all[current]listed[]sort[title]] -[is[current]] -[tag[omnibus]] -[[$:/StoryList]]\\\"><$link><$view field=\\\"title\\\"/></$link>\\n<$reveal type=\\\"nomatch\\\" stateTitle=\\\"$:/state/omnitools/infofold\\\" stateIndex=<<currentTiddler>> text=\\\"show\\\">\\n<$button class=<<tv-config-toolbar-class>> setTitle=\\\"$:/state/omnitools/infofold\\\" setIndex=<<currentTiddler>> setTo=\\\"show\\\">{{$:/core/images/right-arrow}}</$button><br/>\\n</$reveal>\\n<$reveal type=\\\"match\\\" stateTitle=\\\"$:/state/omnitools/infofold\\\" stateIndex=<<currentTiddler>> text=\\\"show\\\">\\n<$button class=<<tv-config-toolbar-class>> setTitle=\\\"$:/state/omnitools/infofold\\\" setIndex=<<currentTiddler>> setTo=\\\"hide\\\">{{$:/core/images/down-arrow}}</$button>\\n<span class=\\\"indent1\\\">\\n<$transclude field=\\\"text\\\" mode=\\\"block\\\" /></span>\\n</$reveal>\\n</$list>\\n\\nListing omnibuses:<br>\\n<$list filter=\\\"[!is[system]all[current]listed[]tag[omnibus]sort[title]] -[is[current]]\\\"><$link><$view field=\\\"title\\\"/></$link><br></$list>\\n\\n\\nList:<br>\\n<$list filter=\\\"[!is[system]all[current]list[]sort[title]]\\\"><$link><$view field=\\\"title\\\"/></$link>\\n<$reveal type=\\\"nomatch\\\" stateTitle=\\\"$:/state/omnitools/infofold\\\" stateIndex=<<currentTiddler>> text=\\\"show\\\">\\n<$button class=<<tv-config-toolbar-class>> setTitle=\\\"$:/state/omnitools/infofold\\\" setIndex=<<currentTiddler>> setTo=\\\"show\\\">{{$:/core/images/right-arrow}}</$button><br/>\\n</$reveal>\\n<$reveal type=\\\"match\\\" stateTitle=\\\"$:/state/omnitools/infofold\\\" stateIndex=<<currentTiddler>> text=\\\"show\\\">\\n<$button class=<<tv-config-toolbar-class>> setTitle=\\\"$:/state/omnitools/infofold\\\" setIndex=<<currentTiddler>> setTo=\\\"hide\\\">{{$:/core/images/down-arrow}}</$button>\\n<$transclude field=\\\"text\\\" mode=\\\"block\\\" />\\n</$reveal>\\n</$list>\\n\\n</$reveal>\\n</div>\\n\\n</$list>\"\n },\n \"$:/plugins/can/omnitools/infopanel\": {\n \"title\": \"$:/plugins/can/omnitools/infopanel\",\n \"tags\": \"$:/tags/ViewTemplate\",\n \"list-after\": \"\",\n \"text\": \"\\\\define can-toc-icon-link() <$button class=\\\"can-tiny-button-icon tc-btn-invisible\\\" to={{!!title}} tooltip=\\\"Open tiddler in story\\\" aria-label=\\\"Open tiddler in story\\\">{{$:/plugins/can/omni/fish-water.svg}}</$button>\\n\\n\\\\define makefoldstate() $:/state/omnitools/$(currentTiddler)$-infofold\\n\\n\\\\define bigfilter() $(backlinksfilt)$ $(listingtiddlersfilt)$ $(listingomnisfilt)$ -[[$:/DefaultTiddlers]] -[is[current]]\\n\\n\\\\define linksfilt() [all[current]links[]]\\n\\\\define backlinksfilt() [all[current]backlinks[]sort[title]] -[is[current]]\\n\\\\define listingtiddlersfilt() [all[current]listed[]sort[title]] -[is[current]] -[tag[omnibus]] -[[$:/StoryList]]\\n\\\\define listingomnisfilt() [all[current]listed[]tag[omnibus]sort[title]] -[is[current]]\\n\\\\define listfilt() [list[]]\\n\\n\\n\\\\define exec()\\n<$set name=showpanel filter=\\\"\\\"\\\"$(bigfilter)$\\\"\\\"\\\" value=show emptyValue=hide>\\n<$vars foldbuttonclass=\\\"tc-btn-invisible can-tiny-button-icon\\\">\\n<$list filter=\\\"[<showpanel>match[show]]\\\" variable=null>\\n <div class=\\\"omni-info-panel\\\">\\n ''References to this tiddler''\\n <$reveal type=\\\"match\\\" state=<<makefoldstate>> text=\\\"hide\\\" tag=\\\"span\\\">\\n <$button class=<<foldbuttonclass>> setTitle=<<makefoldstate>> setTo=\\\"show\\\">{{$:/core/images/right-arrow}}</$button>\\n </$reveal>\\n <$reveal type=\\\"nomatch\\\" state=<<makefoldstate>> text=\\\"hide\\\" tag=\\\"span\\\">\\n <$button class=<<foldbuttonclass>> setTitle=<<makefoldstate>> setTo=\\\"hide\\\">{{$:/core/images/down-arrow}}</$button>\\n </$reveal><br>\\n <$reveal type=\\\"nomatch\\\" state=<<makefoldstate>> text=\\\"hide\\\">\\n <$list filter=\\\"$(bigfilter)$\\\">\\n <$reveal type=\\\"nomatch\\\" stateTitle=\\\"$:/state/omnitools/infofold\\\" stateIndex=<<currentTiddler>> text=\\\"show\\\">\\n <$button class=<<foldbuttonclass>> setTitle=\\\"$:/state/omnitools/infofold\\\" setIndex=<<currentTiddler>> setTo=\\\"show\\\"><$view field=\\\"title\\\"/> {{$:/core/images/right-arrow}}</$button> <<can-toc-icon-link>><br>\\n </$reveal>\\n <$reveal type=\\\"match\\\" stateTitle=\\\"$:/state/omnitools/infofold\\\" stateIndex=<<currentTiddler>> text=\\\"show\\\">\\n <$button class=<<foldbuttonclass>> setTitle=\\\"$:/state/omnitools/infofold\\\" setIndex=<<currentTiddler>> setTo=\\\"hide\\\"><$view field=\\\"title\\\"/> {{$:/core/images/down-arrow}}</$button> <<can-toc-icon-link>><br>\\n <span><$transclude field=\\\"text\\\" mode=\\\"block\\\" /></span>\\n </$reveal>\\n </$list>\\n </$reveal>\\n \\n \\n </div>\\n</$list></$vars></$set>\\n\\\\end\\n\\n\\n<$reveal type=\\\"nomatch\\\" stateTitle=<<folded-state>> text=\\\"hide\\\" tag=\\\"div\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n<<exec>>\\n</$reveal>\"\n },\n \"$:/plugins/can/omnitools/relatedpanel-stylesheet\": {\n \"title\": \"$:/plugins/can/omnitools/relatedpanel-stylesheet\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\n.can-tiny-button-icon svg{\\n font-size: 0.6rem;\\n height: 0.6rem;\\n width: 0.6rem;\\n fill: #666666;\\n}\"\n }\n }\n}"},"$:/plugins/can/quick":{"title":"$:/plugins/can/quick","description":"CAN Quick - Quick notes, title optional","author":"Chris Nicoll","version":"0.0.5","core-version":">=5.1.22","source":"https://github.com/clutterstack/TW5-quick","list":"readme documentation license","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/can/quick/arrownote-adder\": {\n \"title\": \"$:/plugins/can/quick/arrownote-adder\",\n \"text\": \"<$set name=\\\"visible-state\\\" value=\\\"<<qualify $:/state/can/quick/visibility/ArrowNoteAdder>>\\\">\\n<$reveal type=\\\"nomatch\\\" stateTitle=<<visible-state>> text=\\\"hide\\\" default=\\\"show\\\">\\n<<arrownote>>\\n</$reveal>\\n</$set>\"\n },\n \"$:/plugins/can/quick/arrownote-button\": {\n \"title\": \"$:/plugins/can/quick/arrownote-button\",\n \"tags\": \"\",\n \"text\": \"\\\\define visible-state() $:/state/can/quick/visibility/ArrowNoteAdder\\n\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$reveal type=\\\"nomatch\\\" stateTitle=<<visible-state>> text=\\\"hide\\\" default=\\\"show\\\">\\n<$action-setfield $tiddler=<<visible-state>> $value=\\\"hide\\\"/>\\n{{$:/plugins/can/quick/quickadd-toolbar-btn-dark.svg}}\\n</$reveal>\\n<$reveal type=\\\"match\\\" stateTitle=<<visible-state>> text=\\\"hide\\\" default=\\\"show\\\">\\n<$action-setfield $tiddler=<<visible-state>> $value=\\\"show\\\"/>\\n{{$:/plugins/can/quick/quickadd-toolbar-btn-light.svg}}\\n</$reveal>\\n</$button>\"\n },\n \"$:/plugins/can/quick/arrownote-sidebar\": {\n \"title\": \"$:/plugins/can/quick/arrownote-sidebar\",\n \"created\": \"20200707225108697\",\n \"tags\": \"$:/tags/SideBar\",\n \"caption\": \"Quick\",\n \"list-before\": \"$:/core/ui/SideBar/Tools\",\n \"text\": \"<div style=\\\"width: 20em;\\\">\\n<<arrownote>>\\n</div>\\n\"\n },\n \"$:/plugins/can/quick/arrownote-top-toggle-button\": {\n \"title\": \"$:/plugins/can/quick/arrownote-top-toggle-button\",\n \"tags\": \"$:/tags/PageControls\",\n \"text\": \"\\n\\n<$list filter=\\\"[[$:/plugins/can/quick/arrownote-top]contains:tags[$:/tags/AboveStory]]\\\">\\n<$button class=\\\"tc-btn-invisible\\\" actions=\\\"\\\"\\\"<$action-listops $tiddler=\\\"$:/plugins/can/quick/arrownote-top\\\" $tags=\\\"-$:/tags/AboveStory\\\"/>\\\"\\\"\\\" tooltip=\\\"Hide quick adder above story\\\">\\n{{$:/plugins/can/quick/quickadd-toolbar-btn-dark.svg}}\\n</$button>\\n</$list>\\n\\n<$list filter=\\\"[[$:/plugins/can/quick/arrownote-top]!contains:tags[$:/tags/AboveStory]]\\\">\\n<$button class=\\\"tc-btn-invisible\\\" actions=\\\"\\\"\\\"<$action-listops $tiddler=\\\"$:/plugins/can/quick/arrownote-top\\\" $tags=\\\"+$:/tags/AboveStory\\\"/>\\\"\\\"\\\" tooltip=\\\"Show quick adder above story\\\">\\n{{$:/plugins/can/quick/quickadd-toolbar-btn-light.svg}}\\n</$button>\\n</$list>\\n\"\n },\n \"$:/plugins/can/quick/arrownote-top\": {\n \"title\": \"$:/plugins/can/quick/arrownote-top\",\n \"tags\": \"$:/tags/AboveStory\",\n \"text\": \"<div class=\\\"arrownote-top-container\\\">\\n{{$:/plugins/can/quick/arrownote-adder}}\\n</div>\\n\"\n },\n \"$:/plugins/can/quick/documentation\": {\n \"title\": \"$:/plugins/can/quick/documentation\",\n \"caption\": \"documentation\",\n \"text\": \"\\n!!Accessing the UI\\n\\nThe page control button {{$:/plugins/can/quick/quickadd-toolbar-btn-light.svg}} or {{$:/plugins/can/quick/quickadd-toolbar-btn-dark.svg}} toggles visibility of a tiddler, pinned at the top of the Story River, from which to (repeatedly, if desired) create quick tiddlers with a minimum of interaction and mental overhead. It's up to the user to decide how to organize or search for this information later! (Although tiddlers generated through this interface are tagged `quickadd` for easy location.) To remove this button from the page control toolbar, edit the tiddler [[$:/plugins/can/quick/arrownote-top-toggle-button]] to remove the <<tag $:/tags/PageControls>> tag.\\n\\nThe ''Quick'' sidebar tab also contains the ''quick'' interface. To remove this tab, edit [[$:/plugins/can/quick/arrownote-sidebar]] to remove the tag <<tag $:/tags/SideBar>>.\\n\\n!!Basic usage\\n\\nType in the text field and hit CTRL-ENTER, or the {{$:/plugins/can/quick/fastarrow-circle.svg}}\\n button, to create a new tiddler. ESCAPE, or the {{$:/plugins/can/quick/escape.svg}} button, cancels the input.\\n\\nThere is also a field provided in case the user wants to add a title at creation time. ESCAPE here resets only the title; CTRL-ENTER submits the tiddler.\\n\\nThe new tiddler does //not// get inserted into the Story River.\\n\\nTiddlers created by this plugin are given a title which is their `created` field expressed in `[UTC]YYYY0MM0DD0hh0mm0ss0XXX` format, if the user does not specify a title.\\n\\n!!''quickadd'' macro\\n\\nMost of the work is done by the ''quickadd'' macro.\\n\\n!!!Parameters\\n\\n;tags\\n:A list of tags to apply to the generated tiddler. Defaults to empty. The convenience macro ''arrownote'' tags tiddlers with the tag <<tag quickadd>>.\\n\\n;focus\\n:Indicates whether the text field of the quickadd interface should take focus when opened. Default: `\\\"true\\\"`\\n\\n;omniparent\\n:Sets a field called `omniparent` on the generated tiddler. Used by the Omni plugin.\\n\\n;buttonstyle\\n:Sets a class on the tiddler submission button. `big` makes the button extra large. Defaults to `small` in the general-purpose ''quickadd'' macro, but the convenience macro ''arrownote'' specifies `big`.\\n\\n;openstatetid\\n:Optional parameter used to specify a tiddler in which to store the `endstate` parameter.\\n\\n;endstate\\n:Value assigned to a field called `quickadd-addtoggle` on the tiddler //containing// the macro call, when submitting or cancelling from the quickadd interface. This can be used with a ''reveal'' widget in the containing tiddler to determine whether the quickadd interface stays open or closes after use. Defaults to `\\\"open\\\"`, so that multiple tiddlers can be generated with the fewest UI interactions. This field could conceivably be used for other purposes.\\n\\n;position\\n:A parameter that only matters when ''quickadd'' is used by the Omni plugin. It determines where in an omnibus tiddler's `list` field to insert a newly-added tiddler.\\n\\n;layout\\n:Possibilities: `fullui`, `slimui`, and `subui`, which are the names of macros that give variations on buttons, fields and styling. \\n\\n\\n!! Convenience macros\\n\\nThe ''arrownote'' macro simply calls the ''quickadd'' macro with parameters `tags=\\\"quickadd\\\" buttonstyle=\\\"big\\\"`, and is used in the plugin's provided interface tiddler, $:/plugins/can/quick/arrownote-adder. ''arrownote'' takes an optional ''layout'' parameter to pass to ''quickadd''.\\n\\nThe ''quicksub'' macro calls ''quickadd'', supplementing whatever tags are provided in parameters with the title of the current tiddler. It takes the same parameters as ''quickadd''. \\n\\n!! ''omnilabel'' macro\\n\\nThis plugin provides a macro, called ''omnilabel'', that generates primitive labels using a snippet of the text of tiddlers that don't have intentional titles (i.e. ones whose titles are timestamps matching their ''created'' time). This plugin overrides the core ''timeline-title'' macro (defined in $:/core/macros/timeline) to use ''omnilabel'' instead of the tiddler's title in the timeline macro -- which is used by the \\\"Recent\\\" sidebar tab. The ''omnilabel'' macro has its flaws; to return to the stock ~TiddlyWiki timeline title display, remove the tag <<tag $:/tags/Macro>> from the tiddler [[$:/plugins/can/quick/timeline-tweak]].\\n\"\n },\n \"$:/plugins/can/quick/checkmark.svg\": {\n \"title\": \"$:/plugins/can/quick/checkmark.svg\",\n \"text\": \"<svg\\n width=\\\"22.0px\\\"\\n height=\\\"22.0px\\\"\\n viewBox=\\\"0 0 22.0 22.0\\\">\\n <g>\\n <path\\n d=\\\"M 19.593799,-0.00844703 C 13.454028,4.7259572 9.3446824,11.99357 7.6719245,15.112646 6.677435,13.151145 5.2034927,10.646341 2.835987,8.2747561 L 0.7148933,10.393896 c 3.4023181,3.408181 5.4316406,8.466797 5.4316406,8.466797 l 1.2226563,3.13086 1.5117187,-3.001954 c 0,0 5.9575031,-11.5449655 12.5429681,-16.623046 z\\\">\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/quick/escape.svg\": {\n \"title\": \"$:/plugins/can/quick/escape.svg\",\n \"created\": \"20200704020624739\",\n \"modified\": \"20200707223828753\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"<svg\\n width=\\\"22.0px\\\"\\n height=\\\"22.0px\\\"\\n viewBox=\\\"0 0 30 25\\\">\\n <g>\\n <path\\n d=\\\"M 12.302259,1.0714706 -0.06247441,3.0832093 8.8329909,12.323098 10.143362,11.065959 7.6823152,6.6855455 c 1.4303571,0.4245238 2.9821908,0.9468864 4.4618198,1.5686832 2.049813,0.8614147 3.992577,1.9178273 5.343235,3.0653523 1.350658,1.147493 2.043641,2.288534 2.035216,3.455169 v 0.02349 0.02501 c 0.0056,0.197706 -0.07775,0.484297 -0.468096,0.886104 -0.390297,0.40184 -1.076011,0.860798 -2.06966,1.255576 -1.987283,0.789556 -5.15922,1.315085 -9.4027102,1.064572 L 7.43965,20.449845 c 4.507277,0.266087 7.983895,-0.255682 10.437544,-1.230519 1.226832,-0.487422 2.203489,-1.086462 2.918186,-1.822305 0.710121,-0.731058 1.164591,-1.654907 1.14129,-2.633263 0.0032,-2.114819 -1.234327,-3.896285 -2.88218,-5.2962626 C 17.398485,8.0605468 15.267369,6.9382863 13.078774,6.018581 11.6932,5.4363016 10.308556,4.9482139 8.9989465,4.5360021 L 12.593451,2.8655529 Z\\\" />\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/quick/fastarrow-circle.svg\": {\n \"title\": \"$:/plugins/can/quick/fastarrow-circle.svg\",\n \"text\": \"<svg\\n width=\\\"22px\\\"\\n height=\\\"22px\\\"\\n viewBox=\\\"34 34 100 85\\\">\\n <path\\n transform=\\\"matrix(4.0909091,0,0,4.0909091,37.5,30)\\\"\\n d=\\\"M 11.078125 0.15625 A 11 11 0 0 0 2.6660156 4.0683594 L 9.46875 4.0683594 C 9.6277812 4.0683594 9.7558594 4.1710103 9.7558594 4.2988281 L 9.7558594 4.9296875 C 9.7558594 5.0575055 9.6277812 5.1601562 9.46875 5.1601562 L 1.8554688 5.1601562 A 11 11 0 0 0 0.3125 8.9003906 L 1.2558594 8.9003906 C 1.4148905 8.9003906 1.5429688 9.0049947 1.5429688 9.1328125 L 1.5429688 9.7617188 C 1.5429688 9.8895368 1.4148905 9.9941406 1.2558594 9.9941406 L 0.140625 9.9941406 A 11 11 0 0 0 0.078125 11.15625 A 11 11 0 0 0 0.16210938 12.503906 L 1.1308594 12.503906 C 1.2898908 12.503906 1.4199219 12.606557 1.4199219 12.734375 L 1.4199219 13.365234 C 1.4199219 13.493052 1.2898908 13.595703 1.1308594 13.595703 L 0.3515625 13.595703 A 11 11 0 0 0 1.8535156 17.150391 L 9.46875 17.150391 C 9.6277812 17.150391 9.7558594 17.254995 9.7558594 17.382812 L 9.7558594 18.011719 C 9.7558594 18.139539 9.6277812 18.244141 9.46875 18.244141 L 2.6679688 18.244141 A 11 11 0 0 0 11.078125 22.15625 A 11 11 0 0 0 22.078125 11.15625 A 11 11 0 0 0 11.078125 0.15625 z M 12.078125 4.6816406 C 12.140542 4.682151 12.201499 4.702896 12.25 4.7421875 L 20.449219 10.804688 C 20.680732 10.992451 20.680732 11.345439 20.449219 11.533203 L 12.25 17.595703 C 12.069765 17.741874 11.800795 17.612915 11.800781 17.380859 L 12.681641 13.574219 L 3.125 13.574219 C 2.9332732 13.574219 2.7792969 13.418289 2.7792969 13.226562 L 2.7792969 9.1113281 C 2.7792969 8.9196013 2.9332732 8.7636719 3.125 8.7636719 L 12.681641 8.7636719 L 11.800781 4.9570312 C 11.800779 4.8038179 11.924917 4.6803206 12.078125 4.6816406 z \\\"\\n />\\n</svg>\\n\"\n },\n \"$:/plugins/can/quick/fastarrow.svg\": {\n \"title\": \"$:/plugins/can/quick/fastarrow.svg\",\n \"text\": \"<svg\\n viewBox=\\\"40 30 85 90\\\"\\n height=\\\"22px\\\"\\n width=\\\"22px\\\">\\n <g>\\n <path\\n d=\\\"M 89.048827,42.334883 A 1.2609298,1.2609298 0 0 0 87.77707,43.595787 V 63.688102 H 48.109208 a 1.5875,1.5875 0 0 0 -1.5875,1.5875 v 18.825207 a 1.5875,1.5875 0 0 0 1.5875,1.5875 H 87.77707 v 20.092831 a 1.2609298,1.2609298 0 0 0 2.055172,0.97927 l 37.497448,-30.4059 a 2.1454366,2.1454366 0 0 0 0,-3.332612 L 89.832242,42.616003 a 1.2609298,1.2609298 0 0 0 -0.783415,-0.28112 z\\\" />\\n <path\\n d=\\\"m 51.004478,43.27296 v 2.883334 a 1.0583333,1.0583333 45 0 0 1.058333,1.058333 H 81.760247 A 1.0583333,1.0583333 135 0 0 82.81858,46.156294 V 43.27296 A 1.0583333,1.0583333 45 0 0 81.760247,42.214627 H 52.062811 a 1.0583333,1.0583333 135 0 0 -1.058333,1.058333 z\\\"/>\\n <path\\n d=\\\"m 35.93881,54.021224 v 2.883334 a 1.0583333,1.0583333 45 0 0 1.058333,1.058333 h 37.026253 a 1.0583333,1.0583333 135 0 0 1.058333,-1.058333 V 54.021224 A 1.0583333,1.0583333 45 0 0 74.023396,52.962891 H 36.997143 a 1.0583333,1.0583333 135 0 0 -1.058333,1.058333 z\\\"/>\\n <path\\n d=\\\"m 58.371094,102.88605 v 2.88334 a 1.0583333,1.0583333 45 0 0 1.058333,1.05833 h 21.488802 a 1.0583333,1.0583333 135 0 0 1.058333,-1.05833 v -2.88334 a 1.0583333,1.0583333 45 0 0 -1.058333,-1.05833 H 59.429427 a 1.0583333,1.0583333 135 0 0 -1.058333,1.05833 z\\\"/>\\n <path\\n d=\\\"m 40.017273,92.39557 v 2.883334 a 1.0583333,1.0583333 45 0 0 1.058333,1.058333 h 37.092623 a 1.0583333,1.0583333 135 0 0 1.058333,-1.058333 V 92.39557 A 1.0583333,1.0583333 45 0 0 78.168229,91.337237 H 41.075606 a 1.0583333,1.0583333 135 0 0 -1.058333,1.058333 z\\\"/>\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/quick/quickadd-big-button.svg\": {\n \"title\": \"$:/plugins/can/quick/quickadd-big-button.svg\",\n \"created\": \"20200517184255518\",\n \"creator\": \"chris\",\n \"modified\": \"20200704025357585\",\n \"modifier\": \"chris\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"<svg height=\\\"22pt\\\" width=\\\"22pt\\\" viewBox=\\\"0 0 277 277\\\">\\n <circle\\n r=\\\"138.26346\\\"\\n cy=\\\"138.26346\\\"\\n cx=\\\"138.26346\\\"\\n id=\\\"path1008\\\"\\n style=\\\"fill:#000000;fill-opacity:1;stroke:none;stroke-width:0;stroke-opacity:1\\\" />\\n <g\\n id=\\\"g937-8\\\"\\n transform=\\\"matrix(3.7795276,0,0,3.7795276,1057.0272,272.93797)\\\"\\n style=\\\"fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1\\\">\\n <path\\n sodipodi:nodetypes=\\\"ccccccccc\\\"\\n id=\\\"path914-1-3-1-2-1-7\\\"\\n d=\\\"m -258.68574,9.4622796 -5.72931,15.4363384 4.0326,-0.933085 0.1742,37.317431 c -1.35265,1.566997 -1.8121,3.160143 -1.8121,3.160143 -0.11314,2.868561 0.95998,6.631241 1.05307,8.762376 0.98287,0.106825 1.56182,-0.225604 1.81888,-0.05188 l 0.0867,2.556541 0.38252,0.05821 0.38251,-0.05828 0.0862,-2.556558 c 0.25702,-0.173775 0.83604,0.15854 1.81889,0.05152 0.0927,-2.131153 1.16504,-5.894045 1.05133,-8.762584 0,0 -0.45976,-1.593055 -1.81272,-3.159784 l 0.16681,-37.317465 4.03279,0.932287 z\\\"\\n style=\\\"fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\\\"\\n inkscape:path-effect=\\\"#path-effect1036\\\"\\n inkscape:original-d=\\\"m -258.68181,9.4516932 -5.73324,15.4469248 4.0326,-0.933085 0.1742,37.317431 c -1.35265,1.566997 -1.8121,3.160143 -1.8121,3.160143 -0.11314,2.868561 0.95998,6.631241 1.05307,8.762376 0.98287,0.106825 1.56182,-0.225604 1.81888,-0.05188 l 0.0867,2.556541 0.72437,0.110227\\\"\\n transform=\\\"rotate(46.577289,-159.2453,23.947788)\\\" />\\n <path\\n sodipodi:nodetypes=\\\"cccccsccccc\\\"\\n id=\\\"path910-0-2-5-0\\\"\\n d=\\\"m -271.72257,-57.072874 c 12.6631,9.009276 25.02666,1.739112 36.01494,8.191443 l 3.38653,4.544018 4.44549,3.083572 c 5.01097,10.523166 -0.88676,27.252204 4.58482,35.8753865 -1.39365,-0.031348 -1.5399,-0.059342 -1.58943,-0.1209212 -7.49954,-9.3232583 -2.63164,-22.3715353 -6.64453,-32.5261993 l -4.04825,-3.374594 -3.62625,-4.228358 c -11.69832,-5.547814 -23.21324,-0.548631 -32.50865,-9.946928 -0.0411,-0.983034 4.1e-4,-0.654186 -0.0147,-1.497419 z\\\"\\n style=\\\"fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\\\" />\\n <path\\n sodipodi:nodetypes=\\\"ccc\\\"\\n id=\\\"path912-1-9-2-9\\\"\\n d=\\\"m -269.13343,-54.493176 2.86052,43.104861 40.71544,2.9845762\\\"\\n style=\\\"fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\\\" />\\n </g>\\n</svg>\"\n },\n \"$:/plugins/can/quick/quickadd-button.svg\": {\n \"title\": \"$:/plugins/can/quick/quickadd-button.svg\",\n \"created\": \"20200517134909443\",\n \"creator\": \"chris\",\n \"modified\": \"20200704025415240\",\n \"modifier\": \"chris\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"<svg class=\\\"tc-image-button\\\" height=\\\"22pt\\\" width=\\\"22pt\\\" viewBox=\\\"0 0 55 55\\\">\\n <g\\n transform=\\\"translate(272.23164,58.233013)\\\"\\n id=\\\"layer1\\\"\\n inkscape:groupmode=\\\"layer\\\"\\n inkscape:label=\\\"Layer 1\\\">\\n <path\\n transform=\\\"rotate(46.577289,-159.2453,23.947788)\\\"\\n inkscape:original-d=\\\"m -258.68181,9.4516932 -5.73324,15.4469248 4.0326,-0.933085 0.1742,37.317431 c -1.35265,1.566997 -1.8121,3.160143 -1.8121,3.160143 -0.11314,2.868561 0.95998,6.631241 1.05307,8.762376 0.98287,0.106825 1.56182,-0.225604 1.81888,-0.05188 l 0.0867,2.556541 0.72437,0.110227\\\"\\n style=\\\"fill:#000000;fill-opacity:1;stroke:#680000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\\\"\\n d=\\\"m -258.68574,9.4622796 -5.72931,15.4363384 4.0326,-0.933085 0.1742,37.317431 c -1.35265,1.566997 -1.8121,3.160143 -1.8121,3.160143 -0.11314,2.868561 0.95998,6.631241 1.05307,8.762376 0.98287,0.106825 1.56182,-0.225604 1.81888,-0.05188 l 0.0867,2.556541 0.38252,0.05821 0.38251,-0.05828 0.0862,-2.556558 c 0.25702,-0.173775 0.83604,0.15854 1.81889,0.05152 0.0927,-2.131153 1.16504,-5.894045 1.05133,-8.762584 0,0 -0.45976,-1.593055 -1.81272,-3.159784 l 0.16681,-37.317465 4.03279,0.932287 z\\\"\\n id=\\\"path914-1-3-1-2-1\\\"\\n sodipodi:nodetypes=\\\"ccccccccc\\\" />\\n <path\\n style=\\\"fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\\\"\\n d=\\\"m -271.72257,-57.072874 c 12.6631,9.009276 25.02666,1.739112 36.01494,8.191443 l 3.38653,4.544018 4.44549,3.083572 c 5.01097,10.523166 -0.88676,27.252204 4.58482,35.8753865 -1.39365,-0.031348 -1.5399,-0.059342 -1.58943,-0.1209212 -7.49954,-9.3232583 -2.63164,-22.3715353 -6.64453,-32.5261993 l -4.04825,-3.374594 -3.62625,-4.228358 c -11.69832,-5.547814 -23.21324,-0.548631 -32.50865,-9.946928 -0.0411,-0.983034 4.1e-4,-0.654186 -0.0147,-1.497419 z\\\"\\n id=\\\"path910-0-2-5\\\"\\n sodipodi:nodetypes=\\\"cccccsccccc\\\" />\\n <path\\n style=\\\"fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\\\"\\n d=\\\"m -269.13343,-54.493176 2.86052,43.104861 40.71544,2.9845762\\\"\\n id=\\\"path912-1-9-2\\\"\\n sodipodi:nodetypes=\\\"ccc\\\" />\\n </g>\\n</svg>\"\n },\n \"$:/plugins/can/quick/quickadd-toolbar-btn-dark.svg\": {\n \"title\": \"$:/plugins/can/quick/quickadd-toolbar-btn-dark.svg\",\n \"text\": \"<svg class=\\\"tc-image-button\\\" height=\\\"22pt\\\" width=\\\"22pt\\\" viewBox=\\\"0 0 277 277\\\"><path d=\\\"M 138.73363,0.40576738 C 61.421105,0.80269438 -0.00917762,62.875943 5.3811517e-6,139.17626 0.00520538,216.03855 62.314009,278.33913 139.17626,278.33409 216.03128,278.32909 278.32888,216.03128 278.33409,139.17626 278.33909,62.314012 216.04612,0.00884038 138.73363,0.40576738 Z m 98.67386,52.23259862 -24.11814,54.056394 -9.29562,-14.017238 -16.96835,16.451918 11.6503,5.75646 0.22135,0.44261 c 9.4365,19.81683 8.51182,44.96086 7.91236,68.97947 -0.59945,24.01859 -0.82798,46.86192 8.72387,61.91555 l 1.82593,2.87722 -3.41209,-0.0557 c -2.55708,-0.0576 -3.95695,-0.12616 -4.8507,-0.20284 -0.44685,-0.0387 -0.75989,-0.0831 -1.12506,-0.18442 -0.36507,-0.10123 -0.93931,-0.39208 -1.21729,-0.7378 -0.77151,-0.95911 -1.381,-1.97183 -2.08414,-2.95099 L 45.27932,236.22709 38.27071,67.338005 c -0.83293,-0.77309 -1.685392,-1.436515 -2.508345,-2.268576 l -0.497977,-0.497986 -0.01841,-0.719306 c -0.151651,-3.626432 -0.0011,-2.484736 -0.05536,-5.514664 l -0.03692,-1.862814 h 1.862815 0.590199 l 0.461092,0.350427 c 22.718747,16.163456 45.045418,17.692123 67.079786,18.111726 22.03439,0.419608 43.79445,-0.361806 64.38701,11.730202 l 0.33202,0.184434 7.40205,13.240582 18.13031,-17.52166 -14.27545,-9.258744 z M 48.045878,75.084365 53.726542,211.93672 c 5.884384,-6.67405 15.171183,-19.48613 22.64888,-26.02408 -10e-7,0 6.183124,-2.2612 13.998779,-2.61901 l 71.082339,-67.89155 -8.96391,-11.49019 C 131.62987,94.114853 113.09015,91.306996 92.974764,89.046256 77.385331,87.294182 62.162609,84.352683 48.045878,75.084365 Z M 171.06571,124.60549 99.079641,193.5299 c -0.705311,7.79199 -3.209209,13.83278 -3.209209,13.83278 -6.735709,7.04508 -20.561598,15.17235 -27.757794,20.65696 l 130.636822,7.15616 c -7.06348,-14.52019 -8.68837,-30.57607 -9.31407,-46.6257 -0.80919,-20.75796 -2.37592,-39.32455 -9.35097,-57.30463 z m -117.173176,91.68395 0.276657,6.49219 3.061657,-3.09855 c -0.133765,-0.8105 -1.673808,-1.91671 -3.338314,-3.39364 z m 6.842618,8.18902 -3.282979,2.95098 6.252418,0.35044 c -1.280718,-1.64878 -2.171361,-3.13295 -2.969439,-3.30142 z\\\" /></svg>\\n\"\n },\n \"$:/plugins/can/quick/quickadd-toolbar-btn-light.svg\": {\n \"title\": \"$:/plugins/can/quick/quickadd-toolbar-btn-light.svg\",\n \"text\": \"<svg\\n class=\\\"tc-image-button\\\"\\n viewBox=\\\"0 0 277 277\\\"\\n width=\\\"22pt\\\"\\n height=\\\"22pt\\\">\\n <path\\n transform=\\\"scale(9.4431816)\\\"\\n d=\\\"M 14.583984,0 C 6.5044653,0.08432537 -7.0758185e-4,6.6583223 0,14.738281 8.0905477e-4,22.877358 6.5992042,29.474879 14.738281,29.474609 22.876595,29.4738 29.4738,22.876595 29.474609,14.738281 29.474879,6.5992042 22.877358,8.0905477e-4 14.738281,0 14.686849,-2.6923669e-4 14.635416,-2.6923669e-4 14.583984,0 Z m 0.154297,1.1132812 c 3.567118,-5.4e-6 7.11048,1.4679018 9.632813,3.9902344 0.181932,0.1819321 0.31902,0.3523151 0.489832,0.5445192 L 19.134886,7.7387054 20.646605,8.7191742 18.726693,10.630365 17.86414,9.1351952 17.82898,9.0535942 C 14.448275,7.6903318 13.468131,7.9799815 11.134766,7.9355469 8.8527996,7.8920911 6.5405306,7.7270274 4.1894531,6.1191406 4.4764049,5.7656236 4.7813084,5.4257229 5.1035156,5.1035156 7.6258483,2.581183 11.171166,1.1132758 14.738281,1.1132812 Z m 10.310949,4.738684 c 2.116433,2.4548149 3.314057,5.6429068 3.314051,8.8863158 7e-6,3.567119 -1.469855,7.11048 -3.992187,9.632813 -0.522506,0.522506 -1.095971,0.98959 -1.697266,1.417968 -0.847763,-1.589927 -0.833352,-3.870899 -0.773437,-6.271484 0.06348,-2.543486 0.368302,-3.985434 -0.755131,-7.159856 l -0.02344,-0.04687 -1.361926,-0.723451 1.796865,-1.7979098 0.984375,1.4843758 z M 3.7324219,6.7421875 c 4.669e-4,0.011747 -5.37e-4,0.00669 0,0.019531 l 0.00195,0.076172 0.052734,0.052734 c 0.087148,0.088113 0.1774172,0.1583702 0.265625,0.2402344 L 4.7519531,23.982422 C 2.4523863,21.490795 1.113276,18.130646 1.1132812,14.738281 1.1132769,11.884799 2.0652663,9.0553743 3.7324219,6.7421875 Z m 1.3554687,1.2089844 c 1.4951289,0.9812765 3.106946,1.2929771 4.7578125,1.4785156 2.1301509,0.2394046 4.0934409,0.5367464 6.3027349,1.5742185 l 0.896549,1.290157 -7.4746745,7.116093 C 8.7426619,19.448046 8.0878905,19.6875 8.0878906,19.6875 7.2959701,20.379897 6.3126667,21.73685 5.6894531,22.443359 Z m 12.9746744,5.3175001 1.007747,0.629766 c 0.738632,1.904029 0.904544,3.870165 0.990235,6.068359 0.06624,1.699216 0.236698,3.399911 0.984375,4.9375 L 7.2128906,24.146484 c 0.7617181,-0.580853 2.2260505,-1.441331 2.9394534,-2.1875 0,0 0.265158,-0.639699 0.339844,-1.464843 z M 5.7070312,22.902344 c 0.1762002,0.156965 0.3393398,0.275433 0.3535157,0.361328 l -0.3242188,0.328125 z m 0.7246094,0.86914 c 0.084514,0.01784 0.1783293,0.17516 0.3144532,0.34961 l -0.6621094,-0.03711 z m -0.5488281,1.304688 15.7890625,0.865234 c 0.07478,0.1042 0.140565,0.210447 0.222656,0.3125 0.0094,0.01171 0.02699,0.01517 0.04102,0.02539 -2.151552,1.331571 -4.66519,2.083989 -7.197266,2.083984 -3.216686,7e-6 -6.4083914,-1.202672 -8.8554685,-3.287109 z\\\" />\\n</svg>\\n\"\n },\n \"$:/plugins/can/quick/title-page.svg\": {\n \"title\": \"$:/plugins/can/quick/title-page.svg\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"<svg\\n width=\\\"22.0px\\\"\\n height=\\\"22.0px\\\"\\n viewBox=\\\"0 0 22.0 22.0\\\">\\n <g\\n transform=\\\"matrix(1.375,0,0,1.375,-3.8159015,-2.4934254)\\\">\\n <path\\n d=\\\"M 7.9459026,2.6643496 8.4611063,3.1796324 7.4306108,4.2101273 6.9153279,3.694924 Z M 7.4306108,2.1490579 7.2515374,1.9699839 C 6.9670785,1.6856056 6.5051554,1.6849782 6.2205029,1.9695164 5.936584,2.2535236 5.9361418,2.7157125 6.2209704,3.0006386 l 0.1790745,0.1789857 z m 1.5457873,1.5457866 5.4880839,5.4880742 c 0.01008,0.010082 0.01986,0.020453 0.02934,0.0311 0.0088,0.008 0.01803,0.01635 0.02686,0.02509 0.522387,0.522387 0.97483,2.0054083 0.97483,2.0054083 0,0 -1.494318,-0.463656 -2.005405,-0.974832 -0.0088,-0.0088 -0.01696,-0.01758 -0.02474,-0.0266 -0.01074,-0.0096 -0.0212,-0.01943 -0.03136,-0.0296 L 7.9459114,4.7254102 8.9764949,3.694924 Z m 4.4763559,9.3655175 c -0.618298,-0.05257 -1.26595,-0.206951 -2.157786,-0.487133 -0.166244,-0.05204 -0.325199,-0.103521 -0.577141,-0.185823 -1.4574322,-0.476026 -1.9927448,-0.62003 -2.6183413,-0.65092 -0.7613145,-0.03755 -1.2619389,0.194023 -1.6013285,0.79237 -0.2406147,0.418965 -0.8698818,0.06216 -0.633885,-0.359428 0.4858602,-0.856776 1.2520158,-1.211106 2.2711131,-1.16083 0.7173112,0.03552 1.2804135,0.186921 2.8087067,0.686173 0.249478,0.08147 0.40625,0.132042 0.569305,0.183273 1.772582,0.556731 2.802778,0.644168 3.606829,0.159122 0.417342,-0.25652 0.797943,0.374432 0.376378,0.623953 -0.576869,0.34796 -1.252839,0.466386 -2.04385,0.399243 z\\\" />\\n <path\\n d=\\\"m 5.6835938,13.455078 v 0.847656 H 15.833984 v -0.847656 z\\\"/>\\n <path\\n d=\\\"M 3.1841879,7.7449646 V 17.795765 H 4.3593834 V 9.0586357 H 10.871806 L 9.5581325,7.7449646 Z m 11.1860561,0 1.313671,1.3136711 h 1.474478 v 8.7371293 h 1.313671 V 7.7449646 Z\\\" />\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/can/quick/license\": {\n \"title\": \"$:/plugins/can/quick/license\",\n \"caption\": \"license\",\n \"text\": \"BSD 3-Clause License\\n\\nCopyright (c) 2020, Chris Nicoll\\n\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n },\n \"$:/plugins/can/quick/omnilabel-macro\": {\n \"title\": \"$:/plugins/can/quick/omnilabel-macro\",\n \"created\": \"20200702181035274\",\n \"modified\": \"20200705221330000\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define omnilabel(chars:100)\\n<$wikify name=\\\"can-long-label\\\" text={{{ [{!!title}!match{!!created}] ~[<currentTiddler>get[text]!is[blank]] ~[<currentTiddler>get[title]]}}}>\\n\\t<$link to=<<currentTiddler>>>\\n\\t\\t<$text text={{{ [<can-long-label>split[]first[$chars$]join[]] }}}/>\\n\\t</$link>\\n</$wikify>\\n\\\\end\"\n },\n \"$:/plugins/can/quick/quick-macros\": {\n \"title\": \"$:/plugins/can/quick/quick-macros\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define quickbutton(buttonstyle)\\n<$button class=\\\"tc-btn-invisible can-omni-button can-rightedge $buttonstyle$\\\" actions=\\\"<<submit-actions>> <<reset-actions>>\\\">\\n{{$:/plugins/can/quick/fastarrow-circle.svg}}\\n</$button>\\n\\\\end\\n\\n\\\\define quickresetbutton(buttonstyle) <$button class=\\\"can-omni-button can-leftedge $buttonstyle$ tc-btn-invisible\\\" actions=<<reset-actions>> >{{$:/plugins/can/quick/escape.svg}}</$button>\\n\\n\\\\define quicktitle()\\n<div class=\\\"can-quickadd-titleadder\\\">\\n<$keyboard tag=\\\"div\\\" class=\\\"can-keyboard-wide\\\" key=\\\"ctrl-enter\\\" actions='<<submit-actions>><<reset-actions>>' >\\n<$keyboard tag=\\\"div\\\" class=\\\"can-keyboard-wide\\\" key=\\\"cmd-enter\\\" actions='<<submit-actions>><<reset-actions>>' >\\n<$keyboard tag=\\\"div\\\" class=\\\"can-keyboard-wide\\\" key=\\\"escape\\\" actions=\\\"<$action-setfield $tiddler=<<quickstatetid>> $field='edittitle' />\\\">\\n<$edit-text class=\\\"can-quickadd-titleedit\\\" tiddler=<<quickstatetid>> field=edittitle placeholder=\\\"Optional title\\\"/>\\n</$keyboard></$keyboard></$keyboard>\\n<$reveal type=\\\"nomatch\\\" stateTitle=<<quickstatetid>> stateField=\\\"edittitle\\\" text=\\\"\\\">\\n<$button class=\\\"can-omni-button tiny tc-btn-invisible\\\" actions=\\\"<$action-setfield $tiddler=<<quickstatetid>> $field='edittitle'/>\\\">{{$:/plugins/can/quick/escape.svg}}</$button>\\n</$reveal>\\n</div>\\n\\\\end\\n\\n\\\\define quicktext()\\n<$keyboard tag=\\\"div\\\" class=\\\"can-keyboard-wide\\\" key=\\\"ctrl-enter\\\" actions=\\\"<<submit-actions>> <<reset-actions>>\\\" >\\n<$keyboard tag=\\\"div\\\" class=\\\"can-keyboard-wide\\\" key=\\\"cmd-enter\\\" actions=\\\"<<submit-actions>> <<reset-actions>>\\\" >\\n<$keyboard tag=\\\"div\\\" class=\\\"can-keyboard-wide\\\" key=\\\"escape\\\" actions=\\\"<<reset-actions>>\\\" >\\n<$edit-text class=\\\"can-quickadd-textarea\\\" tiddler=<<quickstatetid>> field=\\\"text\\\" default=\\\"\\\" placeholder=\\\"Enter quick text here\\\" rows=\\\"1\\\" minHeight=\\\"0\\\" focus=<<focus>>/>\\n</$keyboard></$keyboard></$keyboard>\\n\\\\end\\n\\n\\n\\\\define omni-inlist() <$action-listops $tiddler=<<__omniparent__>> $subfilter='+[insertbefore:contTiddler{!!savetitle}] +[move{!!savetitle}]'/>\\n\\n\\\\define omni-listtop() <$action-listops $tiddler=<<__omniparent__>> $subfilter='[{!!savetitle}] +[putfirst[]]'/>\\n\\n\\\\define quickstate() $:/state/can/quick/$(currentTiddler)$\\n\\n\\\\define quickadd(tags:\\\"\\\" omniparent:\\\"\\\" focus:\\\"true\\\" buttonstyle:\\\"small\\\" openstatetid endstate:\\\"open\\\" position:\\\"omni-inlist\\\" layout:\\\"fullui\\\" quickstatetid)\\n<$set name=quickstatetid value=\\\"$quickstatetid$\\\" emptyValue=\\\"$(quickstate)$\\\" >\\n<$set name=contTiddlerFilt filter=\\\"[<currentTiddler>]\\\" >\\n<$vars contTiddler=<<currentTiddler>> focus=$focus$ layout=$layout$ subTags=<<__tags__>> omniParent=\\\"$omniparent$\\\" openstatetid=\\\"$openstatetid$\\\" >\\n<$set name=omniParBrak filter=\\\"[<omniParent>]\\\" >\\n<$set name=\\\"submit-actions\\\" value=\\\"<$tiddler tiddler=<<quickstatetid>> ><$set name=theTime value=<<now [UTC]YYYY0MM0DD0hh0mm0ss0XXX>>><$set name=newtitle value={{!!edittitle}} emptyValue=<<theTime>> ><$action-setfield newtitle=<<newtitle>>/><$action-createtiddler $basetitle={{!!newtitle}} $savetitle=!!savetitle text={{!!text}} tags=<<subTags>> created=<<theTime>> omniparent=<<omniParBrak>> /><$macrocall $name=$position$/><$action-setfield $tiddler=<<openstatetid>> text=$endstate$/></$set></$set></$tiddler><$action-sendmessage $message='tm-auto-save-wiki'/>\\\" >\\n<$set name=\\\"reset-actions\\\" value=\\\"<$tiddler tiddler=<<quickstatetid>> ><$action-setfield $field=edittitle/><$action-setfield text=''/><$action-setfield $tiddler=<<openstatetid>> text=$endstate$/></$tiddler>\\\" >\\n<<quickui layout:$layout$ buttonstyle:$buttonstyle$>>\\n</$set></$set></$set></$vars></$set></$set>\\n\\\\end\\n\\n\\\\define quickui(buttonstyle layout)\\n<<$layout$ buttonstyle:$buttonstyle$>>\\n\\\\end\\n\\n\\\\define fullui(buttonstyle)\\n<div class=\\\"can-quickadd fullui\\\">\\t\\n\\t<<quickresetbutton buttonstyle:\\\"small\\\">>\\n\\t<<quicktext>>\\n\\t<div class=\\\"can-quickadd-btmrow\\\">\\n\\t\\t<<quicktitle>>\\n\\t\\t<<quickbutton buttonstyle:$buttonstyle$ >>\\n\\t</div>\\n</div>\\n\\\\end\\n\\n\\\\define slimui()\\n<div class=\\\"can-quickadd slim\\\">\\t\\n\\t<<quickresetbutton buttonstyle:\\\"small\\\">>\\n\\t<<quicktext>>\\n\\t<<quickbutton buttonstyle:\\\"small\\\" >>\\n</div>\\n\\\\end\\n\\n\\\\define subui()\\n<div class=\\\"can-quickadd sub\\\">\\t\\n\\t<<quicktext>>\\n\\t<div class=\\\"can-quickadd-btmrow\\\">\\n\\t\\t<<quicktitle>>\\n\\t\\t<<quickbutton buttonstyle:\\\"big\\\" >>\\n\\t</div>\\n</div>\\n\\\\end\\n\\n\\n\\\\define arrownote(layout:\\\"fullui\\\")\\n<$macrocall $name=\\\"quickadd\\\" tags=\\\"quickadd\\\" buttonstyle=\\\"big\\\" layout=$layout$ />\\n\\\\end\\n\\n\\\\define quicksub(tags omniparent focus:\\\"true\\\" buttonstyle endstate) \\n<$macrocall $name=\\\"quickadd\\\" tags=\\\"[[$(currentTiddler)$]] $tags$\\\" omniparent=$omniparent$ focus=$focus$ buttonstyle=$buttonstyle$ endstate=$endstate$ />\\n\\\\end\\n\"\n },\n \"$:/plugins/can/quick/stylesheet\": {\n \"title\": \"$:/plugins/can/quick/stylesheet\",\n \"created\": \"20200507184921957\",\n \"creator\": \"chris\",\n \"modified\": \"20200706205716530\",\n \"modifier\": \"chris\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\n.can-quickadd {\\nmargin-top: 1em;\\n}\\n\\n.can-quickadd.slim {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n}\\n\\n.can-quickadd-textarea {\\nwidth: 100%;\\nmargin: 0.4em 0;\\n}\\n\\n.can-quickadd-titleedit, .can-quickadd-textarea {\\noutline-color: #eee;\\nborder: 1px solid #eee;\\nwidth: 100%;\\n}\\n\\n.can-quickadd-titleedit {\\nmargin-top: 0.5em;\\n}\\n\\n.can-quickadd-btmrow {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n}\\n\\n.can-keyboard-wide {position: relative; width: 100%;}\\n\\n.can-quickadd-titleadder {\\ndisplay: flex;\\nflex-direction: row;\\n}\\n\\n.can-title-cancel {\\nmargin-right: 1em;\\n}\\n\\n.can-omni-button {\\nmargin-right: 0.4em;\\nflex: 0 0 auto;\\n}\\n\\n.arrownote-top-container {\\n border-radius: 1em;\\n padding: 0 1em 1em 1em;\\n background-color: rgba(255,255,255,0.8);\\n}\\n\\n.tc-topbar .arrownote-top-container svg {\\n fill: #666699;\\n}\\n.can-omni-button svg, .can-omni-button.small svg {width: 12pt; height: 12pt;}\\n\\n.can-omni-button.big svg {width: 16pt; height: 16pt;}\\n\\n.can-omni-button.tiny svg {width: 10pt; height: 10pt;}\\n\\n.can-omni-button.none {display: none;}\\n\\n.can-leftedge {\\n margin-left: 0;\\n padding-left: 0;\\n}\\n\\n.can-rightedge {\\n margin-right: 0;\\n padding-right: 0;\\n}\"\n },\n \"$:/plugins/can/quick/readme\": {\n \"title\": \"$:/plugins/can/quick/readme\",\n \"caption\": \"readme\",\n \"text\": \"@@background: #ffdd00;font-weight:bold;This is a plugin I wrote for myself, and it has not been extensively tested. It may also change. Back up your data, and use at your own risk!@@\\n\\nThe Quick plugin is meant to make it easier to jot small bits of information into a TiddlyWiki.\\n\\nThe main feature is an interface which is a lot like using a New Journal button, but the experience is tweaked to reduce cognitive overhead and the number of UI interactions.\\n\\nIt is possible, but not necessary, to enter a title for a \\\"quick\\\" tiddler. If a title is not provided, the tiddler is created with a timestamp for a title.\\n\\nThe ''Recent'' tab in the sidebar displays a sample of the tiddler text in the case that a title hasn't been chosen.\\n\"\n },\n \"$:/plugins/can/quick/timeline-tweak\": {\n \"title\": \"$:/plugins/can/quick/timeline-tweak\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define timeline-title()\\n\\\\whitespace trim\\n<!-- Overrides the macro of the same name defined in $:/core/macros/timeline -->\\n<<omnilabel chars:200>>\\n\\\\end\\n\"\n }\n }\n}"},"$:/plugins/can/tagbrowse":{"title":"$:/plugins/can/tagbrowse","description":"Tagbrowse - Easily filter tiddlers by tag combinations","author":"Chris Nicoll","version":"0.0.2","core-version":">=5.1.22","source":"","list":"readme license","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"Browse by tags\": {\n \"title\": \"Browse by tags\",\n \"contains-filter\": \"<$text text=\\\"[enlist<desiredTags>tagging[]!is[missing]]\\\"/>\",\n \"contains-not-filter\": \"<$text text=\\\" -[enlist<undesiredTags>tagging[]]\\\"/>\",\n \"created\": \"20200819034130850\",\n \"filter-type\": \"any\",\n \"latest-omniexport\": \"\",\n \"selector-filter\": \"tags[]\",\n \"singleormulti\": \"multi\",\n \"tags\": \"$:/tags/OmniTool\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"<<tagbrowse>>\"\n },\n \"$:/plugins/can/browsetags/state/reveal\": {\n \"title\": \"$:/plugins/can/browsetags/state/reveal\",\n \"created\": \"20200817145844611\",\n \"modified\": \"20200817145844631\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"show\"\n },\n \"$:/plugins/can/tagbrowse/exclude-icon.svg\": {\n \"title\": \"$:/plugins/can/tagbrowse/exclude-icon.svg\",\n \"text\": \"<svg\\n width=\\\"22.0px\\\"\\n height=\\\"22.0px\\\"\\n viewBox=\\\"0 0 22.0 22.0\\\"\\n >\\n <path\\n d=\\\"M 11 0 C 4.9420102 -6.7990993e-16 6.3416984e-08 4.942011 0 11 C -3.8050193e-07 17.057989 4.9420099 22 11 22 C 17.05799 22 22 17.057989 22 11 C 22 4.9420111 17.05799 1.9025087e-07 11 0 z M 11 2.8945312 C 12.74145 2.8945313 14.346357 3.4411553 15.664062 4.3671875 L 4.3515625 15.642578 C 3.4348286 14.32894 2.8945312 12.731867 2.8945312 11 C 2.8945314 6.5064449 6.5064436 2.8945312 11 2.8945312 z M 17.6875 6.4101562 C 18.581421 7.7135553 19.105469 9.2918067 19.105469 11 C 19.105469 15.493555 15.493557 19.105469 11 19.105469 C 9.2812373 19.105469 7.6947225 18.573999 6.3867188 17.669922 L 17.6875 6.4101562 z \\\"\\n />\\n</svg>\\n\"\n },\n \"$:/plugins/can/tagbrowse/license\": {\n \"title\": \"$:/plugins/can/tagbrowse/license\",\n \"caption\": \"license\",\n \"text\": \"BSD 3-Clause License\\n\\nCopyright (c) 2020, Chris Nicoll\\n\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\"\n },\n \"$:/plugins/can/tagbrowse/macros/composefilters\": {\n \"title\": \"$:/plugins/can/tagbrowse/macros/composefilters\",\n \"tags\": \"[[Filter by tag macro]] can $:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define filterOutUndesired() <$text text=\\\" -[enlist<undesiredTags>tagging[]]\\\"/>\\n\\n\\\\define getTiddlersWithAll()\\n<$action-setfield tiddler='$(targetTiddler)$' contains-filter=\\\"[<$list filter='[enlist<desiredTags>]'>tag[<$view field='title'/>]</$list>]\\\"/>\\n<$action-setfield tiddler='$(targetTiddler)$' contains-not-filter=<<filterOutUndesired>>/>\\n\\\\end\\n\\n\\\\define getTiddlersWithAllV2()\\n<$action-setfield tiddler='$(targetTiddler)$' contains-filter=\\\"[<$list filter='[enlist<desiredTags>]'>tag[<$view field='title'/>]</$list>] -[is[missing]]\\\"/>\\n<$action-setfield tiddler='$(targetTiddler)$' contains-not-filter=<<filterOutUndesired>>/>\\n\\\\end\\n\\n\\\\define getTiddlersWithAny() <$action-setfield tiddler='$(targetTiddler)$' contains-filter='<$text text=\\\"[enlist<desiredTags>tagging[]!is[missing]]\\\"/>' /><$action-setfield tiddler='$(targetTiddler)$' contains-not-filter=<<filterOutUndesired>>/>\\n\\n\\\\define getTiddlersWithExactly() \\n<$action-setfield tiddler='$(targetTiddler)$' contains-filter=\\\"[<$list filter='[enlist<desiredTags>]'>tag[<$view field='title'/>]</$list>]\\\"/>\\n<$action-setfield tiddler='$(targetTiddler)$' contains-not-filter=\\\"+[<$list filter='[tags[]!enlist<desiredTags>]'>!tag[<$view field='title'/>]</$list>!untagged[]]\\\"/>\\n\\\\end\\n\\n\\\\define getTiddlersWithExactlyV2() \\n<$action-setfield tiddler='$(targetTiddler)$' contains-filter=\\\"[<$list filter='[enlist<desiredTags>]'>tag[<$view field='title'/>]</$list>]\\\"/>\\n<$action-setfield tiddler='$(targetTiddler)$' contains-not-filter=\\\" <$list filter='[tags[]!enlist<desiredTags>]'>-[tag[<$view field='title'/>]] </$list>\\\"/>\\n\\\\end\\n\\n\\\\define getTiddlersWithNone() <$action-setfield tiddler='$(targetTiddler)$' contains-filter='<$text text=\\\"[!is[system]]-[enlist<desiredTags>tagging[]]\\\"/>' /><$action-setfield tiddler='$(targetTiddler)$' contains-not-filter=<<filterOutUndesired>>/>\\n\\n\\n\\\\define getTiddlersWithOnlyOthers() <$action-setfield tiddler='$(targetTiddler)$' contains-filter='<$text text=\\\"[!is[system]!untagged[]]-[enlist<desiredTags>tagging[]]\\\"/>' /><$action-setfield tiddler='$(targetTiddler)$' contains-not-filter=<<filterOutUndesired>>/>\\n\\n\\\\define getUntaggedTiddlers() <$action-setfield tiddler='$(targetTiddler)$' contains-filter='<$text text=\\\"[!is[system]untagged[]]\\\"/>' /><$action-setfield tiddler='$(targetTiddler)$' contains-not-filter=<<filterOutUndesired>>/>\\n\"\n },\n \"$:/plugins/can/tagbrowse/macros/filterbytags\": {\n \"title\": \"$:/plugins/can/tagbrowse/macros/filterbytags\",\n \"tags\": \"[[Filter by tag macro]] can $:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\n\\n\\\\define filtertypeselect() \\n<div class=\\\"can-tool-row\\\"> \\n <$button set=\\\"$(targetTiddler)$!!filter-type\\\" setTo=\\\"all\\\" actions=<<getTiddlersWithAllV2>> class=\\\"can-button\\\" selectedClass=\\\"selected\\\">All</$button>\\n <$button set=\\\"$(targetTiddler)$!!filter-type\\\" setTo=\\\"any\\\" actions=<<getTiddlersWithAny>> class=\\\"can-button\\\" selectedClass=\\\"selected\\\">Any</$button>\\n <$button set=\\\"$(targetTiddler)$!!filter-type\\\" setTo=\\\"exactly\\\" actions=<<getTiddlersWithExactlyV2>> class=\\\"can-button\\\" selectedClass=\\\"selected\\\">Exactly</$button>\\n</div>\\n<div class=\\\"can-tool-row\\\"> \\n <$button set=\\\"$(targetTiddler)$!!filter-type\\\" setTo=\\\"none\\\" actions=<<getTiddlersWithNone>> class=\\\"can-button\\\" selectedClass=\\\"selected\\\">None of them</$button>\\n <$button set=\\\"$(targetTiddler)$!!filter-type\\\" setTo=\\\"others\\\" actions=<<getTiddlersWithOnlyOthers>> class=\\\"can-button\\\" selectedClass=\\\"selected\\\">Has tag but not these</$button>\\n <$button set=\\\"$(targetTiddler)$!!filter-type\\\" setTo=\\\"untagged\\\" actions=<<getUntaggedTiddlers>> class=\\\"can-button\\\" selectedClass=\\\"selected\\\">Untagged</$button>\\n</div>\\n\\\\end\\n\\n\\\\define chainFilters(targetTiddler) {{$(targetTiddler)$!!contains-filter}} {{$(targetTiddler)$!!contains-not-filter}}\\n\\n\\\\define chainwithinputlist() $(firstchain)$[list[!!input-list]subfilter<firstchain>]\\n\\n\\n\\\\define filterbytags(targetTiddler)\\n<$set name=\\\"targetTiddler\\\" value=<<__targetTiddler__>> emptyValue=<<currentTiddler>> >\\n<$vars desiredTags={{$(targetTiddler)$!!listfilterlist}} undesiredTags={{$(targetTiddler)$!!excludetags}} inputList={{!!input-list}}>\\n''Desired tags:'' <<desiredTags>><br>\\n''Undesired tags:'' <<undesiredTags>><br>\\n<!-- ''Input list:'' {{!!input-list}}<br> -->\\n<!-- ''Test filter:'' <$list filter=\\\"[list[!!input-list]]\\\"/><br> -->\\nMatch tiddlers with these tags:\\n<<filtertypeselect>>\\n<div class=\\\"can-list\\\">\\n\\n<!-- Testing stuff:\\n <$wikify name=bard text=\\\"\\\"\\\"{{$(targetTiddler)$!!contains-filter}}\\\"\\\"\\\" >\\n <$wikify name=notbard text=\\\"\\\"\\\"{{$(targetTiddler)$!!contains-not-filter}}\\\"\\\"\\\" >\\n <$wikify name=wholechain text=\\\"\\\"\\\"$(chainFilters)$\\\"\\\"\\\" >\\n ''Contains filter:'' <<bard>><br>\\n ''Contains-not filter:'' <<notbard>><br>\\n ''Chained filter:'' <<wholechain>><br>\\n ''literal chainFilters:'' $(chainFilters)$ <br>\\n\\n ''Contains-filter results:''<br>\\n <$list filter=<<bard>> template=\\\"\\\"\\\"$:/templates/can/titlewithtags\\\"\\\"\\\" /> <br> \\n ''Net filter results:''<br>\\n <$list filter=<<wholechain>> template=\\\"\\\"\\\"$:/templates/can/titlewithtags\\\"\\\"\\\" /><br>\\n </$wikify></$wikify></$wikify> -->\\n \\n <$wikify name=firstchain text=\\\"\\\"\\\"$(chainFilters)$\\\"\\\"\\\" >\\n <$set name=\\\"morechain\\\" filter=\\\"\\\"\\\"[<targetTiddler>has[input-list]]\\\"\\\"\\\" value=<<chainwithinputlist>> emptyValue=<<firstchain>>>\\n ''Results:''<br>\\n <$list filter=<<morechain>> template=\\\"\\\"\\\"$:/templates/can/titlewithtags\\\"\\\"\\\" /><br>\\n <!-- <<make-browse-omni>> -->\\n </$set></$wikify>\\n</div>\\n</$vars></$set>\\n\\\\end\\n\\n\\\\define excludebrowsechain() $(morechain)$ -[search::literal[<<tagbrowse>>]]\\n\\n\\\\define make-browse-omni(targetTiddler) \\nOmnilist to export:<br>\\n<$list filter=<<excludebrowsechain>> ><$link/><br></$list>\\n<$set name=\\\"targetTiddler\\\" value=<<__targetTiddler__>> emptyValue=<<currentTiddler>> >\\n<$button>\\n<$action-createtiddler $basetitle=\\\"Omnibus from list\\\" $savetitle=!!latest-omniexport /><$action-listops $tiddler={{$(targetTiddler)$!!latest-omniexport}} $filter=<<excludebrowsechain>> />\\n<$action-listops $tiddler={{$(targetTiddler)$!!latest-omniexport}} $tags=omnibus />\\nList to omnibus: \\n</$button>\\n<br>\\n''latest omni export:'' {{{[{!!latest-omniexport}]}}}\\n</$set>\\n\\\\end\\n\\n<!-- \\\\define chainwithinputlist() $(firstchain)$-[!enlist{!!inputList}]-[is[system]] -->\"\n },\n \"$:/plugins/can/omni/list-to-omni-macro\": {\n \"title\": \"$:/plugins/can/omni/list-to-omni-macro\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define concatfilters() {{!!contains-filter}}[all[current]tags[]]\\n\\n\\\\define list-to-omni(targetTiddler) \\n<$set name=\\\"targetTiddler\\\" value=<<__targetTiddler__>> emptyValue=<<currentTiddler>> >\\n<$set name=\\\"desiredTags\\\" value={{$(targetTiddler)$!!listfilterlist}}>\\n<$button>\\n<$action-createtiddler $basetitle=\\\"Omnibus from list\\\" $savetitle=!!latest-omniexport /><$action-listops $tiddler={{$(targetTiddler)$!!latest-omniexport}} $filter=$(concatfilters)$ />\\n<$action-listops $tiddler={{$(targetTiddler)$!!latest-omniexport}} $tags=omnibus />\\nList to omnibus: \\n</$button>\\n<br>\\n''latest omni export:'' {{{[{!!latest-omniexport}]}}}\\n\\n\\\\end\"\n },\n \"$:/plugins/can/tagbrowse/macros/selector-buttons\": {\n \"title\": \"$:/plugins/can/tagbrowse/macros/selector-buttons\",\n \"tags\": \"[[Filter by tag macro]] can $:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define selector-filter-buttons()\\n<div class=\\\"can-tool-row\\\">\\n <span>Tag type:</span>\\n <$button set=\\\"!!selector-filter\\\" setTo=\\\"tags[]\\\" class=\\\"can-button\\\" selectedClass=\\\"selected\\\">All</$button>\\n <$button set=\\\"!!selector-filter\\\" setTo=\\\"tags[]!is[system]\\\" class=\\\"can-button\\\" selectedClass=\\\"selected\\\">Non-system</$button>\\n <$button set=\\\"!!selector-filter\\\" setTo=\\\"tags[]is[system]\\\" class=\\\"can-button\\\" selectedClass=\\\"selected\\\">System</$button>\\n</div>\\n\\\\end\\n\\n\\\\define selector-util-buttons()\\n<div class=\\\"can-tool-row\\\">\\n <$button set=\\\"!!listfilterlist\\\" setTo=\\\"\\\" class=\\\"can-button\\\" actions=\\\"<$action-setfield $field=excludetags/>\\\" >Clear selection</$button>\\t\\n <$button set=\\\"!!listfilterlist\\\" setTo=\\\"\\\" class=\\\"can-button\\\" >Clear only desired tags</$button>\\t\\n <$button class=\\\"can-button\\\" actions=\\\"<$action-setfield $field=excludetags/>\\\" >Clear only excluded tags</$button>\\t\\n <$button set=\\\"!!singleormulti\\\" setTo=<<setsingleormultito>> class=<<singleclass>> >Single-tag mode</$button>\\n</div>\\n\\\\end\"\n },\n \"$:/plugins/can/tagbrowse/tag-pill-compound\": {\n \"title\": \"$:/plugins/can/tagbrowse/tag-pill-compound\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define tagbrowse-tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions,svgcol)\\n<$vars foregroundColor=<<contrastcolour target:\\\"\\\"\\\"$colour$\\\"\\\"\\\" fallbackTarget:\\\"\\\"\\\"$fallbackTarget$\\\"\\\"\\\" colourA:\\\"\\\"\\\"$colourA$\\\"\\\"\\\" colourB:\\\"\\\"\\\"$colourB$\\\"\\\"\\\">> backgroundColor=\\\"\\\"\\\"$colour$\\\"\\\"\\\" excludedfilter=\\\"[<targetTiddler>contains:excludetags<currentTiddler>]\\\" >\\n<$set name=\\\"svgColour\\\" filter=<<excludedfilter>> value=\\\"\\\"\\\"$svgcol$\\\"\\\"\\\" emptyValue=<<foregroundColor>> >\\n<div class=\\\"omni-pill\\\"><$element-tag$ $element-attributes$ class=\\\"\\\"\\\"tc-btn-invisible omni-pill-lhs\\\"\\\"\\\" style=<<omni-tag-pill-styles>>>\\n$actions$<$transclude tiddler=\\\"\\\"\\\"$icon$\\\"\\\"\\\"/><$view tiddler=<<__tag__>> field=\\\"title\\\" format=\\\"text\\\" />\\n</$element-tag$>\\n<$element-tag$ $element-attributes$ class=\\\"\\\"\\\"tc-btn-invisible omni-pill-rhs\\\"\\\"\\\" style=<<omni-tag-pill-styles>>>\\n<<add-to-undesired-tags>>{{$:/plugins/can/tagbrowse/exclude-icon.svg}}\\n</$element-tag$></div>\\n</$set></$vars>\\n\\\\end\\n\\n\\n\\\\define tagbrowse-tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions,svgcol)\\n<$macrocall $name=\\\"tagbrowse-tag-pill-inner\\\" tag=<<__tag__>> icon=\\\"\\\"\\\"$icon$\\\"\\\"\\\" colour=\\\"\\\"\\\"$colour$\\\"\\\"\\\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\\\"\\\"\\\"$element-tag$\\\"\\\"\\\" element-attributes=\\\"\\\"\\\"$element-attributes$\\\"\\\"\\\" actions=\\\"\\\"\\\"$actions$\\\"\\\"\\\" svgcol=\\\"\\\"\\\"$svgcol$\\\"\\\"\\\"/> \\n\\\\end\\n\\n\\\\define omni-tag-pill-styles()\\nbackground-color:$(backgroundColor)$;\\nfill:$(svgColour)$;\\ncolor:$(foregroundColor)$;\\n\\\\end\\n\"\n },\n \"$:/plugins/can/tagbrowse/macros/tagbrowse\": {\n \"title\": \"$:/plugins/can/tagbrowse/macros/tagbrowse\",\n \"created\": \"20200817151953467\",\n \"tags\": \"$:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define tagbrowse()\\n<$set name=\\\"setsingleormultito\\\" filter=\\\"[singleormulti[single]]\\\" value=\\\"multi\\\" emptyValue=\\\"single\\\">\\n<$set name=\\\"singleclass\\\" filter=\\\"[singleormulti[single]]\\\"\\nvalue=\\\"can-button selected\\\" emptyValue=\\\"can-button\\\">\\n<div class=\\\"can-browse-container\\\">\\n <div class=\\\"can-rowflex-l\\\" >\\n <h2>Select tags to filter by:</h2>\\n <div class=\\\"can-vert-flex\\\">\\n <<selector-filter-buttons>>\\n <<selector-util-buttons>>\\n </div>\\n <div class=\\\"can-horiz-flex\\\">\\n <!--check singleormulti: {{!!singleormulti}} <br>\\n check singleclass: <<singleclass>> <br>\\n check setsingleormultito: <<setsingleormultito>> <br> -->\\n <$macrocall $name=\\\"tagbrowselist\\\" singlemode={{!!singleormulti}}/>\\n </div>\\n </div>\\n <div class=\\\"can-rowflex-r\\\">\\n <<filterbytags>>\\n </div>\\n</div>\\n</$set></$set>\\n\\\\end\\n\"\n },\n \"$:/plugins/can/tagbrowse/macros/tagbrowseredundant\": {\n \"title\": \"$:/plugins/can/tagbrowse/macros/tagbrowseredundant\",\n \"created\": \"20200817151953467\",\n \"singleormulti\": \"multi\",\n \"modified\": \"20200817152818725\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define tagbrowse()\\n<$set name=\\\"setto\\\" filter=\\\"[singleormulti[single]]\\\" value=\\\"\\\" emptyValue=\\\"single\\\">\\n<$set name=\\\"singleclass\\\" filter=\\\"[singleormulti[single]]\\\"\\nvalue=\\\"can-button selected\\\" emptyValue=\\\"can-button\\\">\\n \\n<div class=\\\"can-browse-container\\\">\\n <div class=\\\"can-rowflex-l\\\" >\\n <h2>Select tags to filter by:</h2>\\n <div class=\\\"can-vert-flex\\\">\\n <<selector-filter-buttons>>\\n <<selector-util-buttons>>\\n </div>\\n <div class=\\\"can-horiz-flex\\\">\\n <$macrocall $name=\\\"tagbrowselist\\\" singlemode={{!!singleormulti}}/>\\n </div>\\n </div>\\n <div class=\\\"can-rowflex-r\\\">\\n <<filterbytags>>\\n </div>\\n</div>\\n</$set></$set></$set>\\n\\\\end\\n\"\n },\n \"$:/plugins/can/tagbrowse/macros/tagselection\": {\n \"title\": \"$:/plugins/can/tagbrowse/macros/tagselection\",\n \"tags\": \"[[Filter by tag macro]] can $:/tags/Macro\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define sorted() [$(filter)$sort[]]\\n\\n\\\\define addaction() <$action-listops $tiddler=<<targetTiddler>> $field='listfilterlist' $subfilter=[all[current]]/><$action-listops $tiddler=<<targetTiddler>> $field='excludetags' $subfilter=<<removesubfilter>>/>\\n\\n\\\\define removeaction() <$action-listops $tiddler=<<targetTiddler>> $field='listfilterlist' $subfilter=<<removesubfilter>>/>\\n\\n\\\\define replace-action() <$action-listops $tiddler=<<targetTiddler>> $field='listfilterlist' $filter=[all[current]]/><$action-listops $tiddler=<<targetTiddler>> $field='excludetags' $subfilter=<<removesubfilter>>/>\\n\\n\\\\define add-to-undesired-tags() <$action-listops $tiddler=<<targetTiddler>> $field='excludetags' $subfilter=[all[current]]/><$action-listops $tiddler=<<targetTiddler>> $field='listfilterlist' $subfilter=<<removesubfilter>>/>\\n\\n\\n\\\\define tagbrowselist(targetTiddler singlemode filterParam)\\n<$set name=\\\"targetTiddler\\\" value=<<__targetTiddler__>> emptyValue=<<currentTiddler>> >\\n<$set name=\\\"filter\\\" value=<<__filterParam__>> emptyValue={{$(targetTiddler)$!!selector-filter}}>\\n<$vars \\n condfilter=\\\"[<targetTiddler>contains:listfilterlist<currentTiddler>]\\\"\\n removesubfilter=\\\"-[all[current]]\\\"\\n svgcol=#aa5555\\n>\\n<$set name=\\\"choosemode\\\" filter=\\\"[[$singlemode$]match[single]]\\\" value=\\\"tagpills-singlemode\\\" emptyValue=\\\"tagpills-multimode\\\" >\\n <$list filter=<<sorted>> >\\n <$set name=\\\"col\\\" filter=<<condfilter>> value=#555599 emptyValue=#999999>\\n <$macrocall $name=<<choosemode>> />\\n </$set>\\n </$list>\\n</$set></$vars></$set></$set>\\n\\\\end\\n\\n\\\\define tagpills-singlemode()\\n <$macrocall $name=\\\"tagbrowse-tag-pill-body\\\" tag=<<currentTiddler>> colour=<<col>> icon={{!!icon}} palette={{$:/palette}} element-tag=\\\"\\\"\\\"$button\\\"\\\"\\\" element-attributes=\\\"\\\"\\\"tag='span'\\\"\\\"\\\" actions=\\\"<<replace-action>>\\\" svgcol=<<svgcol>>/> \\n\\\\end\\n\\n\\\\define tagpills-multimode()\\n<$set name=\\\"multi-action\\\" filter=<<condfilter>> value=\\\"<<removeaction>>\\\" emptyValue=\\\"<<addaction>>\\\">\\n <$macrocall $name=\\\"tagbrowse-tag-pill-body\\\" tag=<<currentTiddler>> colour=<<col>> icon={{!!icon}} palette={{$:/palette}} element-tag=\\\"\\\"\\\"$button\\\"\\\"\\\" element-attributes=\\\"\\\"\\\"tag='span'\\\"\\\"\\\" actions=<<multi-action>> svgcol=<<svgcol>>/> \\n</$set>\\n\\\\end\\n\"\n },\n \"$:/plugins/can/tagbrowse/readme\": {\n \"title\": \"$:/plugins/can/tagbrowse/readme\",\n \"caption\": \"readme\",\n \"text\": \"@@background: #ffdd66;font-weight:bold;This is a plugin I wrote for myself, and it has not been extensively tested. It may also change. Back up your data, and use at your own risk!@@\\n\\nThe ''tagbrowse'' plugin allows listing of tiddlers by combinations of tags, selected visually from a tag list.\"\n },\n \"$:/plugins/can/tagbrowse/stylesheet\": {\n \"title\": \"$:/plugins/can/tagbrowse/stylesheet\",\n \"created\": \"20200526163758304\",\n \"creator\": \"chris\",\n \"modified\": \"20200817145936996\",\n \"modifier\": \"chris\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"div.can-tool-row {display: flex; flex-wrap: wrap; justify-content: flex-end; margin: 1em 0;}\\n\\ndiv.can-rowflex-l { max-width: 50%; margin-right: 2em; } \\n\\ndiv.can-rowflex-r { flex: 1 0.4 auto;}\\n\\n.can-browse-container { display: flex; flex-direction: row;}\\n\\n.can-horiz-flex { display: flex; flex-direction: row; flex-wrap: wrap;}\\n\\n.can-vert-flex { display: flex; flex-direction: column; align-items: end;}\\n\\nbutton.can-button {\\n color: #888888;\\n background: none;\\n border: 0.6px solid #aaa;\\n border-radius: 3px;\\n margin: 0.2em;\\n}\\n\\nbutton.can-button.selected { \\n color: #6633dd; \\n background: #ccccff;\\n}\\n\\n.tc-tag-label.can-tags-sml {\\n font-size: 0.7em;\\n}\\n\\n\\n.omni-pill {\\n margin: 0.05em 0.1em;\\n display: flex;\\n flex-direction: row;\\n border: none;\\n font-size: 0.7em;\\n font-weight: 400;\\n line-height: 1.2em;\\n white-space: nowrap;\\n vertical-align: baseline;\\n \\n}\\n\\n.omni-pill-lhs {\\nborder-radius: 1em 0 0 1em;\\nmargin-right: 0;\\n display: inline-block;\\n padding: 0.16em 0.2em 0.16em 0.7em;\\n \\n}\\n\\n.omni-pill-rhs {\\n flex-shrink: 0;\\nborder-radius: 0 1em 1em 0;\\nmargin-left: 0;\\nborder: none;\\n display: inline-block;\\n padding: 0.16em 0.7em 0.16em 0.4em;\\n}\\n\\n.omni-pill-rhs svg {\\n width: 0.7em;\\n height: 0.7em;\\n}\\n\"\n },\n \"$:/templates/can/titlewithtags\": {\n \"title\": \"$:/templates/can/titlewithtags\",\n \"created\": \"20200529015419596\",\n \"creator\": \"chris\",\n \"modified\": \"20200817202737359\",\n \"modifier\": \"chris\",\n \"tags\": \"[[Filter by tag macro]]\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define listtags() \\n<$list filter=\\\"[all[current]tags[]]\\\">\\n<span class=\\\"tc-tag-label can-tags-sml\\\"><$view field=title/></span>\\n</$list>\\n\\\\end\\n\\n<$link><$view field=title/>\\n</$link><<listtags>><br>\"\n }\n }\n}"},"$:/plugins/tiddlywiki/async":{"title":"$:/plugins/tiddlywiki/async","name":"Async","description":"async.js library","author":"Caolan McMahon","list":"readme license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/async/async.js\": {\n \"text\": \"!function(){function n(){}function t(n){return n}function e(n){return!!n}function r(n){return!n}function u(n){return function(){if(null===n)throw new Error(\\\"Callback was already called.\\\");n.apply(this,arguments),n=null}}function i(n){return function(){null!==n&&(n.apply(this,arguments),n=null)}}function o(n){return M(n)||\\\"number\\\"==typeof n.length&&n.length>=0&&n.length%1===0}function c(n,t){for(var e=-1,r=n.length;++e<r;)t(n[e],e,n)}function a(n,t){for(var e=-1,r=n.length,u=Array(r);++e<r;)u[e]=t(n[e],e,n);return u}function f(n){return a(Array(n),function(n,t){return t})}function l(n,t,e){return c(n,function(n,r,u){e=t(e,n,r,u)}),e}function s(n,t){c(W(n),function(e){t(n[e],e)})}function p(n,t){for(var e=0;e<n.length;e++)if(n[e]===t)return e;return-1}function h(n){var t,e,r=-1;return o(n)?(t=n.length,function(){return r++,t>r?r:null}):(e=W(n),t=e.length,function(){return r++,t>r?e[r]:null})}function m(n,t){return t=null==t?n.length-1:+t,function(){for(var e=Math.max(arguments.length-t,0),r=Array(e),u=0;e>u;u++)r[u]=arguments[u+t];switch(t){case 0:return n.call(this,r);case 1:return n.call(this,arguments[0],r)}}}function y(n){return function(t,e,r){return n(t,r)}}function v(t){return function(e,r,o){o=i(o||n),e=e||[];var c=h(e);if(0>=t)return o(null);var a=!1,f=0,l=!1;!function s(){if(a&&0>=f)return o(null);for(;t>f&&!l;){var n=c();if(null===n)return a=!0,void(0>=f&&o(null));f+=1,r(e[n],n,u(function(n){f-=1,n?(o(n),l=!0):s()}))}}()}}function d(n){return function(t,e,r){return n(C.eachOf,t,e,r)}}function g(n){return function(t,e,r,u){return n(v(e),t,r,u)}}function k(n){return function(t,e,r){return n(C.eachOfSeries,t,e,r)}}function b(t,e,r,u){u=i(u||n),e=e||[];var c=o(e)?[]:{};t(e,function(n,t,e){r(n,function(n,r){c[t]=r,e(n)})},function(n){u(n,c)})}function w(n,t,e,r){var u=[];n(t,function(n,t,r){e(n,function(e){e&&u.push({index:t,value:n}),r()})},function(){r(a(u.sort(function(n,t){return n.index-t.index}),function(n){return n.value}))})}function O(n,t,e,r){w(n,t,function(n,t){e(n,function(n){t(!n)})},r)}function S(n,t,e){return function(r,u,i,o){function c(){o&&o(e(!1,void 0))}function a(n,r,u){return o?void i(n,function(r){o&&t(r)&&(o(e(!0,n)),o=i=!1),u()}):u()}arguments.length>3?n(r,u,a,c):(o=i,i=u,n(r,a,c))}}function E(n,t){return t}function L(t,e,r){r=r||n;var u=o(e)?[]:{};t(e,function(n,t,e){n(m(function(n,r){r.length<=1&&(r=r[0]),u[t]=r,e(n)}))},function(n){r(n,u)})}function I(n,t,e,r){var u=[];n(t,function(n,t,r){e(n,function(n,t){u=u.concat(t||[]),r(n)})},function(n){r(n,u)})}function x(t,e,r){function i(t,e,r,u){if(null!=u&&\\\"function\\\"!=typeof u)throw new Error(\\\"task callback must be a function\\\");return t.started=!0,M(e)||(e=[e]),0===e.length&&t.idle()?C.setImmediate(function(){t.drain()}):(c(e,function(e){var i={data:e,callback:u||n};r?t.tasks.unshift(i):t.tasks.push(i),t.tasks.length===t.concurrency&&t.saturated()}),void C.setImmediate(t.process))}function o(n,t){return function(){f-=1;var e=!1,r=arguments;c(t,function(n){c(l,function(t,r){t!==n||e||(l.splice(r,1),e=!0)}),n.callback.apply(n,r)}),n.tasks.length+f===0&&n.drain(),n.process()}}if(null==e)e=1;else if(0===e)throw new Error(\\\"Concurrency must not be zero\\\");var f=0,l=[],s={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(n,t){i(s,n,!1,t)},kill:function(){s.drain=n,s.tasks=[]},unshift:function(n,t){i(s,n,!0,t)},process:function(){if(!s.paused&&f<s.concurrency&&s.tasks.length)for(;f<s.concurrency&&s.tasks.length;){var n=s.payload?s.tasks.splice(0,s.payload):s.tasks.splice(0,s.tasks.length),e=a(n,function(n){return n.data});0===s.tasks.length&&s.empty(),f+=1,l.push(n[0]);var r=u(o(s,n));t(e,r)}},length:function(){return s.tasks.length},running:function(){return f},workersList:function(){return l},idle:function(){return s.tasks.length+f===0},pause:function(){s.paused=!0},resume:function(){if(s.paused!==!1){s.paused=!1;for(var n=Math.min(s.concurrency,s.tasks.length),t=1;n>=t;t++)C.setImmediate(s.process)}}};return s}function j(n){return m(function(t,e){t.apply(null,e.concat([m(function(t,e){\\\"object\\\"==typeof console&&(t?console.error&&console.error(t):console[n]&&c(e,function(t){console[n](t)}))})]))})}function A(n){return function(t,e,r){n(f(t),e,r)}}function T(n){return m(function(t,e){var r=m(function(e){var r=this,u=e.pop();return n(t,function(n,t,u){n.apply(r,e.concat([u]))},u)});return e.length?r.apply(this,e):r})}function z(n){return m(function(t){var e=t.pop();t.push(function(){var n=arguments;r?C.setImmediate(function(){e.apply(null,n)}):e.apply(null,n)});var r=!0;n.apply(this,t),r=!1})}var q,C={},P=\\\"object\\\"==typeof self&&self.self===self&&self||\\\"object\\\"==typeof global&&global.global===global&&global||this;null!=P&&(q=P.async),C.noConflict=function(){return P.async=q,C};var H=Object.prototype.toString,M=Array.isArray||function(n){return\\\"[object Array]\\\"===H.call(n)},U=function(n){var t=typeof n;return\\\"function\\\"===t||\\\"object\\\"===t&&!!n},W=Object.keys||function(n){var t=[];for(var e in n)n.hasOwnProperty(e)&&t.push(e);return t},B=\\\"function\\\"==typeof setImmediate&&setImmediate,D=B?function(n){B(n)}:function(n){setTimeout(n,0)};\\\"object\\\"==typeof process&&\\\"function\\\"==typeof process.nextTick?C.nextTick=process.nextTick:C.nextTick=D,C.setImmediate=B?D:C.nextTick,C.forEach=C.each=function(n,t,e){return C.eachOf(n,y(t),e)},C.forEachSeries=C.eachSeries=function(n,t,e){return C.eachOfSeries(n,y(t),e)},C.forEachLimit=C.eachLimit=function(n,t,e,r){return v(t)(n,y(e),r)},C.forEachOf=C.eachOf=function(t,e,r){function o(n){f--,n?r(n):null===c&&0>=f&&r(null)}r=i(r||n),t=t||[];for(var c,a=h(t),f=0;null!=(c=a());)f+=1,e(t[c],c,u(o));0===f&&r(null)},C.forEachOfSeries=C.eachOfSeries=function(t,e,r){function o(){var n=!0;return null===a?r(null):(e(t[a],a,u(function(t){if(t)r(t);else{if(a=c(),null===a)return r(null);n?C.setImmediate(o):o()}})),void(n=!1))}r=i(r||n),t=t||[];var c=h(t),a=c();o()},C.forEachOfLimit=C.eachOfLimit=function(n,t,e,r){v(t)(n,e,r)},C.map=d(b),C.mapSeries=k(b),C.mapLimit=g(b),C.inject=C.foldl=C.reduce=function(n,t,e,r){C.eachOfSeries(n,function(n,r,u){e(t,n,function(n,e){t=e,u(n)})},function(n){r(n,t)})},C.foldr=C.reduceRight=function(n,e,r,u){var i=a(n,t).reverse();C.reduce(i,e,r,u)},C.transform=function(n,t,e,r){3===arguments.length&&(r=e,e=t,t=M(n)?[]:{}),C.eachOf(n,function(n,r,u){e(t,n,r,u)},function(n){r(n,t)})},C.select=C.filter=d(w),C.selectLimit=C.filterLimit=g(w),C.selectSeries=C.filterSeries=k(w),C.reject=d(O),C.rejectLimit=g(O),C.rejectSeries=k(O),C.any=C.some=S(C.eachOf,e,t),C.someLimit=S(C.eachOfLimit,e,t),C.all=C.every=S(C.eachOf,r,r),C.everyLimit=S(C.eachOfLimit,r,r),C.detect=S(C.eachOf,t,E),C.detectSeries=S(C.eachOfSeries,t,E),C.detectLimit=S(C.eachOfLimit,t,E),C.sortBy=function(n,t,e){function r(n,t){var e=n.criteria,r=t.criteria;return r>e?-1:e>r?1:0}C.map(n,function(n,e){t(n,function(t,r){t?e(t):e(null,{value:n,criteria:r})})},function(n,t){return n?e(n):void e(null,a(t.sort(r),function(n){return n.value}))})},C.auto=function(t,e,r){function u(n){d.unshift(n)}function o(n){var t=p(d,n);t>=0&&d.splice(t,1)}function a(){h--,c(d.slice(0),function(n){n()})}r||(r=e,e=null),r=i(r||n);var f=W(t),h=f.length;if(!h)return r(null);e||(e=h);var y={},v=0,d=[];u(function(){h||r(null,y)}),c(f,function(n){function i(){return e>v&&l(g,function(n,t){return n&&y.hasOwnProperty(t)},!0)&&!y.hasOwnProperty(n)}function c(){i()&&(v++,o(c),h[h.length-1](d,y))}for(var f,h=M(t[n])?t[n]:[t[n]],d=m(function(t,e){if(v--,e.length<=1&&(e=e[0]),t){var u={};s(y,function(n,t){u[t]=n}),u[n]=e,r(t,u)}else y[n]=e,C.setImmediate(a)}),g=h.slice(0,h.length-1),k=g.length;k--;){if(!(f=t[g[k]]))throw new Error(\\\"Has inexistant dependency\\\");if(M(f)&&p(f,n)>=0)throw new Error(\\\"Has cyclic dependencies\\\")}i()?(v++,h[h.length-1](d,y)):u(c)})},C.retry=function(n,t,e){function r(n,t){if(\\\"number\\\"==typeof t)n.times=parseInt(t,10)||i;else{if(\\\"object\\\"!=typeof t)throw new Error(\\\"Unsupported argument type for 'times': \\\"+typeof t);n.times=parseInt(t.times,10)||i,n.interval=parseInt(t.interval,10)||o}}function u(n,t){function e(n,e){return function(r){n(function(n,t){r(!n||e,{err:n,result:t})},t)}}function r(n){return function(t){setTimeout(function(){t(null)},n)}}for(;a.times;){var u=!(a.times-=1);c.push(e(a.task,u)),!u&&a.interval>0&&c.push(r(a.interval))}C.series(c,function(t,e){e=e[e.length-1],(n||a.callback)(e.err,e.result)})}var i=5,o=0,c=[],a={times:i,interval:o},f=arguments.length;if(1>f||f>3)throw new Error(\\\"Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)\\\");return 2>=f&&\\\"function\\\"==typeof n&&(e=t,t=n),\\\"function\\\"!=typeof n&&r(a,n),a.callback=e,a.task=t,a.callback?u():u},C.waterfall=function(t,e){function r(n){return m(function(t,u){if(t)e.apply(null,[t].concat(u));else{var i=n.next();i?u.push(r(i)):u.push(e),z(n).apply(null,u)}})}if(e=i(e||n),!M(t)){var u=new Error(\\\"First argument to waterfall must be an array of functions\\\");return e(u)}return t.length?void r(C.iterator(t))():e()},C.parallel=function(n,t){L(C.eachOf,n,t)},C.parallelLimit=function(n,t,e){L(v(t),n,e)},C.series=function(n,t){L(C.eachOfSeries,n,t)},C.iterator=function(n){function t(e){function r(){return n.length&&n[e].apply(null,arguments),r.next()}return r.next=function(){return e<n.length-1?t(e+1):null},r}return t(0)},C.apply=m(function(n,t){return m(function(e){return n.apply(null,t.concat(e))})}),C.concat=d(I),C.concatSeries=k(I),C.whilst=function(t,e,r){if(r=r||n,t()){var u=m(function(n,i){n?r(n):t.apply(this,i)?e(u):r(null)});e(u)}else r(null)},C.doWhilst=function(n,t,e){var r=0;return C.whilst(function(){return++r<=1||t.apply(this,arguments)},n,e)},C.until=function(n,t,e){return C.whilst(function(){return!n.apply(this,arguments)},t,e)},C.doUntil=function(n,t,e){return C.doWhilst(n,function(){return!t.apply(this,arguments)},e)},C.during=function(t,e,r){r=r||n;var u=m(function(n,e){n?r(n):(e.push(i),t.apply(this,e))}),i=function(n,t){n?r(n):t?e(u):r(null)};t(i)},C.doDuring=function(n,t,e){var r=0;C.during(function(n){r++<1?n(null,!0):t.apply(this,arguments)},n,e)},C.queue=function(n,t){var e=x(function(t,e){n(t[0],e)},t,1);return e},C.priorityQueue=function(t,e){function r(n,t){return n.priority-t.priority}function u(n,t,e){for(var r=-1,u=n.length-1;u>r;){var i=r+(u-r+1>>>1);e(t,n[i])>=0?r=i:u=i-1}return r}function i(t,e,i,o){if(null!=o&&\\\"function\\\"!=typeof o)throw new Error(\\\"task callback must be a function\\\");return t.started=!0,M(e)||(e=[e]),0===e.length?C.setImmediate(function(){t.drain()}):void c(e,function(e){var c={data:e,priority:i,callback:\\\"function\\\"==typeof o?o:n};t.tasks.splice(u(t.tasks,c,r)+1,0,c),t.tasks.length===t.concurrency&&t.saturated(),C.setImmediate(t.process)})}var o=C.queue(t,e);return o.push=function(n,t,e){i(o,n,t,e)},delete o.unshift,o},C.cargo=function(n,t){return x(n,1,t)},C.log=j(\\\"log\\\"),C.dir=j(\\\"dir\\\"),C.memoize=function(n,e){var r={},u={};e=e||t;var i=m(function(t){var i=t.pop(),o=e.apply(null,t);o in r?C.setImmediate(function(){i.apply(null,r[o])}):o in u?u[o].push(i):(u[o]=[i],n.apply(null,t.concat([m(function(n){r[o]=n;var t=u[o];delete u[o];for(var e=0,i=t.length;i>e;e++)t[e].apply(null,n)})])))});return i.memo=r,i.unmemoized=n,i},C.unmemoize=function(n){return function(){return(n.unmemoized||n).apply(null,arguments)}},C.times=A(C.map),C.timesSeries=A(C.mapSeries),C.timesLimit=function(n,t,e,r){return C.mapLimit(f(n),t,e,r)},C.seq=function(){var t=arguments;return m(function(e){var r=this,u=e[e.length-1];\\\"function\\\"==typeof u?e.pop():u=n,C.reduce(t,e,function(n,t,e){t.apply(r,n.concat([m(function(n,t){e(n,t)})]))},function(n,t){u.apply(r,[n].concat(t))})})},C.compose=function(){return C.seq.apply(null,Array.prototype.reverse.call(arguments))},C.applyEach=T(C.eachOf),C.applyEachSeries=T(C.eachOfSeries),C.forever=function(t,e){function r(n){return n?i(n):void o(r)}var i=u(e||n),o=z(t);r()},C.ensureAsync=z,C.constant=m(function(n){var t=[null].concat(n);return function(n){return n.apply(this,t)}}),C.wrapSync=C.asyncify=function(n){return m(function(t){var e,r=t.pop();try{e=n.apply(this,t)}catch(u){return r(u)}U(e)&&\\\"function\\\"==typeof e.then?e.then(function(n){r(null,n)})[\\\"catch\\\"](function(n){r(n.message?n:new Error(n))}):r(null,e)})},\\\"object\\\"==typeof module&&module.exports?module.exports=C:\\\"function\\\"==typeof define&&define.amd?define([],function(){return C}):P.async=C}();\\n//# sourceMappingURL=dist/async.min.map\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/async/async.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/async/license\": {\n \"text\": \"Copyright (c) 2010-2014 Caolan McMahon\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\"Software\\\"), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is\\nfurnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in\\nall copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\\nTHE SOFTWARE.\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/async/license\"\n },\n \"$:/plugins/tiddlywiki/async/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/async/readme\",\n \"text\": \"This plugin packages [[async.js|https://github.com/caolan/async]] for use by other plugins. It does not provide any end-user visible features.\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/aws":{"title":"$:/plugins/tiddlywiki/aws","name":"AWS","description":"Amazon Web Services extensions and tools","list":"readme setup commands lambda","dependents":"$:/plugins/tiddlywiki/async $:/plugins/tiddlywiki/jszip","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/aws/commands\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/commands\",\n \"text\": \"{{$:/language/Help/aws}}\\n\"\n },\n \"$:/language/Help/aws\": {\n \"title\": \"$:/language/Help/aws\",\n \"description\": \"Operations for working with Amazon Web Services\",\n \"text\": \"! Commands\\n\\nPerform operation on Amazon Web Services\\n\\n```\\n--aws <sub-command> [<parameter> ...]\\n```\\n\\n! \\\"profile\\\" subcommand\\n\\nSets the AWS credentials profile to be used for subsequent commands.\\n\\n```\\n--aws profile <profile-name>\\n```\\n\\n* ''profile-name'': AWS profile name\\n\\n! \\\"s3-load\\\" subcommand\\n\\nLoad tiddlers from files in an S3 bucket.\\n\\n```\\n--aws s3-load <region> <bucket> <filename>...\\n```\\n\\n* ''region'': AWS region\\n* ''bucket'': name of the bucket containing the files\\n* ''filename'': one or more filenames of the files to load\\n\\nThe content in the files is deserialized according to the content type reported by S3.\\n\\n! \\\"s3-savetiddler\\\" subcommand\\n\\nSave a raw tiddler to a file in an S3 bucket.\\n\\n```\\n--aws s3-savetiddler <title> <region> <bucket> <filename> <zipfilename> <savetype>\\n```\\n\\n* ''title'': title of the tiddler to save\\n* ''region'': AWS region\\n* ''bucket'': name of the bucket to save the saved file\\n* ''filename'': filename of the saved file\\n* ''zipfilename'': optional; the file will be packed into a ZIP file with the specified name\\n* ''savetype'': optional; the MIME type for the saved file (defaults to ''type'' or \\\"text/html\\\")\\n\\n! \\\"s3-savetiddlers\\\" subcommand\\n\\nSave raw tiddlers matching a filter to an S3 bucket.\\n\\n```\\n--aws s3-savetiddlers <filter> <region> <bucket> <filenamefilter> <savetypefilter>\\n```\\n\\n* ''filter'': filter identifying tiddlers to render\\n* ''region'': AWS region\\n* ''bucket'': name of the bucket to save the files\\n* ''filenamefilter'': filter for converting tiddler titles to filepaths (eg `[encodeuricomponent[]addprefix[files/]addsuffix[.html]]`)\\n* ''savetypefilter'': optional; a filter that is passed the title of the tiddler being saved and should yield the MIME type for the saved file (defaults to a filter that yields the value of the ''type'' field)\\n\\n! \\\"s3-rendertiddler\\\" subcommand\\n\\nSave the results of rendering a tiddler to a file in an S3 bucket.\\n\\n```\\n--aws s3-rendertiddler <title> <region> <bucket> <filename> <type> <template> <zipfilename> <savetype>\\n```\\n\\n* ''title'': title of the tiddler to render\\n* ''region'': AWS region\\n* ''bucket'': name of the bucket to save the rendered file\\n* ''filename'': filename of the rendered file\\n* ''type'': optional render type (defaults to \\\"text/html\\\")\\n* ''template'': optional template (defaults to directly rendering the tiddler without using a template)\\n* ''zipfilename'': optional; the file will be packed into a ZIP file with the specified name\\n* ''savetype'': optional; the MIME type for the saved file (defaults to ''type'' or \\\"text/html\\\")\\n\\n! \\\"s3-rendertiddlers\\\" subcommand\\n\\nSave the results of rendering tiddlers identified by a filter to files in an S3 bucket.\\n\\n```\\n--aws s3-rendertiddlers <filter> <template> <region> <bucket> <filenamefilter> <type> <savetypefilter>\\n```\\n\\n* ''filter'': filter identifying tiddlers to render\\n* ''template'': template for rendering each tiddler\\n* ''region'': AWS region\\n* ''bucket'': name of the bucket to save the rendered file\\n* ''filenamefilter'': filter for converting tiddler titles to filepaths (eg `[encodeuricomponent[]addprefix[files/]addsuffix[.html]]`)\\n* ''type'': optional render type (defaults to \\\"text/html\\\")\\n* ''savetypefilter'': optional; a filter that is passed the title of the tiddler being rendered and should yield the MIME type for the saved file (defaults to the value of the ''type'' field via `[is[tiddler]get[type]]`)\\n\"\n },\n \"$:/plugins/tiddlywiki/aws/lambda\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/lambda\",\n \"text\": \"! Template\\n\\nThe template [[$:/plugins/tiddlywiki/aws/lambdas/main]] transcludes everything required to render a TiddlyWiki as an AWS Lambda function.\\n\\nThe Lambda is build with this command:\\n\\n```\\ntiddlywiki editions/aws --rendertiddler $:/plugins/tiddlywiki/aws/lambdas/main index.js text/plain\\n```\\n\\nOr:\\n\\n```\\ntiddlywiki editions/aws --build lambda\\n```\\n\\n! Execution\\n\\nThe Lambda boot code looks for an array of tiddlers to load in `event.tiddlers`, and an array of commands to execute in `event.commands`. For example:\\n\\n```\\n{\\n\\t\\\"commands\\\": [\\n\\t\\t\\\"--aws\\\",\\\"s3-rendertiddler\\\",\\\"HelloThere\\\",\\\"eu-west-2\\\",\\\"my-bucket-name\\\",\\\"rendered.html\\\"\\n\\t],\\n\\t\\\"tiddlers\\\": [\\n\\t\\t{\\n\\t\\t\\t\\\"title\\\": \\\"HelloThere\\\",\\n\\t\\t\\t\\\"text\\\": \\\"Hello from {{Platform}}.\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"title\\\": \\\"Platform\\\",\\n\\t\\t\\t\\\"text\\\": \\\"TiddlyWiki\\\"\\n\\t\\t}\\n\\t]\\n}\\n\\n```\\n\\nThe event data can optionally be compressed by passing a JSON object with a single property `compressed` that contains a base64 encoded GZIP compressed representation of the JSON payload data. For example:\\n\\n```\\nvar strPayload = JSON.stringify(payload);\\nrequire(\\\"zlib\\\").gzip(strPayload,function(err,buff) {\\n\\tvar compressedPayload = {compressed: new Buffer(buff).toString(\\\"base64\\\")};\\n\\t// Invoke lambda with compressed payload\\n\\t...\\n});\\n```\\n\\n! Return data\\n\\nIf the Lambda function successfully executes it returns an object with the following fields:\\n\\n* ''lambda-result'': An array of `{bucketname,key}` pairs for each file written to S3 within the lambda function\\n\"\n },\n \"$:/plugins/tiddlywiki/aws/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/readme\",\n \"text\": \"This plugin provides several tools for working with Amazon Web Services:\\n\\n* Templates for saving a TiddlyWiki as a single JavaScript file in a ZIP file that can be executed as an AWS Lambda function. In this form, TiddlyWiki is a self contained single file containing both code and data, just like the standalone HTML file configuration\\n* Commands that can be used to interact with AWS services, under both the Node.js and Lambda configurations of TiddlyWiki\\n\"\n },\n \"$:/plugins/tiddlywiki/aws/setup\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/setup\",\n \"text\": \"! Introduction\\n\\n!! About Amazon Web Services\\n\\nAmazon Web Services is a collection of online APIs to services that allow cloud-based applications to be built. It is a commercial service that charges usage fees, but there is a free tier that is sufficient for most personal use.\\n\\nAn ordinary Amazon account can be used to sign into the AWS console at https://aws.amazon.com/console/. Here you can see a menu of the available services and use interactive dashboards to inspect and configure resources.\\n\\n! Getting Started\\n\\n!! Setup Amazon Credentials\\n\\nThe main root account has super-user privileges across all the resources owned by the account. The Identity and Access Management (IAM) service allows subsidiary user accounts to be created for specific tasks. Here we create a new user account for running TiddlyWiki code:\\n\\n# Visit the AWS console at https://aws.amazon.com/console/\\n# Choose ''IAM'' from the ''Services'' dropdown menu\\n# Choose ''Users'' from the left hand menu\\n# Click the ''Create New Users'' button\\n# Enter ''tiddlywiki'' as the first user name\\n# Check the box labelled //Generate an access key for each user//\\n# Click the ''Create'' button\\n# Click the ''Download Credentials'' button to download a file called \\\"credentials.csv\\\"\\n#* The file contains three values:\\n#*# ''User Name'': Username for\\n#*# ''Password'': \\n#*# ''Direct Signin Link'': \\n# Create a text file with the following content:\\n#> <div><pre><code>[default]\\naws_access_key_id = <your access key>\\naws_secret_access_key = <your secret access key>\\n</code></pre></div>\\n# Save the file as `~/.aws/credentials` (Mac/Linux) or `?` (Windows)\\n\\n!! Download or Clone TiddlyWiki Repository\\n\\nEven if you have already installed TiddlyWiki, you should create a new installation for working with the AWS plugin.\\n\\nVisit the TiddlyWiki5 repository at https://github.com/Jermolene/TiddlyWiki5. You can either download or clone a copy:\\n\\n* Download to get up and running quickly\\n* Clone to make it easier to upgrade in the future\\n\\n!! Install `aws-sdk`\\n\\nOpen a command terminal, switch to the directory where TiddlyWiki is installed and run the following command:\\n\\n```\\nnpm install aws-sdk\\n```\\n\"\n },\n \"$:/plugins/tiddlywiki/aws/command.js\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/command.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/aws/command.js\\ntype: application/javascript\\nmodule-type: command\\n\\n--aws command\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar async,\\n\\tawsUtils;\\n\\nexports.info = {\\n\\tname: \\\"aws\\\",\\n\\tsynchronous: false\\n};\\n\\nvar Command = function(params,commander,callback) {\\n\\tasync = require(\\\"$:/plugins/tiddlywiki/async/async.js\\\");\\n\\tawsUtils = require(\\\"$:/plugins/tiddlywiki/aws/utils.js\\\");\\n\\tthis.params = params;\\n\\tthis.commander = commander;\\n\\tthis.callback = callback;\\n};\\n\\nCommand.prototype.execute = function() {\\n\\tvar self = this,\\n\\t\\twiki = this.commander.wiki,\\n\\t\\tsubCommand = this.params[0],\\n\\t\\tfn = this.subCommands[subCommand];\\n\\tif(!fn) {\\n\\t\\treturn this.callback(\\\"AWS: Unknown subcommand\\\")\\n\\t}\\n\\tfn.bind(this)();\\n\\treturn null;\\n};\\n\\nCommand.prototype.subCommands = {};\\n\\n// Set credentials profile\\nCommand.prototype.subCommands[\\\"profile\\\"] = function() {\\n\\tvar AWS = require(\\\"aws-sdk\\\"),\\n\\t\\tprofile = this.params[1],\\n\\t\\tcredentials = new AWS.SharedIniFileCredentials({profile: profile});\\n\\tAWS.config.update({credentials: credentials});\\n\\tthis.callback(null);\\n};\\n\\n// Load tiddlers from files in an S3 bucket\\nCommand.prototype.subCommands[\\\"s3-load\\\"] = function() {\\n\\tvar self = this,\\n\\t\\twiki = this.commander.wiki,\\n\\t\\tregion = this.params[1],\\n\\t\\tbucket = this.params[2],\\n\\t\\tfilepaths = this.params.slice(3);\\n\\t// Check parameters\\n\\tif(!region || !bucket) {\\n\\t\\tself.callback(\\\"Missing parameters\\\");\\n\\t}\\n\\tasync.eachLimit(\\n\\t\\tfilepaths,\\n\\t\\t20,\\n\\t\\tfunction(filepath,callback) {\\n\\t\\t\\tawsUtils.getFile(region,bucket,filepath,function(err,data) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar tiddlers = self.commander.wiki.deserializeTiddlers(data.type,data.body,{});\\n\\t\\t\\t\\t$tw.utils.each(tiddlers,function(tiddler) {\\n\\t\\t\\t\\t\\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tcallback(null);\\n\\t\\t\\t});\\n\\t\\t},\\n\\t\\tfunction(err,results) {\\n\\t\\t\\tself.callback(err,results);\\n\\t\\t}\\n\\t);\\n\\treturn null;\\n};\\n\\n// Render a tiddler to an S3 bucket\\nCommand.prototype.subCommands[\\\"s3-rendertiddler\\\"] = function() {\\n\\tvar self = this,\\n\\t\\twiki = this.commander.wiki,\\n\\t\\ttitle = this.params[1],\\n\\t\\tregion = this.params[2],\\n\\t\\tbucket = this.params[3],\\n\\t\\tfilename = this.params[4],\\n\\t\\ttype = this.params[5] || \\\"text/html\\\",\\n\\t\\ttemplate = this.params[6],\\n\\t\\tzipfilename = this.params[7],\\n\\t\\tsaveType = this.params[8] || type,\\n\\t\\tvariables = {};\\n\\t// Check parameters\\n\\tif(!title || !region || !bucket || !filename) {\\n\\t\\tthrow \\\"Missing parameters\\\";\\n\\t}\\n\\t// Process the template if present\\n\\tif(template) {\\n\\t\\tvariables.currentTiddler = title;\\n\\t\\ttitle = template;\\n\\t}\\n\\t// Render the tiddler\\n\\tvar text = this.commander.wiki.renderTiddler(type,title,{variables: variables}),\\n\\t\\ttype = \\\"text/plain\\\",\\n\\t\\tencoding = ($tw.config.contentTypeInfo[type] || {encoding: \\\"utf8\\\"}).encoding;\\n\\t// Zip it if needed\\n\\tif(zipfilename) {\\n\\t\\tvar JSZip = require(\\\"$:/plugins/tiddlywiki/jszip/jszip.js\\\"),\\n\\t\\t\\tzip = new JSZip();\\n\\t\\tzip.file(filename,new Buffer(text,encoding));\\n\\t\\ttext = zip.generate({type: \\\"base64\\\"});\\n\\t\\ttype = \\\"application/zip\\\";\\n\\t\\tfilename = zipfilename;\\n\\t}\\n\\t// Save the file\\n\\tasync.series([\\n\\t\\tawsUtils.putFile.bind(null,region,bucket,filename,text,saveType)\\n\\t],\\n\\tfunction(err,results){\\n\\t\\tself.callback(err,results);\\n\\t});\\n\\treturn null;\\n};\\n\\nCommand.prototype.subCommands[\\\"s3-rendertiddlers\\\"] = function() {\\n\\tvar self = this,\\n\\t\\twiki = this.commander.wiki,\\n\\t\\tfilter = this.params[1],\\n\\t\\ttemplate = this.params[2],\\n\\t\\tregion = this.params[3],\\n\\t\\tbucket = this.params[4],\\n\\t\\tfilenameFilter = this.params[5],\\n\\t\\ttype = this.params[6] || \\\"text/html\\\",\\n\\t\\tsaveTypeFilter = this.params[7] || \\\"[[\\\" + type + \\\"]]\\\",\\n\\t\\ttiddlers = wiki.filterTiddlers(filter);\\n\\t// Check parameters\\n\\tif(!filter || !region || !bucket || !filenameFilter) {\\n\\t\\tthrow \\\"Missing parameters\\\";\\n\\t}\\n\\tasync.eachLimit(\\n\\t\\ttiddlers,\\n\\t\\t20,\\n\\t\\tfunction(title,callback) {\\n\\t\\t\\tvar parser = wiki.parseTiddler(template || title),\\n\\t\\t\\t\\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\\n\\t\\t\\t\\tcontainer = $tw.fakeDocument.createElement(\\\"div\\\");\\n\\t\\t\\twidgetNode.render(container,null);\\n\\t\\t\\tvar text = type === \\\"text/html\\\" ? container.innerHTML : container.textContent,\\n\\t\\t\\t\\tfilename = wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0],\\n\\t\\t\\t\\tsaveType = wiki.filterTiddlers(saveTypeFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0];\\n\\t\\t\\tawsUtils.putFile(region,bucket,filename,text,saveType,callback);\\n\\t\\t},\\n\\t\\tfunction(err,results) {\\n\\t\\t\\tself.callback(err,results);\\n\\t\\t}\\n\\t);\\n\\treturn null;\\n};\\n\\n// Save a tiddler to an S3 bucket\\nCommand.prototype.subCommands[\\\"s3-savetiddler\\\"] = function() {\\n\\tvar self = this,\\n\\t\\twiki = this.commander.wiki,\\n\\t\\ttitle = this.params[1],\\n\\t\\tregion = this.params[2],\\n\\t\\tbucket = this.params[3],\\n\\t\\tfilename = this.params[4],\\n\\t\\tzipfilename = this.params[5],\\n\\t\\tsaveType = this.params[6],\\n\\t\\ttiddler = wiki.getTiddler(title),\\n\\t\\ttext = tiddler.fields.text,\\n\\t\\ttype = tiddler.fields.type,\\n\\t\\tencoding = ($tw.config.contentTypeInfo[type] || {encoding: \\\"utf8\\\"}).encoding;\\n\\t// Check parameters\\n\\tif(!title || !region || !bucket || !filename) {\\n\\t\\tthrow \\\"Missing parameters\\\";\\n\\t}\\n\\t// Zip it if needed\\n\\tif(zipfilename) {\\n\\t\\tvar JSZip = require(\\\"$:/plugins/tiddlywiki/jszip/jszip.js\\\"),\\n\\t\\t\\tzip = new JSZip();\\n\\t\\tzip.file(filename,new Buffer(text,encoding));\\n\\t\\ttext = zip.generate({type: \\\"base64\\\"});\\n\\t\\ttype = \\\"application/zip\\\";\\n\\t\\tfilename = zipfilename;\\n\\t}\\n\\t// Save the file\\n\\tasync.series([\\n\\t\\tawsUtils.putFile.bind(null,region,bucket,filename,text,saveType || type)\\n\\t],\\n\\tfunction(err,results){\\n\\t\\tself.callback(err,results);\\n\\t});\\n\\treturn null;\\n};\\n\\n// Save a tiddler to an S3 bucket\\nCommand.prototype.subCommands[\\\"s3-savetiddlers\\\"] = function() {\\n\\tvar self = this,\\n\\t\\twiki = this.commander.wiki,\\n\\t\\tfilter = this.params[1],\\n\\t\\tregion = this.params[2],\\n\\t\\tbucket = this.params[3],\\n\\t\\tfilenameFilter = this.params[4],\\n\\t\\tsaveTypeFilter = this.params[5] || \\\"[is[tiddler]get[type]]\\\",\\n\\t\\ttiddlers = wiki.filterTiddlers(filter);\\n\\t// Check parameters\\n\\tif(!filter || !region || !bucket || !filenameFilter) {\\n\\t\\tthrow \\\"Missing parameters\\\";\\n\\t}\\n\\tasync.eachLimit(\\n\\t\\ttiddlers,\\n\\t\\t20,\\n\\t\\tfunction(title,callback) {\\n\\t\\t\\tvar tiddler = wiki.getTiddler(title);\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\tvar text = tiddler.fields.text || \\\"\\\",\\n\\t\\t\\t\\t\\ttype = tiddler.fields.type || \\\"text/vnd.tiddlywiki\\\",\\n\\t\\t\\t\\t\\tfilename = wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0],\\n\\t\\t\\t\\t\\tsaveType = wiki.filterTiddlers(saveTypeFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0];\\n\\t\\t\\t\\tawsUtils.putFile(region,bucket,filename,text,saveType || type,callback);\\t\\t\\t\\t\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tprocess.nextTick(callback,null);\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tfunction(err,results) {\\n\\t\\t\\tself.callback(err,results);\\n\\t\\t}\\n\\t);\\n\\treturn null;\\n};\\n\\nexports.Command = Command;\\n\\n})();\\n\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"command\"\n },\n \"$:/plugins/tiddlywiki/aws/init.js\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/init.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/aws/init.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nAWS initialisation\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"aws-init\\\";\\nexports.before = [\\\"startup\\\"];\\nexports.synchronous = true;\\n\\nexports.startup = function() {\\n\\tvar logger = new $tw.utils.Logger(\\\"aws\\\");\\n\\t\\tif($tw.node) {\\n\\t\\ttry {\\n\\t\\t\\trequire(\\\"aws-sdk\\\");\\n\\t\\t} catch(e) {\\n\\t\\t\\tlogger.alert(\\\"The plugin 'tiddlywiki/aws' requires the aws-sdk to be installed. Run 'npm install aws-sdk' in the root of the TiddlyWiki repository\\\");\\n\\t\\t}\\n\\t}\\n\\tif(!$tw.modules.titles[\\\"$:/plugins/tiddlywiki/async/async.js\\\"]) {\\n\\t\\tlogger.alert(\\\"The plugin 'tiddlywiki/aws' requires the 'tiddlywiki/async' plugin to be installed\\\");\\n\\t}\\n\\tif(!$tw.modules.titles[\\\"$:/plugins/tiddlywiki/jszip/jszip.js\\\"]) {\\n\\t\\tlogger.alert(\\\"The plugin 'tiddlywiki/aws' requires the 'tiddlywiki/jszip' plugin to be installed\\\");\\n\\t}\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/aws/utils.js\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/utils.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/aws/utils.js\\ntype: application/javascript\\nmodule-type: library\\n\\nAWS utility functions\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n/*\\nGet a file from an S3 bucket\\nregion:\\nbucketName:\\ntitle:\\ncallback: invoked with (err,{body:,type:}\\n*/\\nfunction getFile(region,bucketName,title,callback) {\\n\\t// console.log(\\\"Reading file from S3\\\",bucketName,title);\\n\\tvar AWS = require(\\\"aws-sdk\\\"),\\n\\t\\ts3bucket = new AWS.S3({\\n\\t\\t\\tregion: region\\n\\t\\t}),\\n\\t\\tparams = {\\n\\t\\t\\tBucket: bucketName,\\n\\t\\t\\tKey: title\\n\\t\\t};\\n\\ts3bucket.getObject(params,function(err,data) {\\n\\t\\tif(err) {\\n\\t\\t\\treturn callback(err);\\n\\t\\t}\\n\\t\\tcallback(null,{\\n\\t\\t\\tetag: data.ETag,\\n\\t\\t\\tversion: data.VersionId,\\n\\t\\t\\ttype: data.ContentType,\\n\\t\\t\\tbody: data.Body.toString()\\n\\t\\t});\\n\\t});\\n}\\n\\n/*\\nPut a file to an S3 bucket\\n*/\\nfunction putFile(region,bucketName,title,text,type,callback) {\\n\\t// Log the write\\n\\tif($tw[\\\"lambda-result\\\"]) {\\n\\t\\t$tw[\\\"lambda-result\\\"][\\\"files-written\\\"].push({bucket: bucketName,key: title});\\t\\t\\n\\t}\\n\\t// console.log(\\\"Writing file to S3\\\",bucketName,title,type);\\n\\tvar AWS = require(\\\"aws-sdk\\\"),\\n\\t\\ts3bucket = new AWS.S3({\\n\\t\\t\\tregion: region\\n\\t\\t}),\\n\\t\\tencoding = ($tw.config.contentTypeInfo[type] || {encoding: \\\"utf8\\\"}).encoding,\\n\\t\\tparams = {\\n\\t\\t\\tBucket: bucketName,\\n\\t\\t\\tKey: title,\\n\\t\\t\\tBody: new Buffer(text,encoding),\\n\\t\\t\\tContentType: type || \\\"text/plain\\\"\\n\\t\\t};\\n\\ts3bucket.upload(params,function(err,data) {\\n\\t\\tif(err) {\\n\\t\\t\\treturn callback(err + \\\" (writing \\\" + title + \\\" to \\\" + bucketName + \\\", type \\\" + type + \\\")\\\");\\n\\t\\t}\\n\\t\\tcallback(null,data);\\n\\t});\\n}\\n\\nexports.putFile = putFile;\\nexports.getFile = getFile;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/aws/lambda/handler\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/lambda/handler\",\n \"type\": \"text/plain\",\n \"text\": \"/*\\nTiddlyWiki for AWS\\n*/\\n\\nexports.handler = function(event,context,callback) {\\n\\t// Initialise the boot prefix\\n\\tglobal.$tw = _bootprefix();\\n\\t// Initialise the returned results\\n\\t$tw[\\\"lambda-result\\\"] = {\\n\\t\\t\\\"files-written\\\": []\\n\\t};\\n\\t// Some default package info\\n\\t$tw.packageInfo = lambdaPackageInfo;\\n\\t// Load any tiddlers from the package\\n\\t$tw.preloadTiddlerArray(lambdaTiddlers);\\n\\t// Decompress the event data if required\\n\\tif(typeof event.compressed === \\\"string\\\") {\\n\\t\\trequire(\\\"zlib\\\").gunzip(Buffer.from(event.compressed,\\\"base64\\\"),function(err,buff) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tboot(JSON.parse(buff.toString()));\\n\\t });\\n\\t} else {\\n\\t\\tboot(event);\\n\\t}\\n\\n\\tfunction boot(event) {\\n\\t\\t// Load any tiddlers from the event\\n\\t\\tif(event.tiddlers) {\\n\\t\\t\\t$tw.preloadTiddlerArray(event.tiddlers);\\t\\n\\t\\t}\\n\\t\\t// Load the commands from the event\\n\\t\\t$tw.boot.argv = (event.commands || []).slice(0);\\n\\t\\t// Boot the TW5 app\\n\\t\\t_boot($tw);\\n\\t\\t$tw.boot.boot(function() {\\n\\t\\t\\tcallback(null,$tw[\\\"lambda-result\\\"]);\\n\\t\\t});\\t\\n\\t}\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/aws/lambdas/main\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/lambdas/main\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline\\n\\n/*\\n{{ $:/core/copyright.txt }}\\n*/\\n\\n{{$:/plugins/tiddlywiki/aws/lambda/tiddlers}}\\n\\n{{$:/plugins/tiddlywiki/aws/lambda/sjcl}}\\n\\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\\n\\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\\n\\n{{$:/plugins/tiddlywiki/aws/lambda/package-info}}\\n\\n{{ $:/plugins/tiddlywiki/aws/lambda/handler ||$:/core/templates/plain-text-tiddler}}\\n\"\n },\n \"$:/plugins/tiddlywiki/aws/lambda/package-info\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/lambda/package-info\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline codeinline macrocallinline\\n`\\nvar lambdaPackageInfo = {\\n\\t\\\"version\\\": \\\"`<<version>>`\\\",\\n\\t\\\"engines\\\": {\\n\\t\\t\\\"node\\\": \\\">=0.8.2\\\"\\n\\t}\\n};\\n`\\n\"\n },\n \"$:/plugins/tiddlywiki/aws/lambda/sjcl\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/lambda/sjcl\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline\\n\\n(function() {\\n\\nvar module;\\n\\nglobal.sjcl = (function() {\\n\\n{{ $:/library/sjcl.js ||$:/core/templates/plain-text-tiddler}}\\n\\nreturn sjcl;\\n\\n})();\\n\\n})();\\n\"\n },\n \"$:/plugins/tiddlywiki/aws/lambda/tiddlers\": {\n \"title\": \"$:/plugins/tiddlywiki/aws/lambda/tiddlers\",\n \"text\": \"`\\nvar lambdaTiddlers = `<$text text=<<jsontiddlers \\\"[all[tiddlers]]\\\">>/>`;\\n`\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/bibtex":{"title":"$:/plugins/tiddlywiki/bibtex","name":"BibTeX","description":"BibTeX importer","author":"Henrik Muehe and Mikola Lysenko","list":"readme license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/bibtex/deserializer.js\": {\n \"title\": \"$:/plugins/tiddlywiki/bibtex/deserializer.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/bibtex/deserializer.js\\ntype: application/javascript\\nmodule-type: tiddlerdeserializer\\n\\nXLSX file deserializer\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar bibtexParse = require(\\\"$:/plugins/tiddlywiki/bibtex/bibtexParse.js\\\");\\n\\n/*\\nParse an XLSX file into tiddlers\\n*/\\nexports[\\\"application/x-bibtex\\\"] = function(text,fields) {\\n\\tvar data,\\n\\t\\tresults = [];\\n\\t// Parse the text\\n\\ttry {\\n\\t\\tdata = bibtexParse.toJSON(text)\\n\\t} catch(ex) {\\n\\t\\tdata = ex.toString();\\n\\t}\\n\\tif(typeof data === \\\"string\\\") {\\n\\t\\treturn [{\\n\\t\\t\\ttitle: \\\"BibTeX import error: \\\" + data,\\n\\t\\t}];\\n\\t}\\n\\t// Convert each entry\\n\\t$tw.utils.each(data,function(entry) {\\n\\t\\tvar fields = {\\n\\t\\t\\ttitle: entry.citationKey,\\n\\t\\t\\t\\\"bibtex-entry-type\\\": entry.entryType\\n\\t\\t};\\n\\t\\t$tw.utils.each(entry.entryTags,function(value,name) {\\n\\t\\t\\tfields[\\\"bibtex-\\\" + name] = value;\\n\\t\\t});\\n\\t\\tresults.push(fields);\\n\\t});\\n\\t// Return the output tiddlers\\n\\treturn results;\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"tiddlerdeserializer\"\n },\n \"$:/plugins/tiddlywiki/bibtex/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/bibtex/readme\",\n \"text\": \"The BibTeX plugin provides a deserializer that can convert bibliographic entries in `.bib` files into individual tiddlers.\\n\\nYou can use it in the browser by dragging and dropping a `.bib` file into the TiddlyWiki window. Under Node.js, use the `--load` command to load a `.bib` file.\\n\\nThe conversion is as follows:\\n\\n* `title` comes from citationKey\\n* `bibtex-entry-type` comes from entryType\\n* all `entryTags` are assigned to fields with the prefix `bibtex-`\\n\\nThe BibTeX plugin is based on the library [[bibtexParseJs by Henrik Muehe and Mikola Lysenko|https://github.com/ORCID/bibtexParseJs]].\\n\"\n },\n \"$:/plugins/tiddlywiki/bibtex/bibtexParse.js\": {\n \"text\": \"/* start bibtexParse 0.0.22 */\\n\\n//Original work by Henrik Muehe (c) 2010\\n//\\n//CommonJS port by Mikola Lysenko 2013\\n//\\n//Port to Browser lib by ORCID / RCPETERS\\n//\\n//Issues:\\n//no comment handling within strings\\n//no string concatenation\\n//no variable values yet\\n//Grammar implemented here:\\n//bibtex -> (string | preamble | comment | entry)*;\\n//string -> '@STRING' '{' key_equals_value '}';\\n//preamble -> '@PREAMBLE' '{' value '}';\\n//comment -> '@COMMENT' '{' value '}';\\n//entry -> '@' key '{' key ',' key_value_list '}';\\n//key_value_list -> key_equals_value (',' key_equals_value)*;\\n//key_equals_value -> key '=' value;\\n//value -> value_quotes | value_braces | key;\\n//value_quotes -> '\\\"' .*? '\\\"'; // not quite\\n//value_braces -> '{' .*? '\\\"'; // not quite\\n(function(exports) {\\n\\n function BibtexParser() {\\n \\n this.months = [\\\"jan\\\", \\\"feb\\\", \\\"mar\\\", \\\"apr\\\", \\\"may\\\", \\\"jun\\\", \\\"jul\\\", \\\"aug\\\", \\\"sep\\\", \\\"oct\\\", \\\"nov\\\", \\\"dec\\\"];\\n this.notKey = [',','{','}',' ','='];\\n this.pos = 0;\\n this.input = \\\"\\\";\\n this.entries = new Array();\\n\\n this.currentEntry = \\\"\\\";\\n\\n this.setInput = function(t) {\\n this.input = t;\\n };\\n\\n this.getEntries = function() {\\n return this.entries;\\n };\\n\\n this.isWhitespace = function(s) {\\n return (s == ' ' || s == '\\\\r' || s == '\\\\t' || s == '\\\\n');\\n };\\n\\n this.match = function(s, canCommentOut) {\\n if (canCommentOut == undefined || canCommentOut == null)\\n canCommentOut = true;\\n this.skipWhitespace(canCommentOut);\\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\\n this.pos += s.length;\\n } else {\\n throw \\\"Token mismatch, expected \\\" + s + \\\", found \\\"\\n + this.input.substring(this.pos);\\n };\\n this.skipWhitespace(canCommentOut);\\n };\\n\\n this.tryMatch = function(s, canCommentOut) {\\n if (canCommentOut == undefined || canCommentOut == null)\\n canCommentOut = true;\\n this.skipWhitespace(canCommentOut);\\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\\n return true;\\n } else {\\n return false;\\n };\\n this.skipWhitespace(canCommentOut);\\n };\\n\\n /* when search for a match all text can be ignored, not just white space */\\n this.matchAt = function() {\\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\\n this.pos++;\\n };\\n\\n if (this.input[this.pos] == '@') {\\n return true;\\n };\\n return false;\\n };\\n\\n this.skipWhitespace = function(canCommentOut) {\\n while (this.isWhitespace(this.input[this.pos])) {\\n this.pos++;\\n };\\n if (this.input[this.pos] == \\\"%\\\" && canCommentOut == true) {\\n while (this.input[this.pos] != \\\"\\\\n\\\") {\\n this.pos++;\\n };\\n this.skipWhitespace(canCommentOut);\\n };\\n };\\n\\n this.value_braces = function() {\\n var bracecount = 0;\\n this.match(\\\"{\\\", false);\\n var start = this.pos;\\n var escaped = false;\\n while (true) {\\n if (!escaped) {\\n if (this.input[this.pos] == '}') {\\n if (bracecount > 0) {\\n bracecount--;\\n } else {\\n var end = this.pos;\\n this.match(\\\"}\\\", false);\\n return this.input.substring(start, end);\\n };\\n } else if (this.input[this.pos] == '{') {\\n bracecount++;\\n } else if (this.pos >= this.input.length - 1) {\\n throw \\\"Unterminated value\\\";\\n };\\n };\\n if (this.input[this.pos] == '\\\\\\\\' && escaped == false)\\n escaped = true;\\n else\\n escaped = false;\\n this.pos++;\\n };\\n };\\n\\n this.value_comment = function() {\\n var str = '';\\n var brcktCnt = 0;\\n while (!(this.tryMatch(\\\"}\\\", false) && brcktCnt == 0)) {\\n str = str + this.input[this.pos];\\n if (this.input[this.pos] == '{')\\n brcktCnt++;\\n if (this.input[this.pos] == '}')\\n brcktCnt--;\\n if (this.pos >= this.input.length - 1) {\\n throw \\\"Unterminated value:\\\" + this.input.substring(start);\\n };\\n this.pos++;\\n };\\n return str;\\n };\\n\\n this.value_quotes = function() {\\n this.match('\\\"', false);\\n var start = this.pos;\\n var escaped = false;\\n while (true) {\\n if (!escaped) {\\n if (this.input[this.pos] == '\\\"') {\\n var end = this.pos;\\n this.match('\\\"', false);\\n return this.input.substring(start, end);\\n } else if (this.pos >= this.input.length - 1) {\\n throw \\\"Unterminated value:\\\" + this.input.substring(start);\\n };\\n }\\n if (this.input[this.pos] == '\\\\\\\\' && escaped == false)\\n escaped = true;\\n else\\n escaped = false;\\n this.pos++;\\n };\\n };\\n\\n this.single_value = function() {\\n var start = this.pos;\\n if (this.tryMatch(\\\"{\\\")) {\\n return this.value_braces();\\n } else if (this.tryMatch('\\\"')) {\\n return this.value_quotes();\\n } else {\\n var k = this.key();\\n if (k.match(\\\"^[0-9]+$\\\"))\\n return k;\\n else if (this.months.indexOf(k.toLowerCase()) >= 0)\\n return k.toLowerCase();\\n else\\n throw \\\"Value expected:\\\" + this.input.substring(start) + ' for key: ' + k;\\n \\n };\\n };\\n\\n this.value = function() {\\n var values = [];\\n values.push(this.single_value());\\n while (this.tryMatch(\\\"#\\\")) {\\n this.match(\\\"#\\\");\\n values.push(this.single_value());\\n };\\n return values.join(\\\"\\\");\\n };\\n\\n this.key = function(optional) {\\n var start = this.pos;\\n while (true) {\\n if (this.pos >= this.input.length) {\\n throw \\\"Runaway key\\\";\\n };\\n // а-яА-Я is Cyrillic\\n //console.log(this.input[this.pos]);\\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\\n if (optional && this.input[this.pos] != ',') {\\n this.pos = start;\\n return null;\\n };\\n return this.input.substring(start, this.pos);\\n } else {\\n this.pos++;\\n \\n };\\n };\\n };\\n\\n this.key_equals_value = function() {\\n var key = this.key();\\n if (this.tryMatch(\\\"=\\\")) {\\n this.match(\\\"=\\\");\\n var val = this.value();\\n return [ key, val ];\\n } else {\\n throw \\\"... = value expected, equals sign missing:\\\"\\n + this.input.substring(this.pos);\\n };\\n };\\n\\n this.key_value_list = function() {\\n var kv = this.key_equals_value();\\n this.currentEntry['entryTags'] = {};\\n this.currentEntry['entryTags'][kv[0]] = kv[1];\\n while (this.tryMatch(\\\",\\\")) {\\n this.match(\\\",\\\");\\n // fixes problems with commas at the end of a list\\n if (this.tryMatch(\\\"}\\\")) {\\n break;\\n }\\n ;\\n kv = this.key_equals_value();\\n this.currentEntry['entryTags'][kv[0]] = kv[1];\\n };\\n };\\n\\n this.entry_body = function(d) {\\n this.currentEntry = {};\\n this.currentEntry['citationKey'] = this.key(true);\\n this.currentEntry['entryType'] = d.substring(1);\\n if (this.currentEntry['citationKey'] != null) { \\n this.match(\\\",\\\");\\n }\\n this.key_value_list();\\n this.entries.push(this.currentEntry);\\n };\\n\\n this.directive = function() {\\n this.match(\\\"@\\\");\\n return \\\"@\\\" + this.key();\\n };\\n\\n this.preamble = function() {\\n this.currentEntry = {};\\n this.currentEntry['entryType'] = 'PREAMBLE';\\n this.currentEntry['entry'] = this.value_comment();\\n this.entries.push(this.currentEntry);\\n };\\n\\n this.comment = function() {\\n this.currentEntry = {};\\n this.currentEntry['entryType'] = 'COMMENT';\\n this.currentEntry['entry'] = this.value_comment();\\n this.entries.push(this.currentEntry);\\n };\\n\\n this.entry = function(d) {\\n this.entry_body(d);\\n };\\n\\n this.alernativeCitationKey = function () {\\n this.entries.forEach(function (entry) {\\n if (!entry.citationKey && entry.entryTags) {\\n entry.citationKey = '';\\n if (entry.entryTags.author) {\\n entry.citationKey += entry.entryTags.author.split(',')[0] += ', ';\\n }\\n entry.citationKey += entry.entryTags.year;\\n }\\n });\\n }\\n\\n this.bibtex = function() {\\n while (this.matchAt()) {\\n var d = this.directive();\\n this.match(\\\"{\\\");\\n if (d == \\\"@STRING\\\") {\\n this.string();\\n } else if (d == \\\"@PREAMBLE\\\") {\\n this.preamble();\\n } else if (d == \\\"@COMMENT\\\") {\\n this.comment();\\n } else {\\n this.entry(d);\\n }\\n this.match(\\\"}\\\");\\n };\\n\\n this.alernativeCitationKey();\\n };\\n };\\n \\n exports.toJSON = function(bibtex) {\\n var b = new BibtexParser();\\n b.setInput(bibtex);\\n b.bibtex();\\n return b.entries;\\n };\\n\\n /* added during hackathon don't hate on me */\\n exports.toBibtex = function(json) {\\n var out = '';\\n for ( var i in json) {\\n out += \\\"@\\\" + json[i].entryType;\\n out += '{';\\n if (json[i].citationKey)\\n out += json[i].citationKey + ', ';\\n if (json[i].entry)\\n out += json[i].entry ;\\n if (json[i].entryTags) {\\n var tags = '';\\n for (var jdx in json[i].entryTags) {\\n if (tags.length != 0)\\n tags += ', ';\\n tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\\n }\\n out += tags;\\n }\\n out += '}\\\\n\\\\n';\\n }\\n return out;\\n \\n };\\n\\n})(typeof exports === 'undefined' ? this['bibtexParse'] = {} : exports);\\n\\n/* end bibtexParse */\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/bibtex/bibtexParse.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/bibtex/license\": {\n \"text\": \"\\nThe MIT License (MIT)\\nCopyright (c) 2013 ORCID, Inc.\\n\\nCopyright (c) 2010 Henrik Muehe\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\"Software\\\"), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is\\nfurnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in\\nall copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\\nTHE SOFTWARE.\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/bibtex/license\"\n }\n }\n}"},"$:/plugins/tiddlywiki/blog":{"title":"$:/plugins/tiddlywiki/blog","name":"Blog","description":"Blog publishing tools","list":"readme docs","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/blog/docs\": {\n \"title\": \"$:/plugins/tiddlywiki/blog/docs\",\n \"text\": \"Until there's more documentation, see an example of the use of this plugin here:\\n\\n* Blog: http://jermolene-blog.github.io/\\n* Repository: https://github.com/Jermolene-blog/blog\\n\"\n },\n \"$:/plugins/tiddlywiki/blog/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/blog/readme\",\n \"text\": \"This plugin contains tools to help publish blogs:\\n\\n* Templates and tools for building static HTML pages and posts\\n\"\n },\n \"$:/plugins/tiddlywiki/blog/templates/html-page/page\": {\n \"title\": \"$:/plugins/tiddlywiki/blog/templates/html-page/page\",\n \"text\": \"\\\\define tv-wikilink-template() posts/$uri_doubleencoded$.html\\n\\\\define tv-config-toolbar-icons() no\\n\\\\define tv-config-toolbar-text() no\\n\\\\define tv-config-toolbar-class() tc-btn-invisible\\n`<!doctype html>\\n<html>\\n<head>\\n<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=utf-8\\\" />\\n<meta name=\\\"generator\\\" content=\\\"TiddlyWiki\\\" />\\n<meta name=\\\"tiddlywiki-version\\\" content=\\\"`{{$:/core/templates/version}}`\\\" />\\n<meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n<meta name=\\\"apple-mobile-web-app-capable\\\" content=\\\"yes\\\" />\\n<meta name=\\\"apple-mobile-web-app-status-bar-style\\\" content=\\\"black-translucent\\\" />\\n<meta name=\\\"mobile-web-app-capable\\\" content=\\\"yes\\\"/>\\n<meta name=\\\"format-detection\\\" content=\\\"telephone=no\\\">\\n<link id=\\\"faviconLink\\\" rel=\\\"shortcut icon\\\" href=\\\"favicon.ico\\\">\\n<link rel=\\\"stylesheet\\\" href=\\\"static.css\\\">\\n<title>`<$transclude field=\\\"caption\\\"><$view field=\\\"title\\\"/></$transclude>: {{$:/core/wiki/title}}`</title>\\n</head>\\n<body class=\\\"tc-body\\\">\\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\\n<section class=\\\"tc-story-river\\\">\\n`<$importvariables filter=\\\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\\\">\\n<$view tiddler=\\\"$:/plugins/tiddlywiki/blog/templates/tiddler\\\" format=\\\"htmlwikified\\\"/>\\n</$importvariables>`\\n</section>\\n</body>\\n</html>\\n`\\n\"\n },\n \"$:/plugins/tiddlywiki/blog/templates/html-page/post\": {\n \"title\": \"$:/plugins/tiddlywiki/blog/templates/html-page/post\",\n \"text\": \"\\\\define tv-wikilink-template() /$uri_doubleencoded$.html\\n\\\\define tv-config-toolbar-icons() no\\n\\\\define tv-config-toolbar-text() no\\n\\\\define tv-config-toolbar-class() tc-btn-invisible\\n`<!doctype html>\\n<html>\\n<head>\\n<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=utf-8\\\" />\\n<meta name=\\\"generator\\\" content=\\\"TiddlyWiki\\\" />\\n<meta name=\\\"tiddlywiki-version\\\" content=\\\"`{{$:/core/templates/version}}`\\\" />\\n<meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n<meta name=\\\"apple-mobile-web-app-capable\\\" content=\\\"yes\\\" />\\n<meta name=\\\"apple-mobile-web-app-status-bar-style\\\" content=\\\"black-translucent\\\" />\\n<meta name=\\\"mobile-web-app-capable\\\" content=\\\"yes\\\"/>\\n<meta name=\\\"format-detection\\\" content=\\\"telephone=no\\\">\\n<link id=\\\"faviconLink\\\" rel=\\\"shortcut icon\\\" href=\\\"../favicon.ico\\\">\\n<link rel=\\\"stylesheet\\\" href=\\\"../static.css\\\">\\n<title>`<$transclude field=\\\"caption\\\"><$view field=\\\"title\\\"/></$transclude>: {{$:/core/wiki/title}}`</title>\\n</head>\\n<body class=\\\"tc-body\\\">\\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\\n<section class=\\\"tc-story-river\\\">\\n`<$importvariables filter=\\\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\\\">\\n<$view tiddler=\\\"$:/plugins/tiddlywiki/blog/templates/tiddler\\\" format=\\\"htmlwikified\\\"/>\\n<$view tiddler=\\\"$:/plugins/tiddlywiki/blog/templates/menu\\\" format=\\\"htmlwikified\\\"/>\\n</$importvariables>`\\n</section>\\n</body>\\n</html>\\n`\\n\"\n },\n \"$:/plugins/tiddlywiki/blog/templates/menu\": {\n \"title\": \"$:/plugins/tiddlywiki/blog/templates/menu\",\n \"text\": \"<div class=\\\"tc-blog-menu\\\">\\n\\n<div class=\\\"tc-blog-menu-item\\\">\\n\\n<a href=\\\"../index.html\\\">\\n\\n{{$:/core/images/home-button}}\\n\\n</a>\\n\\n</div>\\n\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/blog/templates/tiddler\": {\n \"title\": \"$:/plugins/tiddlywiki/blog/templates/tiddler\",\n \"text\": \"<div class=\\\"tc-tiddler-frame tc-tiddler-view-frame\\\">\\n\\n<div class=\\\"tc-tiddler-title\\\">\\n\\n<div class=\\\"tc-titlebar\\\">\\n\\n<h2 class=\\\"tc-title\\\">\\n\\n<$transclude field=\\\"caption\\\" mode=\\\"inline\\\">\\n\\n<$view field=\\\"title\\\"/>\\n\\n</$transclude>\\n\\n</h2>\\n\\n</div>\\n\\n</div>\\n\\n<div class=\\\"tc-subtitle\\\">\\n\\n<$view field=\\\"modified\\\" format=\\\"date\\\" template=\\\"DDth MMM YYYY\\\"/>\\n\\n</div>\\n\\n<div class=\\\"tc-tiddler-body\\\">\\n\\n<$transclude/>\\n\\n</div>\\n\\n</div>\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/browser-sniff":{"title":"$:/plugins/tiddlywiki/browser-sniff","name":"Browser Sniff","description":"Browser feature detection","list":"readme usage","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/browser-sniff/sniff.js\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-sniff/sniff.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/browser-sniff/sniff.js\\ntype: application/javascript\\nmodule-type: info\\n\\nInitialise $:/info/browser tiddlers\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nexports.getInfoTiddlerFields = function() {\\n\\tvar mapBoolean = function(value) {return value ? \\\"yes\\\" : \\\"no\\\";},\\n\\t\\tinfoTiddlerFields = [];\\n\\t// Basics\\n\\tif($tw.browser) {\\n\\t\\t// Mappings from tiddler titles (prefixed with \\\"$:/info/browser/\\\") to bowser.browser property name\\n\\t\\tvar bowser = require(\\\"$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js\\\"),\\n\\t\\t\\tmappings = [\\n\\t\\t\\t\\t[\\\"name\\\",\\\"name\\\",\\\"unknown\\\"],\\n\\t\\t\\t\\t[\\\"version\\\",\\\"version\\\"],\\n\\t\\t\\t\\t[\\\"is/webkit\\\",\\\"webkit\\\"],\\n\\t\\t\\t\\t[\\\"is/gecko\\\",\\\"gecko\\\"],\\n\\t\\t\\t\\t[\\\"is/chrome\\\",\\\"chrome\\\"],\\n\\t\\t\\t\\t[\\\"is/firefox\\\",\\\"firefox\\\"],\\n\\t\\t\\t\\t[\\\"is/ios\\\",\\\"ios\\\"],\\n\\t\\t\\t\\t[\\\"is/iphone\\\",\\\"iphone\\\"],\\n\\t\\t\\t\\t[\\\"is/ipad\\\",\\\"ipad\\\"],\\n\\t\\t\\t\\t[\\\"is/ipod\\\",\\\"ios\\\"],\\n\\t\\t\\t\\t[\\\"is/opera\\\",\\\"opera\\\"],\\n\\t\\t\\t\\t[\\\"is/phantomjs\\\",\\\"phantomjs\\\"],\\n\\t\\t\\t\\t[\\\"is/safari\\\",\\\"safari\\\"],\\n\\t\\t\\t\\t[\\\"is/seamonkey\\\",\\\"seamonkey\\\"],\\n\\t\\t\\t\\t[\\\"is/blackberry\\\",\\\"blackberry\\\"],\\n\\t\\t\\t\\t[\\\"is/webos\\\",\\\"webos\\\"],\\n\\t\\t\\t\\t[\\\"is/silk\\\",\\\"silk\\\"],\\n\\t\\t\\t\\t[\\\"is/bada\\\",\\\"bada\\\"],\\n\\t\\t\\t\\t[\\\"is/tizen\\\",\\\"tizen\\\"],\\n\\t\\t\\t\\t[\\\"is/sailfish\\\",\\\"sailfish\\\"],\\n\\t\\t\\t\\t[\\\"is/android\\\",\\\"android\\\"],\\n\\t\\t\\t\\t[\\\"is/windowsphone\\\",\\\"windowsphone\\\"],\\n\\t\\t\\t\\t[\\\"is/firefoxos\\\",\\\"firefoxos\\\"]\\n\\t\\t\\t];\\n\\t\\t$tw.utils.each(mappings,function(mapping) {\\n\\t\\t\\tvar value = bowser.browser[mapping[1]];\\n\\t\\t\\tif(value === undefined) {\\n\\t\\t\\t\\tvalue = mapping[2];\\n\\t\\t\\t}\\n\\t\\t\\tif(value === undefined) {\\n\\t\\t\\t\\tvalue = false;\\n\\t\\t\\t}\\n\\t\\t\\tif(typeof value === \\\"boolean\\\") {\\n\\t\\t\\t\\tvalue = mapBoolean(value);\\n\\t\\t\\t}\\n\\t\\t\\tinfoTiddlerFields.push({title: \\\"$:/info/browser/\\\" + mapping[0], text: value});\\n\\t\\t});\\n\\t\\t// Set $:/info/browser/name to the platform with some changes from Bowser\\n\\t\\tvar platform = bowser.browser.name;\\n\\t\\tif(\\\"iPad iPhone iPod\\\".split(\\\" \\\").indexOf(platform) !== -1) {\\n\\t\\t\\tplatform = \\\"iOS\\\";\\n\\t\\t}\\n\\t\\tinfoTiddlerFields.push({title: \\\"$:/info/browser/name\\\", text: platform});\\n\\t\\t// Non-bowser settings for TiddlyFox and TiddlyDesktop\\n\\t\\tvar hasTiddlyFox = !!document.getElementById(\\\"tiddlyfox-message-box\\\"), // Fails because message box is added after page load\\n\\t\\t\\tisTiddlyDesktop = false; // Can't detect it until we update TiddlyDesktop to have a distinct useragent string\\n\\t\\t//infoTiddlerFields.push({title: \\\"$:/info/browser/has/tiddlyfox\\\", text: mapBoolean(hasTiddlyFox)});\\n\\t\\t//infoTiddlerFields.push({title: \\\"$:/info/browser/is/tiddlydesktop\\\", text: mapBoolean(isTiddlyDesktop)});\\n\\t\\tif(isTiddlyDesktop) {\\n\\t\\t\\tinfoTiddlerFields.push({title: \\\"$:/info/browser/name\\\", text: \\\"TiddlyDesktop\\\"});\\n\\t\\t}\\n\\t}\\n\\treturn infoTiddlerFields;\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"info\"\n },\n \"$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js\": {\n \"text\": \"/*!\\n * Bowser - a browser detector\\n * https://github.com/ded/bowser\\n * MIT License | (c) Dustin Diaz 2014\\n */\\n\\n!function (name, definition) {\\n if (typeof module != 'undefined' && module.exports) module.exports['browser'] = definition()\\n else if (typeof define == 'function') define(definition)\\n else this[name] = definition()\\n}('bowser', function () {\\n /**\\n * See useragents.js for examples of navigator.userAgent\\n */\\n\\n var t = true\\n\\n function detect(ua) {\\n\\n function getFirstMatch(regex) {\\n var match = ua.match(regex);\\n return (match && match.length > 1 && match[1]) || '';\\n }\\n\\n var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\\n , likeAndroid = /like android/i.test(ua)\\n , android = !likeAndroid && /android/i.test(ua)\\n , versionIdentifier = getFirstMatch(/version\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n , tablet = /tablet/i.test(ua)\\n , mobile = !tablet && /[^-]mobi/i.test(ua)\\n , result\\n\\n if (/opera|opr/i.test(ua)) {\\n result = {\\n name: 'Opera'\\n , opera: t\\n , version: versionIdentifier || getFirstMatch(/(?:opera|opr)[\\\\s\\\\/](\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (/windows phone/i.test(ua)) {\\n result = {\\n name: 'Windows Phone'\\n , windowsphone: t\\n , msie: t\\n , version: getFirstMatch(/iemobile\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (/msie|trident/i.test(ua)) {\\n result = {\\n name: 'Internet Explorer'\\n , msie: t\\n , version: getFirstMatch(/(?:msie |rv:)(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (/chrome|crios|crmo/i.test(ua)) {\\n result = {\\n name: 'Chrome'\\n , chrome: t\\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (iosdevice) {\\n result = {\\n name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\\n }\\n // WTF: version is not part of user agent in web apps\\n if (versionIdentifier) {\\n result.version = versionIdentifier\\n }\\n }\\n else if (/sailfish/i.test(ua)) {\\n result = {\\n name: 'Sailfish'\\n , sailfish: t\\n , version: getFirstMatch(/sailfish\\\\s?browser\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (/seamonkey\\\\//i.test(ua)) {\\n result = {\\n name: 'SeaMonkey'\\n , seamonkey: t\\n , version: getFirstMatch(/seamonkey\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (/firefox|iceweasel/i.test(ua)) {\\n result = {\\n name: 'Firefox'\\n , firefox: t\\n , version: getFirstMatch(/(?:firefox|iceweasel)[ \\\\/](\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n if (/\\\\((mobile|tablet);[^\\\\)]*rv:[\\\\d\\\\.]+\\\\)/i.test(ua)) {\\n result.firefoxos = t\\n }\\n }\\n else if (/silk/i.test(ua)) {\\n result = {\\n name: 'Amazon Silk'\\n , silk: t\\n , version : getFirstMatch(/silk\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (android) {\\n result = {\\n name: 'Android'\\n , version: versionIdentifier\\n }\\n }\\n else if (/phantom/i.test(ua)) {\\n result = {\\n name: 'PhantomJS'\\n , phantom: t\\n , version: getFirstMatch(/phantomjs\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (/blackberry|\\\\bbb\\\\d+/i.test(ua) || /rim\\\\stablet/i.test(ua)) {\\n result = {\\n name: 'BlackBerry'\\n , blackberry: t\\n , version: versionIdentifier || getFirstMatch(/blackberry[\\\\d]+\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n }\\n else if (/(web|hpw)os/i.test(ua)) {\\n result = {\\n name: 'WebOS'\\n , webos: t\\n , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n };\\n /touchpad\\\\//i.test(ua) && (result.touchpad = t)\\n }\\n else if (/bada/i.test(ua)) {\\n result = {\\n name: 'Bada'\\n , bada: t\\n , version: getFirstMatch(/dolfin\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n };\\n }\\n else if (/tizen/i.test(ua)) {\\n result = {\\n name: 'Tizen'\\n , tizen: t\\n , version: getFirstMatch(/(?:tizen\\\\s?)?browser\\\\/(\\\\d+(\\\\.\\\\d+)?)/i) || versionIdentifier\\n };\\n }\\n else if (/safari/i.test(ua)) {\\n result = {\\n name: 'Safari'\\n , safari: t\\n , version: versionIdentifier\\n }\\n }\\n else result = {}\\n\\n // set webkit or gecko flag for browsers based on these engines\\n if (/(apple)?webkit/i.test(ua)) {\\n result.name = result.name || \\\"Webkit\\\"\\n result.webkit = t\\n if (!result.version && versionIdentifier) {\\n result.version = versionIdentifier\\n }\\n } else if (!result.opera && /gecko\\\\//i.test(ua)) {\\n result.name = result.name || \\\"Gecko\\\"\\n result.gecko = t\\n result.version = result.version || getFirstMatch(/gecko\\\\/(\\\\d+(\\\\.\\\\d+)?)/i)\\n }\\n\\n // set OS flags for platforms that have multiple browsers\\n if (android || result.silk) {\\n result.android = t\\n } else if (iosdevice) {\\n result[iosdevice] = t\\n result.ios = t\\n }\\n\\n // OS version extraction\\n var osVersion = '';\\n if (iosdevice) {\\n osVersion = getFirstMatch(/os (\\\\d+([_\\\\s]\\\\d+)*) like mac os x/i);\\n osVersion = osVersion.replace(/[_\\\\s]/g, '.');\\n } else if (android) {\\n osVersion = getFirstMatch(/android[ \\\\/-](\\\\d+(\\\\.\\\\d+)*)/i);\\n } else if (result.windowsphone) {\\n osVersion = getFirstMatch(/windows phone (?:os)?\\\\s?(\\\\d+(\\\\.\\\\d+)*)/i);\\n } else if (result.webos) {\\n osVersion = getFirstMatch(/(?:web|hpw)os\\\\/(\\\\d+(\\\\.\\\\d+)*)/i);\\n } else if (result.blackberry) {\\n osVersion = getFirstMatch(/rim\\\\stablet\\\\sos\\\\s(\\\\d+(\\\\.\\\\d+)*)/i);\\n } else if (result.bada) {\\n osVersion = getFirstMatch(/bada\\\\/(\\\\d+(\\\\.\\\\d+)*)/i);\\n } else if (result.tizen) {\\n osVersion = getFirstMatch(/tizen[\\\\/\\\\s](\\\\d+(\\\\.\\\\d+)*)/i);\\n }\\n if (osVersion) {\\n result.osversion = osVersion;\\n }\\n\\n // device type extraction\\n var osMajorVersion = osVersion.split('.')[0];\\n if (tablet || iosdevice == 'ipad' || (android && (osMajorVersion == 3 || (osMajorVersion == 4 && !mobile))) || result.silk) {\\n result.tablet = t\\n } else if (mobile || iosdevice == 'iphone' || iosdevice == 'ipod' || android || result.blackberry || result.webos || result.bada) {\\n result.mobile = t\\n }\\n\\n // Graded Browser Support\\n // http://developer.yahoo.com/yui/articles/gbs\\n if ((result.msie && result.version >= 10) ||\\n (result.chrome && result.version >= 20) ||\\n (result.firefox && result.version >= 20.0) ||\\n (result.safari && result.version >= 6) ||\\n (result.opera && result.version >= 10.0) ||\\n (result.ios && result.osversion && result.osversion.split(\\\".\\\")[0] >= 6)\\n ) {\\n result.a = t;\\n }\\n else if ((result.msie && result.version < 10) ||\\n (result.chrome && result.version < 20) ||\\n (result.firefox && result.version < 20.0) ||\\n (result.safari && result.version < 6) ||\\n (result.opera && result.version < 10.0) ||\\n (result.ios && result.osversion && result.osversion.split(\\\".\\\")[0] < 6)\\n ) {\\n result.c = t\\n } else result.x = t\\n\\n return result\\n }\\n\\n var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '')\\n\\n\\n /*\\n * Set our detect method to the main bowser object so we can\\n * reuse it to test other user agents.\\n * This is needed to implement future tests.\\n */\\n bowser._detect = detect;\\n\\n return bowser\\n});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/browser-sniff/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-sniff/readme\",\n \"text\": \"This plugin adds a number of `$:/info/` tiddlers containing information about the current browser.\\n\\nIt allows you to create content that is presented in a way that is responsive to different browsers.\\n\\nFor example, https://tiddlywiki.com uses this plugin to present the user with the best options for getting started depending on their browser.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/browser-sniff]]\\n\"\n },\n \"$:/plugins/tiddlywiki/browser-sniff/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-sniff/usage\",\n \"text\": \"! Information Tiddlers\\n\\nThe following informational tiddlers are created at startup:\\n\\n|!Title |!Description |\\n|[[$:/info/browser/is/android]] |Running on Android? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/bada]] |Running on Bada? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/blackberry]] |Running on ~BlackBerry? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/chrome]] |Running on Chrome? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/firefox]] |Running on Firefox? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/firefoxos]] |Running on Firefox OS? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/gecko]] |Running on Gecko? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/ios]] |Running on iOS (ie an iPhone, iPad or iPod)? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/ipad]] |Running on iPad? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/iphone]] |Running on iPhone? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/ipod]] |Running on iPod? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/opera]] |Running on Opera? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/phantomjs]] |Running on ~PhantomJS? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/safari]] |Running on Safari? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/sailfish]] |Running on Sailfish? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/seamonkey]] |Running on Sea Monkey? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/silk]] |Running on Amazon's Silk? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/tizen]] |Running on Tizen? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/webkit]] |Running on ~WebKit? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/webos]] |Running on ~WebOS? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/is/windowsphone]] |Running on Windows Phone? (\\\"yes\\\" or \\\"no\\\") |\\n|[[$:/info/browser/name]] |Platform name (see below) |\\n|[[$:/info/browser/version]] |Browser version |\\n\\nThe browser information is obtained with [[Bowser, a browser detector library from Dustin Diaz|https://github.com/ded/bowser/]]. Possible browser names include:\\n\\n* ''\\\"Amazon Silk\\\"''\\n* ''\\\"Android\\\"''\\n* ''\\\"Bada\\\"''\\n* ''\\\"~BlackBerry\\\"''\\n* ''\\\"Chrome\\\"''\\n* ''\\\"Firefox\\\"''\\n* ''\\\"Internet Explorer\\\"''\\n* ''\\\"iOS\\\"''\\n* ''\\\"Opera\\\"''\\n* ''\\\"~PhantomJS\\\"''\\n* ''\\\"Safari\\\"''\\n* ''\\\"Sailfish\\\"''\\n* ''\\\"~SeaMonkey\\\"''\\n* ''\\\"~TiddlyDesktop\\\"''\\n* ''\\\"Tizen\\\"''\\n* ''\\\"~WebOS\\\"''\\n* ''\\\"Windows Phone\\\"''\\n\\nNote that Bowser returns \\\"iPhone\\\", \\\"iPad\\\" and \\\"iPod\\\" as distinct values for the name of the current browser. TiddlyWiki converts all three distinct values into \\\"iOS\\\" before copying to [[$:/info/browser/name]].\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/browser-storage":{"title":"$:/plugins/tiddlywiki/browser-storage","name":"Browser Storage","description":"Local storage in the browser","list":"readme settings","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/BrowserStorage/SaveFilter\": {\n \"title\": \"$:/config/BrowserStorage/SaveFilter\",\n \"text\": \"[prefix[$:/state/]] -[prefix[$:/state/popup/]]\"\n },\n \"$:/plugins/tiddlywiki/browser-storage/icon\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-storage/icon\",\n \"tags\": \"$:/tags/Image\",\n \"text\": \"<svg class=\\\"tc-image-down-arrow tc-image-button\\\" viewBox=\\\"0 0 128 128\\\" width=\\\"22pt\\\" height=\\\"22pt\\\">\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill-rule=\\\"evenodd\\\">\\n <ellipse id=\\\"Oval\\\" cx=\\\"64\\\" cy=\\\"16\\\" rx=\\\"40\\\" ry=\\\"16\\\"></ellipse>\\n <path d=\\\"M24,96 C24,104.836556 41.90861,112 64,112 C86.09139,112 104,104.836556 104,96 L104,112 C104,120.836556 86.09139,128 64,128 C41.90861,128 24,120.836556 24,112 L24,96 Z\\\" id=\\\"Combined-Shape\\\"></path>\\n <path d=\\\"M24,72 C24,80.836556 41.90861,88 64,88 C86.09139,88 104,80.836556 104,72 L104,88 C104,96.836556 86.09139,104 64,104 C41.90861,104 24,96.836556 24,88 L24,72 Z\\\" id=\\\"Combined-Shape-Copy-16\\\"></path>\\n <path d=\\\"M24,48 C24,56.836556 41.90861,64 64,64 C86.09139,64 104,56.836556 104,48 L104,64 C104,72.836556 86.09139,80 64,80 C41.90861,80 24,72.836556 24,64 L24,48 Z\\\" id=\\\"Combined-Shape-Copy-17\\\"></path>\\n <path d=\\\"M24,24 C24,32.836556 41.90861,40 64,40 C86.09139,40 104,32.836556 104,24 L104,40 C104,48.836556 86.09139,56 64,56 C41.90861,56 24,48.836556 24,40 L24,24 Z\\\" id=\\\"Combined-Shape-Copy-18\\\"></path>\\n </g>\\n</svg>\"\n },\n \"$:/plugins/tiddlywiki/browser-storage/rawmarkup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-storage/rawmarkup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/browser-storage/rawmarkup.js\\ntype: application/javascript\\nmodule-type: library\\n\\nStartup code injected as raw markup\\n\\n\\\\*/\\n\\n(function() {\\n\\n// Need to initialise these because we run before bootprefix.js and boot.js\\n$tw = window.$tw || Object.create(null);\\n$tw.hooks = $tw.hooks || { names: {}};\\n$tw.boot = $tw.boot || {};\\n$tw.boot.preloadDirty = $tw.boot.preloadDirty || [];\\n\\n// Hook the point in the startup process when the tiddlers have been loaded but plugins not unpacked\\nvar hookName = \\\"th-boot-tiddlers-loaded\\\";\\nif(Object.prototype.hasOwnProperty.call($tw.hooks.names,hookName)) {\\n\\t$tw.hooks.names[hookName].push(hookBootTiddlersLoaded);\\n} else {\\n\\t$tw.hooks.names[hookName] = [hookBootTiddlersLoaded];\\n}\\n\\n// Load tiddlers from browser storage\\nfunction hookBootTiddlersLoaded() {\\n\\tvar url = window.location.pathname,\\n\\t\\tlog = [];\\n\\t// Check that browser storage is available\\n\\ttry {\\n\\t\\twindow.localStorage;\\n\\t} catch(e) {\\n\\t\\treturn;\\n\\t}\\n\\t// Step through each browsder storage item\\n\\tfor(var index=0; index<window.localStorage.length; index++) {\\n\\t\\tvar key = window.localStorage.key(index),\\n\\t\\t\\tparts = key.split(\\\"#\\\");\\n\\t\\t// If it's ours\\n\\t\\tif(parts[0] === \\\"tw5\\\" && parts[1] === url) {\\n\\t\\t\\t// Read it as JSON\\n\\t\\t\\tvar jsonString = window.localStorage.getItem(key),\\n\\t\\t\\t\\tjsonData;\\n\\t\\t\\tif(jsonString) {\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\tjsonData = JSON.parse(jsonString);\\n\\t\\t\\t\\t} catch(e) {}\\n\\t\\t\\t\\tif(jsonData) {\\n\\t\\t\\t\\t\\t// Convert it to a tiddler\\n\\t\\t\\t\\t\\tvar incomingTiddler = new $tw.Tiddler(jsonData);\\n\\t\\t\\t\\t\\tif(incomingTiddler) {\\n\\t\\t\\t\\t\\t\\t// Get any existing tiddler\\n\\t\\t\\t\\t\\t\\tvar title = incomingTiddler.fields.title,\\n\\t\\t\\t\\t\\t\\t\\texistingTiddler = $tw.wiki.getTiddler(title);\\n\\t\\t\\t\\t\\t\\tif(existingTiddler && existingTiddler.isEqual(incomingTiddler)) {\\n\\t\\t\\t\\t\\t\\t\\t// If the incoming tiddler is the same as the existing then we can delete the local storage version\\n\\t\\t\\t\\t\\t\\t\\twindow.localStorage.removeItem(key);\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t$tw.wiki.addTiddler(incomingTiddler);\\n\\t\\t\\t\\t\\t\\t\\tlog.push(title);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Make sure that all the tiddlers we've loaded are marked as dirty at startup\\n\\tArray.prototype.push.apply($tw.boot.preloadDirty,log);\\n\\t// Save the log\\n\\t$tw.wiki.addTiddler({\\n\\t\\ttitle: \\\"$:/temp/BrowserStorage/Log\\\",\\n\\t\\ttext: $tw.utils.stringifyList(log)\\n\\t});\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/browser-storage/rawmarkup\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-storage/rawmarkup\",\n \"tags\": \"$:/tags/RawMarkupWikified\",\n \"text\": \"`<script>`\\n{{$:/plugins/tiddlywiki/browser-storage/rawmarkup.js}}\\n`</script>`\\n\"\n },\n \"$:/plugins/tiddlywiki/browser-storage/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-storage/readme\",\n \"text\": \"This plugin enables TiddlyWiki to save tiddlers in [[browser local storage|https://en.wikipedia.org/wiki/Web_storage#localStorage]]. This means that changes are stored within the browser, and automatically re-applied any time the base wiki is reloaded.\\n\\nAt startup, the plugin reads tiddlers from local storage. Any tiddlers that are identical to those built into the file are deleted from local storage. Once the wiki is up and running, any tiddler changes are written straight to local storage.\\n\\nBrowser local storage is not a panacea for TiddlyWiki:\\n\\n* Browsers limit the amount of local storage available to a page, typically to 5 or 10MB\\n* Keeping personal data in browser local storage can lead to unexpected privacy violations\\n* Browsers reserve the right to without warning delete data stored in local storage at any time\\n* Browsers tie local storage to a URL which can lead to problems if you move a wiki to a URL previously occupied by a different wiki\\n\\nPlease use this plugin with caution. There are a number of unresolved issues and open questions:\\n\\n* Innerwikis read the local storage of their parent wikis\\n* This plugin does not interfere with the existing saver mechanism, so you'll still get warnings when refreshing the page, even if your changes are safely committed to local storage\\n* Deleted tiddlers will be restored when the wiki is refreshed\\n* There is a possibility that tiddlers might be transferred between different wikis if they are accessed via the same URL. This is particularly likely when running in local client server configuration under Node.js\\n\"\n },\n \"$:/plugins/tiddlywiki/browser-storage/settings\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-storage/settings\",\n \"text\": \"! Disable\\n\\nYou can disable the browser storage plugin:\\n\\n<$checkbox tiddler=\\\"$:/config/BrowserStorage/Enabled\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"yes\\\"> Use browser local storage</$checkbox>\\n\\n! Clear\\n\\nClick this button to clear browser storage and disable its use:\\n\\n<$button message=\\\"tm-clear-browser-storage\\\">Clear browser storage</$button>\\n\\n! Save Filter\\n\\nThis filter determines which tiddlers will be saved to local storage. By default, it contains `[prefix[$:/state/]] -[prefix[$:/state/popup/]]` to just save state tiddlers except popup state tiddlers, thus preserving selected tabs, and the open/closed status of table of contents entries. Other useful values include `[all[]]` meaning that it will attempt to save all tiddlers.\\n\\n<$link to=\\\"$:/config/BrowserStorage/SaveFilter\\\">Browser Storage Save Filter</$link>: <$edit-text tiddler=\\\"$:/config/BrowserStorage/SaveFilter\\\" default=\\\"\\\" tag=\\\"input\\\" size=\\\"50\\\"/>\\n\\n! Custom Quota Exceeded Alert\\n\\nThis setting allows a custom alert message to be displayed when an attempt to store a tiddler fails due to the storage quota being exceeded:\\n\\n<$link to=\\\"$:/config/BrowserStorage/QuotaExceededAlert\\\">Quota Exceeded Alert</$link>: <$edit-text tiddler=\\\"$:/config/BrowserStorage/QuotaExceededAlert\\\" default=\\\"\\\" tag=\\\"input\\\" size=\\\"50\\\"/>\\n\\n! Startup Log\\n\\nThe tiddler $:/temp/BrowserStorage/Log contains a log of the tiddlers that were loaded from local storage at startup:\\n\\n<<list-links \\\"[enlist{$:/temp/BrowserStorage/Log}sort[]]\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/browser-storage/startup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/browser-storage/startup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/browser-storage/startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nStartup initialisation\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"browser-storage\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.after = [\\\"load-modules\\\"];\\nexports.synchronous = true;\\n\\nvar ENABLED_TITLE = \\\"$:/config/BrowserStorage/Enabled\\\",\\n\\tSAVE_FILTER_TITLE = \\\"$:/config/BrowserStorage/SaveFilter\\\",\\n\\tQUOTA_EXCEEDED_ALERT_TITLE = \\\"$:/config/BrowserStorage/QuotaExceededAlert\\\",\\n\\tDEFAULT_QUOTA_EXCEEDED_ALERT_PREFIX = \\\"Quota exceeded attempting to store `\\\",\\n\\tDEFAULT_QUOTA_EXCEEDED_ALERT_SUFFIX = \\\"` in browser local storage\\\";\\n\\nexports.startup = function() {\\n\\tvar self = this;\\n\\t// Compute our prefix for local storage keys\\n\\tvar prefix = \\\"tw5#\\\" + window.location.pathname + \\\"#\\\";\\n\\t// Make a logger\\n\\tvar logger = new $tw.utils.Logger(\\\"browser-storage\\\",{\\n\\t\\t\\tcolour: \\\"cyan\\\"\\n\\t\\t});\\n\\t// Function to compile the filter\\n\\tvar filterFn,\\n\\t\\tcompileFilter = function() {\\n\\t\\t\\tfilterFn = $tw.wiki.compileFilter($tw.wiki.getTiddlerText(SAVE_FILTER_TITLE));\\n\\t}\\n\\tcompileFilter();\\n\\t// Listen for tm-clear-browser-storage messages\\n\\t$tw.rootWidget.addEventListener(\\\"tm-clear-browser-storage\\\",function(event) {\\n\\t\\t$tw.wiki.addTiddler({title: ENABLED_TITLE, text: \\\"no\\\"});\\n\\t\\tclearLocalStorage();\\n\\t});\\n\\t// Track tiddler changes\\n\\t$tw.wiki.addEventListener(\\\"change\\\",function(changes) {\\n\\t\\t// Bail if browser storage is disabled\\n\\t\\tif($tw.wiki.getTiddlerText(ENABLED_TITLE) === \\\"no\\\") {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t// Recompile the filter if it has changed\\n\\t\\tif(changes[SAVE_FILTER_TITLE]) {\\n\\t\\t\\tcompileFilter();\\n\\t\\t}\\n\\t\\t// Filter the changes\\n\\t\\tvar filteredChanges = filterFn.call($tw.wiki,function(iterator) {\\n\\t\\t\\t$tw.utils.each(changes,function(change,title) {\\n\\t\\t\\t\\tvar tiddler = $tw.wiki.getTiddler(title);\\n\\t\\t\\t\\titerator(tiddler,title);\\n\\t\\t\\t});\\n\\t\\t});\\n\\t\\t$tw.utils.each(filteredChanges,function(title) {\\n\\t\\t\\t// Don't try to save changes to our enabled status\\n\\t\\t\\t// (If it were enabled in the file but disabled in local storage then we might not realise that distributing a copy of the file would have local storage enabled for other users)\\n\\t\\t\\tif(title === ENABLED_TITLE) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\t// Save the tiddler\\n\\t\\t\\tsaveTiddlerToLocalStorage(title,{\\n\\t\\t\\t\\tlogger: logger,\\n\\t\\t\\t\\tprefix: prefix\\n\\t\\t\\t});\\n\\t\\t});\\n\\t});\\n};\\n\\nfunction saveTiddlerToLocalStorage(title,options) {\\n\\toptions = options || {};\\n\\t// Get the tiddler\\n\\tvar tiddler = $tw.wiki.getTiddler(title);\\n\\tif(tiddler) {\\n\\t\\tconsole.log(\\\"browser-storage: Saving\\\",title);\\n\\t\\t// Get the JSON of the tiddler\\t\\t\\t\\t\\n\\t\\tvar json = JSON.stringify(tiddler.getFieldStrings());\\n\\t\\t// Try to save it to local storage\\n\\t\\ttry {\\n\\t\\t\\twindow.localStorage.setItem(options.prefix + title,json);\\n\\t\\t} catch(e) {\\n\\t\\t\\tif(e.name === \\\"QuotaExceededError\\\") {\\n\\t\\t\\t\\t// Complain if we failed\\n\\t\\t\\t\\tvar msg = $tw.wiki.getTiddlerText(QUOTA_EXCEEDED_ALERT_TITLE,DEFAULT_QUOTA_EXCEEDED_ALERT_PREFIX + title + DEFAULT_QUOTA_EXCEEDED_ALERT_SUFFIX);\\n\\t\\t\\t\\tif(options.logger) {\\n\\t\\t\\t\\t\\toptions.logger.alert(msg);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// No point in keeping old values around for this tiddler\\n\\t\\t\\t\\twindow.localStorage.removeItem(options.prefix + title);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconsole.log(\\\"Browser-storage error:\\\",e);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else {\\n\\t\\tconsole.log(\\\"browser-storage: Deleting\\\",title);\\n\\t\\ttry {\\n\\t\\t\\twindow.localStorage.removeItem(options.prefix + title);\\n\\t\\t} catch(e) {\\n\\t\\t\\tconsole.log(\\\"Browser-storage error:\\\",e);\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction clearLocalStorage() {\\n\\tvar url = window.location.pathname,\\n\\t\\tlog = [];\\n\\t// Step through each browsder storage item\\n\\tfor(var index=window.localStorage.length - 1; index>=0; index--) {\\n\\t\\tvar key = window.localStorage.key(index),\\n\\t\\t\\tparts = key.split(\\\"#\\\");\\n\\t\\t// Delete it if it's ours\\n\\t\\tif(parts[0] === \\\"tw5\\\" && parts[1] === url) {\\n\\t\\t\\twindow.localStorage.removeItem(key);\\n\\t\\t}\\n\\t}\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n }\n }\n}"},"$:/plugins/tiddlywiki/cecily":{"title":"$:/plugins/tiddlywiki/cecily","name":"Cecily","description":"Zoomable storyview (Cecily)","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/cecily/cecily.js\": {\n \"title\": \"$:/plugins/tiddlywiki/cecily/cecily.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/cecily/cecily.js\\ntype: application/javascript\\nmodule-type: storyview\\n\\nPositions tiddlers on a 2D map\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar CecilyStoryView = function(listWidget) {\\n\\tvar self = this;\\n\\tthis.listWidget = listWidget;\\n\\t// Load the map\\n\\tthis.loadMap();\\n\\t// Position the existing tiddlers\\n\\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\\n\\t\\tvar domNode = itemWidget.findFirstDomNode();\\n\\t\\tdomNode.style.position = \\\"absolute\\\";\\n\\t\\tvar title = itemWidget.parseTreeNode.itemTitle;\\n\\t\\tself.positionTiddler(title,domNode);\\n\\t});\\n};\\n\\nCecilyStoryView.prototype.navigateTo = function(historyInfo) {\\n\\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\\n\\tif(listElementIndex === undefined) {\\n\\t\\treturn;\\n\\t}\\n\\tvar listItemWidget = this.listWidget.children[listElementIndex],\\n\\t\\ttargetElement = listItemWidget.findFirstDomNode();\\n\\t// Scroll the node into view\\n\\tthis.listWidget.dispatchEvent({type: \\\"tm-scroll\\\", target: targetElement});\\n};\\n\\nCecilyStoryView.prototype.insert = function(widget) {\\n\\tvar domNode = widget.findFirstDomNode(),\\n\\t\\tduration = $tw.utils.getAnimationDuration();\\n\\t// Make the newly inserted node position absolute\\n\\t$tw.utils.setStyle(domNode,[\\n\\t\\t{position: \\\"absolute\\\"},\\n\\t\\t{transition: \\\"\\\"},\\n\\t\\t{opacity: \\\"0.0\\\"}\\n\\t]);\\n\\t// Position it\\n\\tvar title = widget.parseTreeNode.itemTitle;\\n\\tthis.positionTiddler(title,domNode);\\n\\t$tw.utils.forceLayout(domNode);\\n\\t// Animate it in\\n\\t$tw.utils.setStyle(domNode,[\\n\\t\\t{transition: \\\"opacity \\\" + duration + \\\"ms ease-out\\\"},\\n\\t\\t{opacity: \\\"1.0\\\"}\\n\\t]);\\n};\\n\\nCecilyStoryView.prototype.remove = function(widget) {\\n\\tvar targetElement = widget.findFirstDomNode(),\\n\\t\\tduration = $tw.utils.getAnimationDuration();\\n\\t// Remove the widget at the end of the transition\\n\\tsetTimeout(function() {\\n\\t\\twidget.removeChildDomNodes();\\n\\t},duration);\\n\\t// Animate the closure\\n\\t$tw.utils.setStyle(targetElement,[\\n\\t\\t{transition: \\\"none\\\"},\\n\\t\\t{opacity: \\\"1.0\\\"}\\n\\t]);\\n\\t$tw.utils.forceLayout(targetElement);\\n\\t$tw.utils.setStyle(targetElement,[\\n\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\"transform\\\") + \\\" \\\" + duration + \\\"ms ease-in-out, \\\" +\\n\\t\\t\\t\\t\\t\\\"opacity \\\" + duration + \\\"ms ease-in-out\\\"},\\n\\t\\t{transform: \\\"scale(0.01)\\\"},\\n\\t\\t{opacity: \\\"0.0\\\"}\\n\\t]);\\n};\\n\\n/*\\nLoad the current map\\n*/\\nCecilyStoryView.prototype.loadMap = function() {\\n\\tthis.map = this.listWidget.wiki.getTiddlerData(this.getMapTiddlerTitle(),{\\n\\t\\tpositions: {},\\n\\t\\tnewTiddlerPosition: {x: 0, y: 0},\\n\\t\\twidth: parseInt(this.listWidget.getAttribute(\\\"cecily-width\\\",\\\"600\\\"),10)\\n\\t});\\n};\\n\\nCecilyStoryView.prototype.getMapTiddlerTitle = function() {\\n\\treturn this.listWidget.getAttribute(\\\"cecily-map\\\",\\\"$:/TiddlerMap\\\");\\n};\\n\\n/*\\nPosition a tiddler according to the map\\n*/\\nCecilyStoryView.prototype.positionTiddler = function(title,domNode) {\\n\\tvar pos = this.lookupTiddlerInMap(title,domNode),\\n\\t\\tscale = pos.w/domNode.offsetWidth;\\n\\t$tw.utils.setStyle(domNode,[\\n\\t\\t{width: this.map.width + \\\"px\\\"},\\n\\t\\t{transformOrigin: \\\"0% 0%\\\"},\\n\\t\\t{transform: \\\"translateX(\\\" + pos.x + \\\"px) translateY(\\\" + pos.y + \\\"px) scale(\\\" + scale + \\\") translateX(-50%) rotate(\\\" + (pos.r || 0) + \\\"deg) translateX(50%)\\\"}\\n\\t]);\\n};\\n\\n// Get the position of a particular tiddler\\nCecilyStoryView.prototype.lookupTiddlerInMap = function(title,domNode) {\\n\\t// If this is a draft tiddler then look for the position of the original tiddler\\n\\tvar tiddler = this.listWidget.wiki.getTiddler(title);\\n\\tif(tiddler) {\\n\\t\\tvar draftOf = tiddler.fields[\\\"draft.of\\\"];\\n\\t\\tif(draftOf && this.map.positions[draftOf]) {\\n\\t\\t\\treturn this.map.positions[draftOf];\\n\\t\\t}\\n\\t}\\n\\t// Try looking the target tiddler up in the map\\n\\tif(this.map.positions[title]) {\\n\\t\\treturn this.map.positions[title];\\n\\t}\\n\\t// If the tiddler wasn't in the map we'll have to compute it\\n\\tvar newPosition;\\n\\tswitch(this.map.positionNew) {\\n\\t\\tdefault: // \\\"right\\\"\\n\\t\\t\\tnewPosition = {\\n\\t\\t\\t\\tx: this.map.newTiddlerPosition.x,\\n\\t\\t\\t\\ty: this.map.newTiddlerPosition.y,\\n\\t\\t\\t\\tw: 200,\\n\\t\\t\\t\\th: 200\\n\\t\\t\\t};\\n\\t\\t\\tthis.map.newTiddlerPosition.x += newPosition.w * 1.1;\\n\\t\\t\\tbreak;\\n\\t}\\n\\t// A default position\\n\\tnewPosition = newPosition || {x: 0,y: 0,w: 100,h: 100};\\n\\t// Save the position back to the map\\n\\tthis.map.positions[title] = newPosition;\\n\\treturn newPosition;\\n};\\n\\nexports.cecily = CecilyStoryView;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"storyview\"\n },\n \"$:/plugins/tiddlywiki/cecily/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/cecily/readme\",\n \"text\": \"This experimental plugin provides a new story visualisation that displays individual tiddlers as resizable tiles on an infinite canvas.\\n\\nCecily is based on an earlier plugin for TiddlyWiki Classic: http://jermolene.com/cecily\\n\\nCecily is currently in the early stages of development with little functionality yet implemented.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/cecily]]\\n\"\n },\n \"$:/core/images/storyview-cecily\": {\n \"title\": \"$:/core/images/storyview-cecily\",\n \"tags\": \"$:/tags/Image\",\n \"text\": \"<svg class=\\\"tc-image-storyview-cecily tc-image-button\\\" width=\\\"22pt\\\" height=\\\"22pt\\\" viewBox=\\\"0 0 128 128\\\">\\n <g fill-rule=\\\"evenodd\\\">\\n <path d=\\\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9949725,16 C19.5794711,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5905136,48 23.9949725,48 L71.0050275,48 C75.4205289,48 79,44.4223393 79,40.0075946 L79,23.9924054 C79,19.5783218 75.4094864,16 71.0050275,16 L23.9949725,16 L23.9949725,16 Z M72.0070969,64 C67.5848994,64 64,67.5881712 64,72.0070969 L64,103.992903 C64,108.415101 67.5881712,112 72.0070969,112 L103.992903,112 C108.415101,112 112,108.411829 112,103.992903 L112,72.0070969 C112,67.5848994 108.411829,64 103.992903,64 L72.0070969,64 L72.0070969,64 Z M24.0034204,80 C19.5832534,80 16,83.5776607 16,87.9924054 L16,104.007595 C16,108.421678 19.5863782,112 24.0034204,112 L38.9965796,112 C43.4167466,112 47,108.422339 47,104.007595 L47,87.9924054 C47,83.5783218 43.4136218,80 38.9965796,80 L24.0034204,80 L24.0034204,80 Z M104,16 C99.581722,16 96,19.5776607 96,23.9924054 L96,40.0075946 C96,44.4216782 99.5907123,48 104,48 C108.418278,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.409288,16 104,16 L104,16 Z\\\"></path>\\n </g>\\n</svg>\"\n }\n }\n}"},"$:/plugins/tiddlywiki/classictools":{"title":"$:/plugins/tiddlywiki/classictools","name":"Classic Tools","description":"TiddlyWiki Classic tools","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/classictools/recipe.js\": {\n \"title\": \"$:/plugins/tiddlywiki/classictools/recipe.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/classictools/recipe.js\\ntype: application/javascript\\nmodule-type: tiddlerdeserializer\\n\\nModule to deserialize tiddlers from an old school TiddlyWiki recipe file.\\n\\nThe idea is to process the recipe file recursively, loading tiddlers into the main store using synchronous file operations. The tiddlers have their titles prefixed with the associated marker in curly brackets (\\\"{shadow}\\\", \\\"{tiddler}\\\" etc).\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nexports[\\\"text/vnd.tiddlywiki2-recipe\\\"] = function(text,fields) {\\n\\tvar self = this,\\n\\t\\tpath = require(\\\"path\\\"),\\n\\t\\tfs = require(\\\"fs\\\"),\\n\\t\\ttiddlers = [],\\n\\t\\tparseRecipe = function(text) {\\n\\t\\t\\tvar recipe = [];\\n\\t\\t\\ttext.toString().split(/\\\\r?\\\\n/mg).forEach(function(line) {\\n\\t\\t\\t\\t// Check if the line is a comment\\n\\t\\t\\t\\tif(line.charAt(0) !== \\\"#\\\") {\\n\\t\\t\\t\\t\\t// Find the colon splitting the name from the value\\n\\t\\t\\t\\t\\tvar p = line.indexOf(\\\":\\\");\\n\\t\\t\\t\\t\\tif(p !== -1) {\\n\\t\\t\\t\\t\\t\\trecipe.push({\\n\\t\\t\\t\\t\\t\\t\\tname: line.substr(0,p).trim(),\\n\\t\\t\\t\\t\\t\\t\\tvalue: line.substr(p+1).trim()\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\treturn recipe;\\n\\t\\t},\\n\\t\\tloadTiddlersFromFile = function(sourcePath,prefix) {\\n\\t\\t\\tvar ext = path.extname(sourcePath),\\n\\t\\t\\t\\textensionInfo = $tw.utils.getFileExtensionInfo(ext),\\n\\t\\t\\t\\ttypeInfo = extensionInfo ? $tw.config.contentTypeInfo[extensionInfo.type] : null,\\n\\t\\t\\t\\tdata = fs.readFileSync(sourcePath,typeInfo ? typeInfo.encoding : \\\"utf8\\\"),\\n\\t\\t\\t\\tfields = {title: sourcePath},\\n\\t\\t\\t\\ttids = self.deserializeTiddlers(ext,data,fields),\\n\\t\\t\\t\\tmetafile = sourcePath + \\\".meta\\\";\\n\\t\\t\\tif(ext !== \\\".json\\\" && tids.length === 1 && fs.existsSync(metafile)) {\\n\\t\\t\\t\\tvar metadata = fs.readFileSync(metafile,\\\"utf8\\\");\\n\\t\\t\\t\\tif(metadata) {\\n\\t\\t\\t\\t\\ttids = [$tw.utils.parseFields(metadata,tids[0])];\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\ttids.forEach(function(tid) {\\n\\t\\t\\t\\ttid.title = prefix + tid.title;\\n\\t\\t\\t});\\n\\t\\t\\ttiddlers.push.apply(tiddlers,tids);\\n\\t\\t},\\n\\t\\tprocessRecipe = function(sourcePath,text) {\\n\\t\\t\\tvar recipe = parseRecipe(text);\\n\\t\\t\\tfor(var t=0; t<recipe.length; t++) {\\n\\t\\t\\t\\tif(recipe[t].name === \\\"recipe\\\") {\\n\\t\\t\\t\\t\\tvar recipeFile = path.resolve(path.dirname(sourcePath),recipe[t].value);\\n\\t\\t\\t\\t\\tprocessRecipe(recipeFile,fs.readFileSync(recipeFile,\\\"utf8\\\"));\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tvar tiddlerFile = path.resolve(path.dirname(sourcePath),recipe[t].value);\\n\\t\\t\\t\\t\\tloadTiddlersFromFile(tiddlerFile,\\\"{\\\" + recipe[t].name + \\\"}\\\");\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tsourcePath = fields.title; // Bit of a hack to take advantage of the default title being the path to the tiddler file\\n\\tprocessRecipe(sourcePath,text);\\n\\treturn tiddlers;\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"tiddlerdeserializer\"\n },\n \"$:/plugins/tiddlywiki/classictools/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/classictools/readme\",\n \"text\": \"This plugin provides facilities for working with TiddlyWiki Classic. It is used in the build process for TiddlyWiki Classic.\\n\\nThe additional features are:\\n\\n* A ''tiddlerdeserializer'' module for reading TiddlyWiki Classic `.recipe` files\\n* Templates for building TiddlyWiki Classic.\\n\\nSee https://github.com/TiddlyWiki/tiddlywiki.com for more details.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/classictools]]\\n\"\n },\n \"$:/core/templates/html-div-tiddler-remove-prefix\": {\n \"title\": \"$:/core/templates/html-div-tiddler-remove-prefix\",\n \"text\": \"<!--\\n\\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\\n\\n-->`<div`<$fields template=' $name$=\\\"$encoded_value$\\\"' stripTitlePrefix=\\\"yes\\\"></$fields>`>\\n<pre>`<$view field=\\\"text\\\" format=\\\"htmlencoded\\\" />`</pre>\\n</div>`\\n\"\n },\n \"$:/core/templates/plain-text-tiddler-strip-comments\": {\n \"title\": \"$:/core/templates/plain-text-tiddler-strip-comments\",\n \"text\": \"<$view field=\\\"text\\\" format=\\\"stripcomments\\\" />\"\n },\n \"$:/core/templates/tiddlywiki2.externaljs.template.html\": {\n \"title\": \"$:/core/templates/tiddlywiki2.externaljs.template.html\",\n \"text\": \"{{{ [prefix[{prejs}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n{{{ [prefix[{js}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n{{{ [prefix[{postjs}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n{{{ [prefix[{jsext}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n\\n\"\n },\n \"$:/core/templates/tiddlywiki2.template.html\": {\n \"title\": \"$:/core/templates/tiddlywiki2.template.html\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\" \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\" xml:lang=\\\"en\\\" lang=\\\"en\\\">\\n<head>\\n<script id=\\\"versionArea\\\" type=\\\"text/javascript\\\">\\n//<![CDATA[\\n{{{ [prefix[{version}]] ||$:/core/templates/plain-text-tiddler}}}\\n//]]>\\n</script>\\n<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=utf-8\\\" />\\n<meta name=\\\"copyright\\\" content=\\\"\\n{{{ [prefix[{copyright}]] ||$:/core/templates/plain-text-tiddler}}}\\n\\\" />\\n<!--PRE-HEAD-START-->\\n{{{ [prefix[{prehead}]] ||$:/core/templates/plain-text-tiddler}}}\\n<!--PRE-HEAD-END-->\\n<title>\\n{{{ [prefix[{title}]] ||$:/core/templates/plain-text-tiddler}}}\\n</title>\\n<style id=\\\"styleArea\\\" type=\\\"text/css\\\">\\n{{{ [prefix[{style}]] ||$:/core/templates/plain-text-tiddler}}}\\n</style>\\n<!--POST-HEAD-START-->\\n{{{ [prefix[{posthead}]] ||$:/core/templates/plain-text-tiddler}}}\\n<!--POST-HEAD-END-->\\n</head>\\n<body onload=\\\"main();\\\" onunload=\\\"if(window.unload) unload();\\\">\\n<!--PRE-BODY-START-->\\n{{{ [prefix[{prebody}]] ||$:/core/templates/plain-text-tiddler}}}\\n<!--PRE-BODY-END-->\\n<div id=\\\"copyright\\\">\\nWelcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association\\n</div>\\n<noscript>\\n{{{ [prefix[{noscript}]] ||$:/core/templates/plain-text-tiddler}}}\\n</noscript>\\n<div id=\\\"saveTest\\\"></div>\\n<div id=\\\"backstageCloak\\\"></div>\\n<div id=\\\"backstageButton\\\"></div>\\n<div id=\\\"backstageArea\\\"><div id=\\\"backstageToolbar\\\"></div></div>\\n<div id=\\\"backstage\\\">\\n\\t<div id=\\\"backstagePanel\\\"></div>\\n</div>\\n<div id=\\\"contentWrapper\\\"></div>\\n<div id=\\\"contentStash\\\"></div>\\n<div id=\\\"shadowArea\\\">\\n{{{ [prefix[{shadow}]] +[sortcs[title]] ||$:/core/templates/html-div-tiddler-remove-prefix}}}\\n</div>\\n<!--POST-SHADOWAREA-->\\n<div id=\\\"storeArea\\\">\\n{{{ [prefix[{tiddler}]] +[sortcs[title]] ||$:/core/templates/html-div-tiddler-remove-prefix}}}\\n{{{ [prefix[{plugin}]] ||$:/core/templates/plain-text-tiddler}}}\\n{{{ [prefix[{posttiddlers}]] ||$:/core/templates/plain-text-tiddler}}}\\n</div>\\n<!--POST-STOREAREA-->\\n<!--POST-BODY-START-->\\n{{{ [prefix[{postbody}]] ||$:/core/templates/plain-text-tiddler}}}\\n<!--POST-BODY-END-->\\n<script id=\\\"jsArea\\\" type=\\\"text/javascript\\\">\\n//<![CDATA[\\n{{{ [prefix[{prejs}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n{{{ [prefix[{js}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n{{{ [prefix[{postjs}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n//]]>\\n</script>\\n{{{ [prefix[{jsext}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n<script id=\\\"jsdeprecatedArea\\\" type=\\\"text/javascript\\\">\\n//<![CDATA[\\n{{{ [prefix[{jsdeprecated}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n//]]>\\n</script>\\n<script id=\\\"jslibArea\\\" type=\\\"text/javascript\\\">\\n//<![CDATA[\\n{{{ [prefix[{jslib}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n//]]>\\n</script>\\n<script id=\\\"jqueryArea\\\" type=\\\"text/javascript\\\">\\n//<![CDATA[\\n{{{ [prefix[{jquery}]] ||$:/core/templates/plain-text-tiddler-strip-comments}}}\\n//]]>\\n</script>\\n<script type=\\\"text/javascript\\\">\\n//<![CDATA[\\nif(useJavaSaver)\\n\\tdocument.write(\\\"<applet style='position:absolute;left:-1px' name='TiddlySaver' code='TiddlySaver.class' archive='TiddlySaver.jar' width='1' height='1'></applet>\\\");\\n//]]>\\n</script>\\n<!--POST-SCRIPT-START-->\\n{{{ [prefix[{postscript}]] ||$:/core/templates/plain-text-tiddler}}}\\n<!--POST-SCRIPT-END-->\\n</body>\\n</html>\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror":{"title":"$:/plugins/tiddlywiki/codemirror","name":"CodeMirror","description":"CodeMirror editor","list":"readme usage keyboard license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/EditorTypeMappings/application/javascript\": {\n \"title\": \"$:/config/EditorTypeMappings/application/javascript\",\n \"text\": \"codemirror\"\n },\n \"$:/config/EditorTypeMappings/application/json\": {\n \"title\": \"$:/config/EditorTypeMappings/application/json\",\n \"text\": \"codemirror\"\n },\n \"$:/config/EditorTypeMappings/application/x-tiddler-dictionary\": {\n \"title\": \"$:/config/EditorTypeMappings/application/x-tiddler-dictionary\",\n \"text\": \"codemirror\"\n },\n \"$:/config/EditorTypeMappings/text/css\": {\n \"title\": \"$:/config/EditorTypeMappings/text/css\",\n \"text\": \"codemirror\"\n },\n \"$:/config/EditorTypeMappings/text/html\": {\n \"title\": \"$:/config/EditorTypeMappings/text/html\",\n \"text\": \"codemirror\"\n },\n \"$:/config/EditorTypeMappings/text/plain\": {\n \"title\": \"$:/config/EditorTypeMappings/text/plain\",\n \"text\": \"codemirror\"\n },\n \"$:/config/EditorTypeMappings/text/vnd.tiddlywiki\": {\n \"title\": \"$:/config/EditorTypeMappings/text/vnd.tiddlywiki\",\n \"text\": \"codemirror\"\n },\n \"$:/config/EditorTypeMappings/text/x-markdown\": {\n \"title\": \"$:/config/EditorTypeMappings/text/x-markdown\",\n \"text\": \"codemirror\"\n },\n \"$:/config/EditorTypeMappings/text/x-tiddlywiki\": {\n \"title\": \"$:/config/EditorTypeMappings/text/x-tiddlywiki\",\n \"text\": \"codemirror\"\n },\n \"$:/config/codemirror/cursorBlinkRate\": {\n \"title\": \"$:/config/codemirror/cursorBlinkRate\",\n \"type\": \"integer\",\n \"text\": \"530\"\n },\n \"$:/config/codemirror/extraKeysTW\": {\n \"title\": \"$:/config/codemirror/extraKeysTW\",\n \"extend\": \"extraKeys\",\n \"type\": \"json\",\n \"text\": \"{\\n\\t\\\"Ctrl-Esc\\\": \\\"singleSelection\\\",\\n\\t\\\"Esc\\\": \\\"\\\",\\n\\t\\\"Ctrl-S\\\": \\\"\\\",\\n\\t\\\"Ctrl-U\\\": \\\"\\\",\\n\\t\\\"Ctrl-T\\\": \\\"\\\",\\n\\t\\\"Alt-T\\\": \\\"transposeChars\\\",\\n\\t\\\"Alt-U\\\": \\\"undoSelection\\\",\\n\\t\\\"Shift-Alt-U\\\": \\\"redoSelection\\\",\\n\\t\\\"Cmd-U\\\": \\\"\\\",\\n\\t\\\"Tab\\\": \\\"indentAuto()\\\",\\n\\t\\\"Enter\\\": \\\"newLineAndIndent()\\\"\\n}\\n\"\n },\n \"$:/config/codemirror/indentUnit\": {\n \"title\": \"$:/config/codemirror/indentUnit\",\n \"type\": \"integer\",\n \"text\": \"2\"\n },\n \"$:/config/codemirror/indentWithTabs\": {\n \"title\": \"$:/config/codemirror/indentWithTabs\",\n \"type\": \"bool\",\n \"text\": \"true\"\n },\n \"$:/config/codemirror/inputStyle\": {\n \"title\": \"$:/config/codemirror/inputStyle\",\n \"type\": \"string\",\n \"text\": \"textarea\"\n },\n \"$:/config/codemirror/keyMap\": {\n \"title\": \"$:/config/codemirror/keyMap\",\n \"type\": \"string\",\n \"text\": \"default\"\n },\n \"$:/config/codemirror/lineNumbers\": {\n \"title\": \"$:/config/codemirror/lineNumbers\",\n \"type\": \"bool\",\n \"text\": \"false\"\n },\n \"$:/config/codemirror/lineWrapping\": {\n \"title\": \"$:/config/codemirror/lineWrapping\",\n \"type\": \"bool\",\n \"text\": \"true\"\n },\n \"$:/config/codemirror/showCursorWhenSelecting\": {\n \"title\": \"$:/config/codemirror/showCursorWhenSelecting\",\n \"type\": \"bool\",\n \"text\": \"true\"\n },\n \"$:/config/codemirror/smartIndent\": {\n \"title\": \"$:/config/codemirror/smartIndent\",\n \"type\": \"bool\",\n \"text\": \"true\"\n },\n \"$:/config/codemirror/styleActiveLine\": {\n \"title\": \"$:/config/codemirror/styleActiveLine\",\n \"type\": \"bool\",\n \"text\": \"false\"\n },\n \"$:/config/codemirror/tabSize\": {\n \"title\": \"$:/config/codemirror/tabSize\",\n \"type\": \"integer\",\n \"text\": \"2\"\n },\n \"$:/config/codemirror/theme\": {\n \"title\": \"$:/config/codemirror/theme\",\n \"type\": \"string\",\n \"text\": \"default\"\n },\n \"$:/language/codemirror/homeUrl\": {\n \"title\": \"$:/language/codemirror/homeUrl\",\n \"text\": \"http://codemirror.net\"\n },\n \"$:/language/codemirror/addOnUrl\": {\n \"title\": \"$:/language/codemirror/addOnUrl\",\n \"text\": \"http://codemirror.net/doc/manual.html#addons\"\n },\n \"$:/language/codemirror/configUrl\": {\n \"title\": \"$:/language/codemirror/configUrl\",\n \"text\": \"http://codemirror.net/doc/manual.html#config\"\n },\n \"$:/language/codemirror/controlPanel/hint\": {\n \"title\": \"$:/language/codemirror/controlPanel/hint\",\n \"text\": \"These settings let you customise the behaviour of [[CodeMirror|$:/plugins/tiddlywiki/codemirror]].\"\n },\n \"$:/language/codemirror/controlPanel/usage\": {\n \"title\": \"$:/language/codemirror/controlPanel/usage\",\n \"text\": \"Usage information\"\n },\n \"$:/language/codemirror/editorFont/hint\": {\n \"title\": \"$:/language/codemirror/editorFont/hint\",\n \"text\": \"Editor font family\"\n },\n \"$:/language/codemirror/editorFont/info\": {\n \"title\": \"$:/language/codemirror/editorFont/info\",\n \"text\": \"Set the font family for the ~CodeMirror text-editor\"\n },\n \"$:/language/codemirror/controlPanel/keyboard\": {\n \"title\": \"$:/language/codemirror/controlPanel/keyboard\",\n \"text\": \"Keyboard shortcuts\"\n },\n \"$:/language/codemirror/keyMap/hint\": {\n \"title\": \"$:/language/codemirror/keyMap/hint\",\n \"text\": \"~CodeMirror keymap\"\n },\n \"$:/language/codemirror/keyMap/info\": {\n \"title\": \"$:/language/codemirror/keyMap/info\",\n \"text\": \"~The Keyboard KeyMap used within the ~CodeMirror text-editor\"\n },\n \"$:/language/codemirror/lineNumbers/hint\": {\n \"title\": \"$:/language/codemirror/lineNumbers/hint\",\n \"text\": \"Enable line numbers\"\n },\n \"$:/language/codemirror/lineNumbers/info\": {\n \"title\": \"$:/language/codemirror/lineNumbers/info\",\n \"text\": \"Whether to show line numbers to the left of the editor.\"\n },\n \"$:/language/codemirror/lineWrapping/hint\": {\n \"title\": \"$:/language/codemirror/lineWrapping/hint\",\n \"text\": \"Enable line wrapping\"\n },\n \"$:/language/codemirror/lineWrapping/info\": {\n \"title\": \"$:/language/codemirror/lineWrapping/info\",\n \"text\": \"Whether CodeMirror should scroll or wrap for long lines. Defaults to `false` (scroll).\"\n },\n \"$:/language/codemirror/showCursorWhenSelecting/hint\": {\n \"title\": \"$:/language/codemirror/showCursorWhenSelecting/hint\",\n \"text\": \"Show cursor, when selecting\"\n },\n \"$:/language/codemirror/showCursorWhenSelecting/info\": {\n \"title\": \"$:/language/codemirror/showCursorWhenSelecting/info\",\n \"text\": \"Whether the cursor should be drawn when a selection is active.\"\n },\n \"$:/language/codemirror/styleActiveLine/hint\": {\n \"title\": \"$:/language/codemirror/styleActiveLine/hint\",\n \"text\": \"Highlight active line\"\n },\n \"$:/language/codemirror/styleActiveLine/info\": {\n \"title\": \"$:/language/codemirror/styleActiveLine/info\",\n \"text\": \"Whether or not to highlight the active text-editor line\"\n },\n \"$:/language/codemirror/theme/hint\": {\n \"title\": \"$:/language/codemirror/theme/hint\",\n \"text\": \"Select a theme\"\n },\n \"$:/language/codemirror/theme/info\": {\n \"title\": \"$:/language/codemirror/theme/info\",\n \"text\": \"Choose between ~CodeMirror themes\"\n },\n \"$:/plugins/tiddlywiki/codemirror/edit-codemirror.js\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/edit-codemirror.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/codemirror/edit-codemirror.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nEdit-codemirror widget\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar editTextWidgetFactory = require(\\\"$:/core/modules/editor/factory.js\\\").editTextWidgetFactory,\\n\\tCodeMirrorEngine = require(\\\"$:/plugins/tiddlywiki/codemirror/engine.js\\\").CodeMirrorEngine;\\n\\nexports[\\\"edit-codemirror\\\"] = editTextWidgetFactory(CodeMirrorEngine,CodeMirrorEngine);\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/codemirror/engine.js\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/engine.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/codemirror/engine.js\\ntype: application/javascript\\nmodule-type: library\\n\\nText editor engine based on a CodeMirror instance\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar CODEMIRROR_OPTIONS = \\\"$:/config/CodeMirror\\\",\\nHEIGHT_VALUE_TITLE = \\\"$:/config/TextEditor/EditorHeight/Height\\\",\\nCONFIG_FILTER = \\\"[all[shadows+tiddlers]prefix[$:/config/codemirror/]]\\\"\\n\\t\\n// Install CodeMirror\\nif($tw.browser && !window.CodeMirror) {\\n\\n\\tvar modules = $tw.modules.types[\\\"codemirror\\\"];\\n\\tvar req = Object.getOwnPropertyNames(modules);\\n\\n\\twindow.CodeMirror = require(\\\"$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\\\");\\n\\t// Install required CodeMirror plugins\\n\\tif(req) {\\n\\t\\tif($tw.utils.isArray(req)) {\\n\\t\\t\\tfor(var index=0; index<req.length; index++) {\\n\\t\\t\\t\\trequire(req[index]);\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\trequire(req);\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction getCmConfig() {\\n\\tvar type,\\n\\t\\ttest,\\n\\t\\tvalue,\\n\\t\\telement,\\n\\t\\textend,\\n\\t\\ttiddler,\\n\\t\\tconfig = {},\\n\\t\\tconfigTiddlers = $tw.wiki.filterTiddlers(CONFIG_FILTER);\\n\\n\\tif ($tw.utils.isArray(configTiddlers)) {\\n\\t\\tfor (var i=0; i<configTiddlers.length; i++) {\\n\\t\\t\\ttiddler = $tw.wiki.getTiddler(configTiddlers[i]);\\n\\t\\t\\t\\tif (tiddler) {\\n\\t\\t\\t\\telement = configTiddlers[i].replace(/\\\\$:\\\\/config\\\\/codemirror\\\\//ig,\\\"\\\");\\n\\t\\t\\t\\t\\ttype = (tiddler.fields.type) ? tiddler.fields.type.trim().toLocaleLowerCase() : \\\"string\\\";\\n\\t\\t\\t\\tswitch (type) {\\n\\t\\t\\t\\t\\tcase \\\"bool\\\":\\n\\t\\t\\t\\t\\ttest = tiddler.fields.text.trim().toLowerCase();\\n\\t\\t\\t\\t\\tvalue = (test === \\\"true\\\") ? true : false;\\n\\t\\t\\t\\t\\tconfig[element] = value;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase \\\"string\\\":\\n\\t\\t\\t\\t\\tvalue = tiddler.fields.text.trim();\\n\\t\\t\\t\\t\\tconfig[element] = value;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase \\\"integer\\\":\\n\\t\\t\\t\\t\\tvalue = parseInt(tiddler.fields.text.trim(), 10);\\n\\t\\t\\t\\t\\tconfig[element] = value;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase \\\"json\\\":\\n\\t\\t\\t\\t\\tvalue = JSON.parse(tiddler.fields.text.trim());\\n\\t\\t\\t\\t\\t\\textend = (tiddler.fields.extend) ? tiddler.fields.extend : element;\\n\\n\\t\\t\\t\\t\\tif (config[extend]) {\\n\\t\\t\\t\\t\\t\\t$tw.utils.extend(config[extend], value);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tconfig[extend] = value;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn config;\\n}\\n\\nfunction CodeMirrorEngine(options) {\\n\\n\\t// Save our options\\n\\tvar self = this;\\n\\toptions = options || {};\\n\\tthis.widget = options.widget;\\n\\tthis.value = options.value;\\n\\tthis.parentNode = options.parentNode;\\n\\tthis.nextSibling = options.nextSibling;\\n\\t// Create the wrapper DIV\\n\\tthis.domNode = this.widget.document.createElement(\\\"div\\\");\\n\\tif(this.widget.editClass) {\\n\\t\\tthis.domNode.className = this.widget.editClass;\\n\\t}\\n\\tthis.domNode.style.display = \\\"inline-block\\\";\\n\\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\\n\\tthis.widget.domNodes.push(this.domNode);\\n\\t\\n\\t// Set all cm-plugin defaults\\n\\t// Get the configuration options for the CodeMirror object\\n\\tvar config = getCmConfig();\\n\\n\\tconfig.mode = options.type;\\n\\tconfig.value = options.value;\\n\\tif(this.widget.editTabIndex) {\\n\\t\\tconfig[\\\"tabindex\\\"] = this.widget.editTabIndex;\\n\\t}\\n\\t// Create the CodeMirror instance\\n\\tthis.cm = window.CodeMirror(function(cmDomNode) {\\n\\t\\t// Note that this is a synchronous callback that is called before the constructor returns\\n\\t\\tif(!self.widget.document.isTiddlyWikiFakeDom) {\\n\\t\\t\\tself.domNode.appendChild(cmDomNode);\\n\\t\\t}\\n\\t},config);\\n\\n\\t// Set up a change event handler\\n\\tthis.cm.on(\\\"change\\\",function() {\\n\\t\\tself.widget.saveChanges(self.getText());\\n\\t\\tif(self.widget.editInputActions) {\\n\\t\\t\\tself.widget.invokeActionString(self.widget.editInputActions);\\n\\t\\t}\\n\\t});\\n\\tthis.cm.on(\\\"drop\\\",function(cm,event) {\\n\\t\\tevent.stopPropagation(); // Otherwise TW's dropzone widget sees the drop event\\n\\t\\treturn false;\\n\\t});\\n\\tthis.cm.on(\\\"keydown\\\",function(cm,event) {\\n\\t\\treturn self.widget.handleKeydownEvent.call(self.widget,event);\\n\\t});\\n\\tthis.cm.on(\\\"focus\\\",function(cm,event) {\\n\\t\\tif(self.widget.editCancelPopups) {\\n\\t\\t\\t$tw.popup.cancel(0);\\t\\n\\t\\t}\\n\\t});\\n}\\n\\n/*\\nSet the text of the engine if it doesn't currently have focus\\n*/\\nCodeMirrorEngine.prototype.setText = function(text,type) {\\n\\tvar self = this;\\n\\tself.cm.setOption(\\\"mode\\\",type);\\n\\tif(!this.cm.hasFocus()) {\\n\\t\\tthis.updateDomNodeText(text);\\n\\t}\\n};\\n\\n/*\\nUpdate the DomNode with the new text\\n*/\\nCodeMirrorEngine.prototype.updateDomNodeText = function(text) {\\n\\tthis.cm.setValue(text);\\n};\\n\\n/*\\nGet the text of the engine\\n*/\\nCodeMirrorEngine.prototype.getText = function() {\\n\\treturn this.cm.getValue();\\n};\\n\\n/*\\nFix the height of textarea to fit content\\n*/\\nCodeMirrorEngine.prototype.fixHeight = function() {\\n\\tif(this.widget.editAutoHeight) {\\n\\t\\t// Resize to fit\\n\\t\\tthis.cm.setSize(null,null);\\n\\t} else {\\n\\t\\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\\\"400px\\\"),10);\\n\\t\\tfixedHeight = Math.max(fixedHeight,20);\\n\\t\\tthis.cm.setSize(null,fixedHeight);\\n\\t}\\n};\\n\\n/*\\nFocus the engine node\\n*/\\nCodeMirrorEngine.prototype.focus = function() {\\n\\tthis.cm.focus();\\n}\\n\\n/*\\nCreate a blank structure representing a text operation\\n*/\\nCodeMirrorEngine.prototype.createTextOperation = function() {\\n\\tvar selections = this.cm.listSelections();\\n\\tif(selections.length > 0) {\\n\\t\\tvar anchorPos = this.cm.indexFromPos(selections[0].anchor),\\n\\t\\theadPos = this.cm.indexFromPos(selections[0].head);\\n\\t}\\n\\tvar operation = {\\n\\t\\ttext: this.cm.getValue(),\\n\\t\\tselStart: Math.min(anchorPos,headPos),\\n\\t\\tselEnd: Math.max(anchorPos,headPos),\\n\\t\\tcutStart: null,\\n\\t\\tcutEnd: null,\\n\\t\\treplacement: null,\\n\\t\\tnewSelStart: null,\\n\\t\\tnewSelEnd: null\\n\\t};\\n\\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\\n\\treturn operation;\\n};\\n\\n/*\\nExecute a text operation\\n*/\\nCodeMirrorEngine.prototype.executeTextOperation = function(operation) {\\n\\t// Perform the required changes to the text area and the underlying tiddler\\n\\tvar newText = operation.text;\\n\\tif(operation.replacement !== null) {\\n\\t\\tthis.cm.replaceRange(operation.replacement,this.cm.posFromIndex(operation.cutStart),this.cm.posFromIndex(operation.cutEnd));\\n\\t\\tthis.cm.setSelection(this.cm.posFromIndex(operation.newSelStart),this.cm.posFromIndex(operation.newSelEnd));\\n\\t\\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\\n\\t}\\n\\tthis.cm.focus();\\n\\treturn newText;\\n};\\n\\nexports.CodeMirrorEngine = CodeMirrorEngine;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\": {\n \"text\": \"!function(e,t){\\\"object\\\"==typeof exports&&\\\"undefined\\\"!=typeof module?module.exports=t():\\\"function\\\"==typeof define&&define.amd?define(t):e.CodeMirror=t()}(this,function(){\\\"use strict\\\";var e=navigator.userAgent,t=navigator.platform,r=/gecko\\\\/\\\\d/i.test(e),n=/MSIE \\\\d/.test(e),i=/Trident\\\\/(?:[7-9]|\\\\d{2,})\\\\..*rv:(\\\\d+)/.exec(e),o=/Edge\\\\/(\\\\d+)/.exec(e),l=n||i||o,s=l&&(n?document.documentMode||6:+(o||i)[1]),a=!o&&/WebKit\\\\//.test(e),u=a&&/Qt\\\\/\\\\d+\\\\.\\\\d+/.test(e),c=!o&&/Chrome\\\\//.test(e),h=/Opera\\\\//.test(e),f=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\\\\d\\\\D([8-9]|\\\\d\\\\d)\\\\D/.test(e),p=/PhantomJS/.test(e),g=!o&&/AppleWebKit/.test(e)&&/Mobile\\\\/\\\\w+/.test(e),v=/Android/.test(e),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\\\\bCrOS\\\\b/.test(e),w=/win/i.test(t),x=h&&e.match(/Version\\\\/(\\\\d*\\\\.\\\\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(h=!1,a=!0);var C=y&&(u||h&&(null==x||x<12.11)),S=r||l&&s>=9;function L(e){return new RegExp(\\\"(^|\\\\\\\\s)\\\"+e+\\\"(?:$|\\\\\\\\s)\\\\\\\\s*\\\")}var k,T=function(e,t){var r=e.className,n=L(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:\\\"\\\")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function N(e,t){return M(e).appendChild(t)}function O(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),\\\"string\\\"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function A(e,t,r,n){var i=O(e,t,r,n);return i.setAttribute(\\\"role\\\",\\\"presentation\\\"),i}function D(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function W(){var e;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function H(e,t){var r=e.className;L(t).test(r)||(e.className+=(r?\\\" \\\":\\\"\\\")+t)}function F(e,t){for(var r=e.split(\\\" \\\"),n=0;n<r.length;n++)r[n]&&!L(r[n]).test(t)&&(t+=\\\" \\\"+r[n]);return t}k=document.createRange?function(e,t,r,n){var i=document.createRange();return i.setEnd(n||e,r),i.setStart(e,t),i}:function(e,t,r){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd(\\\"character\\\",r),n.moveStart(\\\"character\\\",t),n};var P=function(e){e.select()};function E(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function z(e,t,r){for(var n in t||(t={}),e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function I(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\\\\s\\\\u00a0]/))&&(t=e.length);for(var o=n||0,l=i||0;;){var s=e.indexOf(\\\"\\\\t\\\",o);if(s<0||s>=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:l&&(P=function(e){try{e.select()}catch(e){}});var R=function(){this.id=null};function B(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}R.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var G=30,U={toString:function(){return\\\"CodeMirror.Pass\\\"}},V={scroll:!1},K={origin:\\\"*mouse\\\"},j={origin:\\\"+move\\\"};function X(e,t,r){for(var n=0,i=0;;){var o=e.indexOf(\\\"\\\\t\\\",n);-1==o&&(o=e.length);var l=o-n;if(o==e.length||i+l>=t)return n+Math.min(l,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var Y=[\\\"\\\"];function _(e){for(;Y.length<=e;)Y.push(q(Y)+\\\" \\\");return Y[e]}function q(e){return e[e.length-1]}function $(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);return r}function Z(){}function Q(e,t){var r;return Object.create?r=Object.create(e):(Z.prototype=e,r=new Z),t&&z(t,r),r}var J=/[\\\\u00df\\\\u0587\\\\u0590-\\\\u05f4\\\\u0600-\\\\u06ff\\\\u3040-\\\\u309f\\\\u30a0-\\\\u30ff\\\\u3400-\\\\u4db5\\\\u4e00-\\\\u9fcc\\\\uac00-\\\\ud7af]/;function ee(e){return/\\\\w/.test(e)||e>\\\"\\\"&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(t.source.indexOf(\\\"\\\\\\\\w\\\")>-1&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\\\\u0300-\\\\u036f\\\\u0483-\\\\u0489\\\\u0591-\\\\u05bd\\\\u05bf\\\\u05c1\\\\u05c2\\\\u05c4\\\\u05c5\\\\u05c7\\\\u0610-\\\\u061a\\\\u064b-\\\\u065e\\\\u0670\\\\u06d6-\\\\u06dc\\\\u06de-\\\\u06e4\\\\u06e7\\\\u06e8\\\\u06ea-\\\\u06ed\\\\u0711\\\\u0730-\\\\u074a\\\\u07a6-\\\\u07b0\\\\u07eb-\\\\u07f3\\\\u0816-\\\\u0819\\\\u081b-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082d\\\\u0900-\\\\u0902\\\\u093c\\\\u0941-\\\\u0948\\\\u094d\\\\u0951-\\\\u0955\\\\u0962\\\\u0963\\\\u0981\\\\u09bc\\\\u09be\\\\u09c1-\\\\u09c4\\\\u09cd\\\\u09d7\\\\u09e2\\\\u09e3\\\\u0a01\\\\u0a02\\\\u0a3c\\\\u0a41\\\\u0a42\\\\u0a47\\\\u0a48\\\\u0a4b-\\\\u0a4d\\\\u0a51\\\\u0a70\\\\u0a71\\\\u0a75\\\\u0a81\\\\u0a82\\\\u0abc\\\\u0ac1-\\\\u0ac5\\\\u0ac7\\\\u0ac8\\\\u0acd\\\\u0ae2\\\\u0ae3\\\\u0b01\\\\u0b3c\\\\u0b3e\\\\u0b3f\\\\u0b41-\\\\u0b44\\\\u0b4d\\\\u0b56\\\\u0b57\\\\u0b62\\\\u0b63\\\\u0b82\\\\u0bbe\\\\u0bc0\\\\u0bcd\\\\u0bd7\\\\u0c3e-\\\\u0c40\\\\u0c46-\\\\u0c48\\\\u0c4a-\\\\u0c4d\\\\u0c55\\\\u0c56\\\\u0c62\\\\u0c63\\\\u0cbc\\\\u0cbf\\\\u0cc2\\\\u0cc6\\\\u0ccc\\\\u0ccd\\\\u0cd5\\\\u0cd6\\\\u0ce2\\\\u0ce3\\\\u0d3e\\\\u0d41-\\\\u0d44\\\\u0d4d\\\\u0d57\\\\u0d62\\\\u0d63\\\\u0dca\\\\u0dcf\\\\u0dd2-\\\\u0dd4\\\\u0dd6\\\\u0ddf\\\\u0e31\\\\u0e34-\\\\u0e3a\\\\u0e47-\\\\u0e4e\\\\u0eb1\\\\u0eb4-\\\\u0eb9\\\\u0ebb\\\\u0ebc\\\\u0ec8-\\\\u0ecd\\\\u0f18\\\\u0f19\\\\u0f35\\\\u0f37\\\\u0f39\\\\u0f71-\\\\u0f7e\\\\u0f80-\\\\u0f84\\\\u0f86\\\\u0f87\\\\u0f90-\\\\u0f97\\\\u0f99-\\\\u0fbc\\\\u0fc6\\\\u102d-\\\\u1030\\\\u1032-\\\\u1037\\\\u1039\\\\u103a\\\\u103d\\\\u103e\\\\u1058\\\\u1059\\\\u105e-\\\\u1060\\\\u1071-\\\\u1074\\\\u1082\\\\u1085\\\\u1086\\\\u108d\\\\u109d\\\\u135f\\\\u1712-\\\\u1714\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17b7-\\\\u17bd\\\\u17c6\\\\u17c9-\\\\u17d3\\\\u17dd\\\\u180b-\\\\u180d\\\\u18a9\\\\u1920-\\\\u1922\\\\u1927\\\\u1928\\\\u1932\\\\u1939-\\\\u193b\\\\u1a17\\\\u1a18\\\\u1a56\\\\u1a58-\\\\u1a5e\\\\u1a60\\\\u1a62\\\\u1a65-\\\\u1a6c\\\\u1a73-\\\\u1a7c\\\\u1a7f\\\\u1b00-\\\\u1b03\\\\u1b34\\\\u1b36-\\\\u1b3a\\\\u1b3c\\\\u1b42\\\\u1b6b-\\\\u1b73\\\\u1b80\\\\u1b81\\\\u1ba2-\\\\u1ba5\\\\u1ba8\\\\u1ba9\\\\u1c2c-\\\\u1c33\\\\u1c36\\\\u1c37\\\\u1cd0-\\\\u1cd2\\\\u1cd4-\\\\u1ce0\\\\u1ce2-\\\\u1ce8\\\\u1ced\\\\u1dc0-\\\\u1de6\\\\u1dfd-\\\\u1dff\\\\u200c\\\\u200d\\\\u20d0-\\\\u20f0\\\\u2cef-\\\\u2cf1\\\\u2de0-\\\\u2dff\\\\u302a-\\\\u302f\\\\u3099\\\\u309a\\\\ua66f-\\\\ua672\\\\ua67c\\\\ua67d\\\\ua6f0\\\\ua6f1\\\\ua802\\\\ua806\\\\ua80b\\\\ua825\\\\ua826\\\\ua8c4\\\\ua8e0-\\\\ua8f1\\\\ua926-\\\\ua92d\\\\ua947-\\\\ua951\\\\ua980-\\\\ua982\\\\ua9b3\\\\ua9b6-\\\\ua9b9\\\\ua9bc\\\\uaa29-\\\\uaa2e\\\\uaa31\\\\uaa32\\\\uaa35\\\\uaa36\\\\uaa43\\\\uaa4c\\\\uaab0\\\\uaab2-\\\\uaab4\\\\uaab7\\\\uaab8\\\\uaabe\\\\uaabf\\\\uaac1\\\\uabe5\\\\uabe8\\\\uabed\\\\udc00-\\\\udfff\\\\ufb1e\\\\ufe00-\\\\ufe0f\\\\ufe20-\\\\ufe26\\\\uff9e\\\\uff9f]/;function ie(e){return e.charCodeAt(0)>=768&&ne.test(e)}function oe(e,t,r){for(;(r<0?t>0:t<e.length)&&ie(e.charAt(t));)t+=r;return t}function le(e,t,r){for(var n=t>r?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function se(e,t){if((t-=e.first)<0||t>=e.size)throw new Error(\\\"There is no line \\\"+(t+e.first)+\\\" in the document.\\\");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function ae(e,t,r){var n=[],i=t.line;return e.iter(t.line,r.line+1,function(e){var o=e.text;i==r.line&&(o=o.slice(0,r.ch)),i==t.line&&(o=o.slice(t.ch)),n.push(o),++i}),n}function ue(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function ce(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function he(e){if(null==e.parent)return null;for(var t=e.parent,r=B(t.lines,e),n=t.parent;n;t=n,n=n.parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function fe(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l].height;if(t<s)break;t-=s}return r+l}function de(e,t){return t>=e.first&&t<e.first+e.size}function pe(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function ge(e,t,r){if(void 0===r&&(r=null),!(this instanceof ge))return new ge(e,t,r);this.line=e,this.ch=t,this.sticky=r}function ve(e,t){return e.line-t.line||e.ch-t.ch}function me(e,t){return e.sticky==t.sticky&&0==ve(e,t)}function ye(e){return ge(e.line,e.ch)}function be(e,t){return ve(e,t)<0?t:e}function we(e,t){return ve(e,t)<0?e:t}function xe(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function Ce(e,t){if(t.line<e.first)return ge(e.first,0);var r,n,i,o=e.first+e.size-1;return t.line>o?ge(o,se(e,o).text.length):(r=t,n=se(e,t.line).text.length,null==(i=r.ch)||i>n?ge(r.line,n):i<0?ge(r.line,0):r)}function Se(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=Ce(e,t[n]);return r}var Le=!1,ke=!1;function Te(e,t,r){this.marker=e,this.from=t,this.to=r}function Me(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function Ne(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function Oe(e,t){if(t.full)return null;var r=de(e,t.from.line)&&se(e,t.from.line).markedSpans,n=de(e,t.to.line)&&se(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,l=0==ve(t.from,t.to),s=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;if(null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t)||o.from==t&&\\\"bookmark\\\"==l.type&&(!r||!o.marker.insertLeft)){var s=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new Te(l,o.from,s?null:o.to))}}return n}(r,i,l),a=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;if(null==o.to||(l.inclusiveRight?o.to>=t:o.to>t)||o.from==t&&\\\"bookmark\\\"==l.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new Te(l,s?null:o.from-t,null==o.to?null:o.to-t))}}return n}(n,o,l),u=1==t.text.length,c=q(t.text).length+(u?i:0);if(s)for(var h=0;h<s.length;++h){var f=s[h];if(null==f.to){var d=Me(a,f.marker);d?u&&(f.to=null==d.to?null:d.to+c):f.to=i}}if(a)for(var p=0;p<a.length;++p){var g=a[p];if(null!=g.to&&(g.to+=c),null==g.from)Me(s,g.marker)||(g.from=c,u&&(s||(s=[])).push(g));else g.from+=c,u&&(s||(s=[])).push(g)}s&&(s=Ae(s)),a&&a!=s&&(a=Ae(a));var v=[s];if(!u){var m,y=t.text.length-2;if(y>0&&s)for(var b=0;b<s.length;++b)null==s[b].to&&(m||(m=[])).push(new Te(s[b].marker,null,null));for(var w=0;w<y;++w)v.push(m);v.push(a)}return v}function Ae(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function De(e){var t=e.markedSpans;if(t){for(var r=0;r<t.length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function We(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function He(e){return e.inclusiveLeft?-1:0}function Fe(e){return e.inclusiveRight?1:0}function Pe(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=ve(n.from,i.from)||He(e)-He(t);if(o)return-o;var l=ve(n.to,i.to)||Fe(e)-Fe(t);return l||t.id-e.id}function Ee(e,t){var r,n=ke&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)(i=n[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!r||Pe(r,i.marker)<0)&&(r=i.marker);return r}function ze(e){return Ee(e,!0)}function Ie(e){return Ee(e,!1)}function Re(e,t,r,n,i){var o=se(e,t),l=ke&&o.markedSpans;if(l)for(var s=0;s<l.length;++s){var a=l[s];if(a.marker.collapsed){var u=a.marker.find(0),c=ve(u.from,r)||He(a.marker)-He(i),h=ve(u.to,n)||Fe(a.marker)-Fe(i);if(!(c>=0&&h<=0||c<=0&&h>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?ve(u.to,r)>=0:ve(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?ve(u.from,n)<=0:ve(u.from,n)<0)))return!0}}}function Be(e){for(var t;t=ze(e);)e=t.find(-1,!0).line;return e}function Ge(e,t){var r=se(e,t),n=Be(r);return r==n?t:he(n)}function Ue(e,t){if(t>e.lastLine())return t;var r,n=se(e,t);if(!Ve(e,n))return t;for(;r=Ie(n);)n=r.find(1,!0).line;return he(n)+1}function Ve(e,t){var r=ke&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if((n=r[i]).marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&Ke(e,t,n))return!0}}function Ke(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return Ke(e,n.line,Me(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if((i=t.markedSpans[o]).marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null==i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&Ke(e,t,i))return!0}function je(e){for(var t=0,r=(e=Be(e)).parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;o=(r=o).parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==r)break;t+=s.height}return t}function Xe(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=ze(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=Ie(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,r+=(n=o.to.line).text.length-o.to.ch}return r}function Ye(e){var t=e.display,r=e.doc;t.maxLine=se(r,r.first),t.maxLineLength=Xe(t.maxLine),t.maxLineChanged=!0,r.iter(function(e){var r=Xe(e);r>t.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}var _e=null;function qe(e,t,r){var n;_e=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&\\\"before\\\"==r?n=i:_e=i),o.from==t&&(o.from!=o.to&&\\\"before\\\"!=r?n=i:_e=i)}return null!=n?n:_e}var $e=function(){var e=\\\"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\\\",t=\\\"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\\\";var r=/[\\\\u0590-\\\\u05f4\\\\u0600-\\\\u06ff\\\\u0700-\\\\u08ac]/,n=/[stwN]/,i=/[LRr]/,o=/[Lb1n]/,l=/[1n]/;function s(e,t,r){this.level=e,this.from=t,this.to=r}return function(a,u){var c=\\\"ltr\\\"==u?\\\"L\\\":\\\"R\\\";if(0==a.length||\\\"ltr\\\"==u&&!r.test(a))return!1;for(var h,f=a.length,d=[],p=0;p<f;++p)d.push((h=a.charCodeAt(p))<=247?e.charAt(h):1424<=h&&h<=1524?\\\"R\\\":1536<=h&&h<=1785?t.charAt(h-1536):1774<=h&&h<=2220?\\\"r\\\":8192<=h&&h<=8203?\\\"w\\\":8204==h?\\\"b\\\":\\\"L\\\");for(var g=0,v=c;g<f;++g){var m=d[g];\\\"m\\\"==m?d[g]=v:v=m}for(var y=0,b=c;y<f;++y){var w=d[y];\\\"1\\\"==w&&\\\"r\\\"==b?d[y]=\\\"n\\\":i.test(w)&&(b=w,\\\"r\\\"==w&&(d[y]=\\\"R\\\"))}for(var x=1,C=d[0];x<f-1;++x){var S=d[x];\\\"+\\\"==S&&\\\"1\\\"==C&&\\\"1\\\"==d[x+1]?d[x]=\\\"1\\\":\\\",\\\"!=S||C!=d[x+1]||\\\"1\\\"!=C&&\\\"n\\\"!=C||(d[x]=C),C=S}for(var L=0;L<f;++L){var k=d[L];if(\\\",\\\"==k)d[L]=\\\"N\\\";else if(\\\"%\\\"==k){var T=void 0;for(T=L+1;T<f&&\\\"%\\\"==d[T];++T);for(var M=L&&\\\"!\\\"==d[L-1]||T<f&&\\\"1\\\"==d[T]?\\\"1\\\":\\\"N\\\",N=L;N<T;++N)d[N]=M;L=T-1}}for(var O=0,A=c;O<f;++O){var D=d[O];\\\"L\\\"==A&&\\\"1\\\"==D?d[O]=\\\"L\\\":i.test(D)&&(A=D)}for(var W=0;W<f;++W)if(n.test(d[W])){var H=void 0;for(H=W+1;H<f&&n.test(d[H]);++H);for(var F=\\\"L\\\"==(W?d[W-1]:c),P=F==(\\\"L\\\"==(H<f?d[H]:c))?F?\\\"L\\\":\\\"R\\\":c,E=W;E<H;++E)d[E]=P;W=H-1}for(var z,I=[],R=0;R<f;)if(o.test(d[R])){var B=R;for(++R;R<f&&o.test(d[R]);++R);I.push(new s(0,B,R))}else{var G=R,U=I.length;for(++R;R<f&&\\\"L\\\"!=d[R];++R);for(var V=G;V<R;)if(l.test(d[V])){G<V&&I.splice(U,0,new s(1,G,V));var K=V;for(++V;V<R&&l.test(d[V]);++V);I.splice(U,0,new s(2,K,V)),G=V}else++V;G<R&&I.splice(U,0,new s(1,G,R))}return\\\"ltr\\\"==u&&(1==I[0].level&&(z=a.match(/^\\\\s+/))&&(I[0].from=z[0].length,I.unshift(new s(0,0,z[0].length))),1==q(I).level&&(z=a.match(/\\\\s+$/))&&(q(I).to-=z[0].length,I.push(new s(0,f-z[0].length,f)))),\\\"rtl\\\"==u?I.reverse():I}}();function Ze(e,t){var r=e.order;return null==r&&(r=e.order=$e(e.text,t)),r}var Qe=[],Je=function(e,t,r){if(e.addEventListener)e.addEventListener(t,r,!1);else if(e.attachEvent)e.attachEvent(\\\"on\\\"+t,r);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||Qe).concat(r)}};function et(e,t){return e._handlers&&e._handlers[t]||Qe}function tt(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent(\\\"on\\\"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=B(i,r);o>-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function rt(e,t){var r=et(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function nt(e,t,r){return\\\"string\\\"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),rt(e,r||t.type,e,t),ut(t)||t.codemirrorIgnore}function it(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.length;++n)-1==B(r,t[n])&&r.push(t[n])}function ot(e,t){return et(e,t).length>0}function lt(e){e.prototype.on=function(e,t){Je(this,e,t)},e.prototype.off=function(e,t){tt(this,e,t)}}function st(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function at(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function ut(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ct(e){st(e),at(e)}function ht(e){return e.target||e.srcElement}function ft(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var dt,pt,gt=function(){if(l&&s<9)return!1;var e=O(\\\"div\\\");return\\\"draggable\\\"in e||\\\"dragDrop\\\"in e}();function vt(e){if(null==dt){var t=O(\\\"span\\\",\\\"\\\");N(e,O(\\\"span\\\",[t,document.createTextNode(\\\"x\\\")])),0!=e.firstChild.offsetHeight&&(dt=t.offsetWidth<=1&&t.offsetHeight>2&&!(l&&s<8))}var r=dt?O(\\\"span\\\",\\\"\\\"):O(\\\"span\\\",\\\" \\\",null,\\\"display: inline-block; width: 1px; margin-right: -1px\\\");return r.setAttribute(\\\"cm-text\\\",\\\"\\\"),r}function mt(e){if(null!=pt)return pt;var t=N(e,document.createTextNode(\\\"AخA\\\")),r=k(t,0,1).getBoundingClientRect(),n=k(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(pt=n.right-r.right<3)}var yt,bt=3!=\\\"\\\\n\\\\nb\\\".split(/\\\\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf(\\\"\\\\n\\\",t);-1==i&&(i=e.length);var o=e.slice(t,\\\"\\\\r\\\"==e.charAt(i-1)?i-1:i),l=o.indexOf(\\\"\\\\r\\\");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\\\\r\\\\n?|\\\\n/)},wt=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints(\\\"StartToEnd\\\",t)},xt=\\\"oncopy\\\"in(yt=O(\\\"div\\\"))||(yt.setAttribute(\\\"oncopy\\\",\\\"return;\\\"),\\\"function\\\"==typeof yt.oncopy),Ct=null;var St={},Lt={};function kt(e){if(\\\"string\\\"==typeof e&&Lt.hasOwnProperty(e))e=Lt[e];else if(e&&\\\"string\\\"==typeof e.name&&Lt.hasOwnProperty(e.name)){var t=Lt[e.name];\\\"string\\\"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if(\\\"string\\\"==typeof e&&/^[\\\\w\\\\-]+\\\\/[\\\\w\\\\-]+\\\\+xml$/.test(e))return kt(\\\"application/xml\\\");if(\\\"string\\\"==typeof e&&/^[\\\\w\\\\-]+\\\\/[\\\\w\\\\-]+\\\\+json$/.test(e))return kt(\\\"application/json\\\")}return\\\"string\\\"==typeof e?{name:e}:e||{name:\\\"null\\\"}}function Tt(e,t){t=kt(t);var r=St[t.name];if(!r)return Tt(e,\\\"text/plain\\\");var n=r(e,t);if(Mt.hasOwnProperty(t.name)){var i=Mt[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n[\\\"_\\\"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}var Mt={};function Nt(e,t){z(t,Mt.hasOwnProperty(e)?Mt[e]:Mt[e]={})}function Ot(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function At(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Dt(e,t,r){return!e.startState||e.startState(t,r)}var Wt=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};Wt.prototype.eol=function(){return this.pos>=this.string.length},Wt.prototype.sol=function(){return this.pos==this.lineStart},Wt.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Wt.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Wt.prototype.eat=function(e){var t=this.string.charAt(this.pos);if(\\\"string\\\"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Wt.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Wt.prototype.eatSpace=function(){for(var e=this.pos;/[\\\\s\\\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Wt.prototype.skipToEnd=function(){this.pos=this.string.length},Wt.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Wt.prototype.backUp=function(e){this.pos-=e},Wt.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=I(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?I(this.string,this.lineStart,this.tabSize):0)},Wt.prototype.indentation=function(){return I(this.string,null,this.tabSize)-(this.lineStart?I(this.string,this.lineStart,this.tabSize):0)},Wt.prototype.match=function(e,t,r){if(\\\"string\\\"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Wt.prototype.current=function(){return this.string.slice(this.start,this.pos)},Wt.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Wt.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Wt.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var Ht=function(e,t){this.state=e,this.lookAhead=t},Ft=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function Pt(e,t,r,n){var i=[e.state.modeGen],o={};Kt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,Kt(e,t.text,s.mode,r,function(e,t){for(var r=a;u<e;){var n=i[a];n>e&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,\\\"overlay \\\"+t),a=r+2;else for(;r<a;r+=2){var o=i[r+1];i[r+1]=(o?o+\\\" \\\":\\\"\\\")+\\\"overlay \\\"+t}},o),r.state=l,r.baseTokens=null,r.baseTokenPos=1},a=0;a<e.state.overlays.length;++a)s(a);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function Et(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=zt(e,he(t)),i=t.text.length>e.options.maxHighlightLength&&Ot(e.doc.mode,n.state),o=Pt(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function zt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new Ft(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=se(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof Ht?u.lookAhead:0)<=o.modeFrontier))return s;var c=I(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}(e,t,r),l=o>n.first&&se(n,o-1).stateAfter,s=l?Ft.fromSaved(n,l,o):new Ft(n,Dt(n.mode),o);return n.iter(o,t,function(r){It(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&n<i.viewTo?s.save():null,s.nextLine()}),r&&(n.modeFrontier=s.line),s}function It(e,t,r,n){var i=e.doc.mode,o=new Wt(t,e.options.tabSize,r);for(o.start=o.pos=n||0,\\\"\\\"==t&&Rt(i,r.state);!o.eol();)Bt(i,o,r.state),o.start=o.pos}function Rt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=At(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Bt(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=At(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error(\\\"Mode \\\"+e.name+\\\" failed to advance stream.\\\")}Ft.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Ft.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,\\\"\\\"),size:this.baseTokens[this.baseTokenPos]-e}},Ft.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Ft.fromSaved=function(e,t,r){return t instanceof Ht?new Ft(e,Ot(e.mode,t.state),r,t.lookAhead):new Ft(e,Ot(e.mode,t),r)},Ft.prototype.save=function(e){var t=!1!==e?Ot(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new Ht(t,this.maxLookAhead):t};var Gt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function Ut(e,t,r,n){var i,o,l=e.doc,s=l.mode,a=se(l,(t=Ce(l,t)).line),u=zt(e,t.line,r),c=new Wt(a.text,e.options.tabSize,u);for(n&&(o=[]);(n||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=Bt(s,c,u.state),n&&o.push(new Gt(c,i,Ot(l.mode,u.state)));return n?o:new Gt(c,i,u.state)}function Vt(e,t){if(e)for(;;){var r=e.match(/(?:^|\\\\s+)line-(background-)?(\\\\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?\\\"bgClass\\\":\\\"textClass\\\";null==t[n]?t[n]=r[2]:new RegExp(\\\"(?:^|s)\\\"+r[2]+\\\"(?:$|s)\\\").test(t[n])||(t[n]+=\\\" \\\"+r[2])}return e}function Kt(e,t,r,n,i,o,l){var s=r.flattenSpans;null==s&&(s=e.options.flattenSpans);var a,u=0,c=null,h=new Wt(t,e.options.tabSize,n),f=e.options.addModeClass&&[null];for(\\\"\\\"==t&&Vt(Rt(r,n.state),o);!h.eol();){if(h.pos>e.options.maxHighlightLength?(s=!1,l&&It(e,t,n,h.pos),h.pos=t.length,a=null):a=Vt(Bt(r,h,n.state,f),o),f){var d=f[0].name;d&&(a=\\\"m-\\\"+(a?d+\\\" \\\"+a:d))}if(!s||c!=a){for(;u<h.start;)i(u=Math.min(h.start,u+5e3),c);c=a}h.start=h.pos}for(;u<h.pos;){var p=Math.min(h.pos,u+5e3);i(p,c),u=p}}var jt=function(e,t,r){this.text=e,We(this,t),this.height=r?r(this):1};jt.prototype.lineNo=function(){return he(this)},lt(jt);var Xt={},Yt={};function _t(e,t){if(!e||/^\\\\s*$/.test(e))return null;var r=t.addModeClass?Yt:Xt;return r[e]||(r[e]=e.replace(/\\\\S+/g,\\\"cm-$&\\\"))}function qt(e,t){var r=A(\\\"span\\\",null,null,a?\\\"padding-right: .1px\\\":null),n={pre:A(\\\"pre\\\",[r],\\\"CodeMirror-line\\\"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(l||a)&&e.getOption(\\\"lineWrapping\\\")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,s=void 0;n.pos=0,n.addToken=Zt,mt(e.display.measure)&&(s=Ze(o,e.doc.direction))&&(n.addToken=Qt(n.addToken,s)),n.map=[],er(o,n,Et(e,o,t!=e.display.externalMeasured&&he(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||\\\"\\\")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||\\\"\\\"))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(vt(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(a){var u=n.content.lastChild;(/\\\\bcm-tab\\\\b/.test(u.className)||u.querySelector&&u.querySelector(\\\".cm-tab\\\"))&&(n.content.className=\\\"cm-tab-wrap-hack\\\")}return rt(e,\\\"renderLine\\\",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||\\\"\\\")),n}function $t(e){var t=O(\\\"span\\\",\\\"•\\\",\\\"cm-invalidchar\\\");return t.title=\\\"\\\\\\\\u\\\"+e.charCodeAt(0).toString(16),t.setAttribute(\\\"aria-label\\\",t.title),t}function Zt(e,t,r,n,i,o,a){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n=\\\"\\\",i=0;i<e.length;i++){var o=e.charAt(i);\\\" \\\"!=o||!r||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=\\\" \\\"),n+=o,r=\\\" \\\"==o}return n}(t,e.trailingSpace):t,h=e.cm.state.specialChars,f=!1;if(h.test(t)){u=document.createDocumentFragment();for(var d=0;;){h.lastIndex=d;var p=h.exec(t),g=p?p.index-d:t.length-d;if(g){var v=document.createTextNode(c.slice(d,d+g));l&&s<9?u.appendChild(O(\\\"span\\\",[v])):u.appendChild(v),e.map.push(e.pos,e.pos+g,v),e.col+=g,e.pos+=g}if(!p)break;d+=g+1;var m=void 0;if(\\\"\\\\t\\\"==p[0]){var y=e.cm.options.tabSize,b=y-e.col%y;(m=u.appendChild(O(\\\"span\\\",_(b),\\\"cm-tab\\\"))).setAttribute(\\\"role\\\",\\\"presentation\\\"),m.setAttribute(\\\"cm-text\\\",\\\"\\\\t\\\"),e.col+=b}else\\\"\\\\r\\\"==p[0]||\\\"\\\\n\\\"==p[0]?((m=u.appendChild(O(\\\"span\\\",\\\"\\\\r\\\"==p[0]?\\\"␍\\\":\\\"\\\",\\\"cm-invalidchar\\\"))).setAttribute(\\\"cm-text\\\",p[0]),e.col+=1):((m=e.cm.options.specialCharPlaceholder(p[0])).setAttribute(\\\"cm-text\\\",p[0]),l&&s<9?u.appendChild(O(\\\"span\\\",[m])):u.appendChild(m),e.col+=1);e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,u=document.createTextNode(c),e.map.push(e.pos,e.pos+t.length,u),l&&s<9&&(f=!0),e.pos+=t.length;if(e.trailingSpace=32==c.charCodeAt(t.length-1),r||n||i||f||a){var w=r||\\\"\\\";n&&(w+=n),i&&(w+=i);var x=O(\\\"span\\\",[u],w,a);return o&&(x.title=o),e.content.appendChild(x)}e.content.appendChild(u)}}function Qt(e,t){return function(r,n,i,o,l,s,a){i=i?i+\\\" cm-force-border\\\":\\\"cm-force-border\\\";for(var u=r.pos,c=u+n.length;;){for(var h=void 0,f=0;f<t.length&&!((h=t[f]).to>u&&h.from<=u);f++);if(h.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,h.to-u),i,o,null,s,a),o=null,n=n.slice(h.to-u),u=h.to}}}function Jt(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement(\\\"span\\\"))),i.setAttribute(\\\"cm-marker\\\",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function er(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,h,f,d=i.length,p=0,g=1,v=\\\"\\\",m=0;;){if(m==p){a=u=c=h=s=\\\"\\\",f=null,m=1/0;for(var y=[],b=void 0,w=0;w<n.length;++w){var x=n[w],C=x.marker;\\\"bookmark\\\"==C.type&&x.from==p&&C.widgetNode?y.push(C):x.from<=p&&(null==x.to||x.to>p||C.collapsed&&x.to==p&&x.from==p)?(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=\\\"\\\"),C.className&&(a+=\\\" \\\"+C.className),C.css&&(s=(s?s+\\\";\\\":\\\"\\\")+C.css),C.startStyle&&x.from==p&&(c+=\\\" \\\"+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&!h&&(h=C.title),C.collapsed&&(!f||Pe(f.marker,C)<0)&&(f=x)):x.from>p&&m>x.from&&(m=x.from)}if(b)for(var S=0;S<b.length;S+=2)b[S+1]==m&&(u+=\\\" \\\"+b[S]);if(!f||f.from==p)for(var L=0;L<y.length;++L)Jt(t,0,y[L]);if(f&&(f.from||0)==p){if(Jt(t,(null==f.to?d+1:f.to)-p,f.marker,null==f.from),null==f.to)return;f.to==p&&(f=!1)}}if(p>=d)break;for(var k=Math.min(d,m);;){if(v){var T=p+v.length;if(!f){var M=T>k?v.slice(0,k-p):v;t.addToken(t,M,l?l+a:a,c,p+M.length==m?u:\\\"\\\",h,s)}if(T>=k){v=v.slice(k-p),p=k;break}p=T,c=\\\"\\\"}v=i.slice(o,o=r[g++]),l=_t(r[g++],t.cm.options)}}else for(var N=1;N<r.length;N+=2)t.addToken(t,i.slice(o,o=r[N]),_t(r[N+1],t.cm.options))}function tr(e,t,r){this.line=t,this.rest=function(e){for(var t,r;t=Ie(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}(t),this.size=this.rest?he(q(this.rest))-r+1:1,this.node=this.text=null,this.hidden=Ve(e,t)}function rr(e,t,r){for(var n,i=[],o=t;o<r;o=n){var l=new tr(e.doc,se(e.doc,o),o);n=o+l.size,i.push(l)}return i}var nr=null;var ir=null;function or(e,t){var r=et(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);nr?n=nr.delayedCallbacks:ir?n=ir:(n=ir=[],setTimeout(lr,0));for(var o=function(e){n.push(function(){return r[e].apply(null,i)})},l=0;l<r.length;++l)o(l)}}function lr(){var e=ir;ir=null;for(var t=0;t<e.length;++t)e[t]()}function sr(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];\\\"text\\\"==o?cr(e,t):\\\"gutter\\\"==o?fr(e,t,r,n):\\\"class\\\"==o?hr(e,t):\\\"widget\\\"==o&&dr(e,t,n)}t.changes=null}function ar(e){return e.node==e.text&&(e.node=O(\\\"div\\\",null,null,\\\"position: relative\\\"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),l&&s<8&&(e.node.style.zIndex=2)),e.node}function ur(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):qt(e,t)}function cr(e,t){var r=t.text.className,n=ur(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,hr(e,t)):r&&(t.text.className=r)}function hr(e,t){!function(e,t){var r=t.bgClass?t.bgClass+\\\" \\\"+(t.line.bgClass||\\\"\\\"):t.line.bgClass;if(r&&(r+=\\\" CodeMirror-linebackground\\\"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var n=ar(t);t.background=n.insertBefore(O(\\\"div\\\",null,r),n.firstChild),e.display.input.setUneditable(t.background)}}(e,t),t.line.wrapClass?ar(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=\\\"\\\");var r=t.textClass?t.textClass+\\\" \\\"+(t.line.textClass||\\\"\\\"):t.line.textClass;t.text.className=r||\\\"\\\"}function fr(e,t,r,n){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=ar(t);t.gutterBackground=O(\\\"div\\\",null,\\\"CodeMirror-gutter-background \\\"+t.line.gutterClass,\\\"left: \\\"+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+\\\"px; width: \\\"+n.gutterTotalWidth+\\\"px\\\"),e.display.input.setUneditable(t.gutterBackground),i.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var l=ar(t),s=t.gutter=O(\\\"div\\\",null,\\\"CodeMirror-gutter-wrapper\\\",\\\"left: \\\"+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+\\\"px\\\");if(e.display.input.setUneditable(s),l.insertBefore(s,t.text),t.line.gutterClass&&(s.className+=\\\" \\\"+t.line.gutterClass),!e.options.lineNumbers||o&&o[\\\"CodeMirror-linenumbers\\\"]||(t.lineNumber=s.appendChild(O(\\\"div\\\",pe(e.options,r),\\\"CodeMirror-linenumber CodeMirror-gutter-elt\\\",\\\"left: \\\"+n.gutterLeft[\\\"CodeMirror-linenumbers\\\"]+\\\"px; width: \\\"+e.display.lineNumInnerWidth+\\\"px\\\"))),o)for(var a=0;a<e.options.gutters.length;++a){var u=e.options.gutters[a],c=o.hasOwnProperty(u)&&o[u];c&&s.appendChild(O(\\\"div\\\",[c],\\\"CodeMirror-gutter-elt\\\",\\\"left: \\\"+n.gutterLeft[u]+\\\"px; width: \\\"+n.gutterWidth[u]+\\\"px\\\"))}}}function dr(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,\\\"CodeMirror-linewidget\\\"==n.className&&t.node.removeChild(n);pr(e,t,r)}function pr(e,t,r){if(gr(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)gr(e,t.rest[n],t,r,!1)}function gr(e,t,r,n,i){if(t.widgets)for(var o=ar(r),l=0,s=t.widgets;l<s.length;++l){var a=s[l],u=O(\\\"div\\\",[a.node],\\\"CodeMirror-linewidget\\\");a.handleMouseEvents||u.setAttribute(\\\"cm-ignore-events\\\",\\\"true\\\"),vr(a,u,r,n),e.display.input.setUneditable(u),i&&a.above?o.insertBefore(u,r.gutter||r.text):o.appendChild(u),or(a,\\\"redraw\\\")}}function vr(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+\\\"px\\\",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+\\\"px\\\"),t.style.width=i+\\\"px\\\"}e.coverGutter&&(t.style.zIndex=5,t.style.position=\\\"relative\\\",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+\\\"px\\\"))}function mr(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!D(document.body,e.node)){var r=\\\"position: relative;\\\";e.coverGutter&&(r+=\\\"margin-left: -\\\"+t.display.gutters.offsetWidth+\\\"px;\\\"),e.noHScroll&&(r+=\\\"width: \\\"+t.display.wrapper.clientWidth+\\\"px;\\\"),N(t.display.measure,O(\\\"div\\\",[e.node],null,r))}return e.height=e.node.parentNode.offsetHeight}function yr(e,t){for(var r=ht(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&\\\"true\\\"==r.getAttribute(\\\"cm-ignore-events\\\")||r.parentNode==e.sizer&&r!=e.mover)return!0}function br(e){return e.lineSpace.offsetTop}function wr(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function xr(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=N(e.measure,O(\\\"pre\\\",\\\"x\\\")),r=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,n={left:parseInt(r.paddingLeft),right:parseInt(r.paddingRight)};return isNaN(n.left)||isNaN(n.right)||(e.cachedPaddingH=n),n}function Cr(e){return G-e.display.nativeBarWidth}function Sr(e){return e.display.scroller.clientWidth-Cr(e)-e.display.barWidth}function Lr(e){return e.display.scroller.clientHeight-Cr(e)-e.display.barHeight}function kr(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(he(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Tr(e,t,r,n){return Or(e,Nr(e,t),r,n)}function Mr(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[on(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function Nr(e,t){var r=he(t),n=Mr(e,r);n&&!n.text?n=null:n&&n.changes&&(sr(e,n,r,Jr(e)),e.curOp.forceUpdate=!0),n||(n=function(e,t){var r=he(t=Be(t)),n=e.display.externalMeasured=new tr(e.doc,t,r);n.lineN=r;var i=n.built=qt(e,n);return n.text=i.pre,N(e.display.lineMeasure,i.pre),n}(e,t));var i=kr(n,t,r);return{line:t,view:n,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function Or(e,t,r,n,i){t.before&&(r=-1);var o,a=r+(n||\\\"\\\");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(!function(e,t,r){var n=e.options.lineWrapping,i=n&&Sr(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var l=t.text.firstChild.getClientRects(),s=0;s<l.length-1;s++){var a=l[s],u=l[s+1];Math.abs(a.bottom-u.bottom)>2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Wr(t.map,r,n),a=o.node,u=o.start,c=o.end,h=o.collapse;if(3==a.nodeType){for(var f=0;f<4;f++){for(;u&&ie(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c<o.coverEnd&&ie(t.line.text.charAt(o.coverStart+c));)++c;if((i=l&&s<9&&0==u&&c==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():Hr(k(a,u,c).getClientRects(),n)).left||i.right||0==u)break;c=u,u-=1,h=\\\"right\\\"}l&&s<11&&(i=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=Ct)return Ct;var t=N(e,O(\\\"span\\\",\\\"x\\\")),r=t.getBoundingClientRect(),n=k(t,0,1).getBoundingClientRect();return Ct=Math.abs(r.left-n.left)>1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;u>0&&(h=n=\\\"right\\\"),i=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d[\\\"right\\\"==n?d.length-1:0]:a.getBoundingClientRect()}if(l&&s<9&&!u&&(!i||!i.left&&!i.right)){var p=a.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+Qr(e.display),top:p.top,bottom:p.bottom}:Dr}for(var g=i.top-t.rect.top,v=i.bottom-t.rect.top,m=(g+v)/2,y=t.view.measure.heights,b=0;b<y.length-1&&!(m<y[b]);b++);var w=b?y[b-1]:0,x=y[b],C={left:(\\\"right\\\"==h?i.right:i.left)-t.rect.left,right:(\\\"left\\\"==h?i.left:i.right)-t.rect.left,top:w,bottom:x};i.left||i.right||(C.bogus=!0);e.options.singleCursorHeightPerLine||(C.rtop=g,C.rbottom=v);return C}(e,t,r,n)).bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var Ar,Dr={left:0,right:0,top:0,bottom:0};function Wr(e,t,r){for(var n,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l=\\\"left\\\"):t<a?o=(i=t-s)+1:(u==e.length-3||t==a&&e[u+3]>t)&&(i=(o=a-s)-1,t>=a&&(l=\\\"right\\\")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?\\\"left\\\":\\\"right\\\")&&(l=r),\\\"left\\\"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l=\\\"left\\\";if(\\\"right\\\"==r&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)n=e[(u+=3)+2],l=\\\"right\\\";break}return{node:n,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function Hr(e,t){var r=Dr;if(\\\"left\\\"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;i>=0&&(r=e[i]).left==r.right;i--);return r}function Fr(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Pr(e){e.display.externalMeasure=null,M(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)Fr(e.display.view[t])}function Er(e){Pr(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function zr(){return c&&v?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function Ir(){return c&&v?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Rr(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=mr(e.widgets[r]));return t}function Br(e,t,r,n,i){if(!i){var o=Rr(t);r.top+=o,r.bottom+=o}if(\\\"line\\\"==n)return r;n||(n=\\\"local\\\");var l=je(t);if(\\\"local\\\"==n?l+=br(e.display):l-=e.display.viewOffset,\\\"page\\\"==n||\\\"window\\\"==n){var s=e.display.lineSpace.getBoundingClientRect();l+=s.top+(\\\"window\\\"==n?0:Ir());var a=s.left+(\\\"window\\\"==n?0:zr());r.left+=a,r.right+=a}return r.top+=l,r.bottom+=l,r}function Gr(e,t,r){if(\\\"div\\\"==r)return t;var n=t.left,i=t.top;if(\\\"page\\\"==r)n-=zr(),i-=Ir();else if(\\\"local\\\"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:n-l.left,top:i-l.top}}function Ur(e,t,r,n,i){return n||(n=se(e.doc,t.line)),Br(e,n,Tr(e,n,t.ch,i),r)}function Vr(e,t,r,n,i,o){function l(t,l){var s=Or(e,i,t,l?\\\"right\\\":\\\"left\\\",o);return l?s.left=s.right:s.right=s.left,Br(e,n,s,r)}n=n||se(e.doc,t.line),i||(i=Nr(e,n));var s=Ze(n,e.doc.direction),a=t.ch,u=t.sticky;if(a>=n.text.length?(a=n.text.length,u=\\\"before\\\"):a<=0&&(a=0,u=\\\"after\\\"),!s)return l(\\\"before\\\"==u?a-1:a,\\\"before\\\"==u);function c(e,t,r){return l(r?e-1:e,1==s[t].level!=r)}var h=qe(s,a,u),f=_e,d=c(a,h,\\\"before\\\"==u);return null!=f&&(d.other=c(a,f,\\\"before\\\"!=u)),d}function Kr(e,t){var r=0;t=Ce(e.doc,t),e.options.lineWrapping||(r=Qr(e.display)*t.ch);var n=se(e.doc,t.line),i=je(n)+br(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function jr(e,t,r,n,i){var o=ge(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function Xr(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return jr(n.first,0,null,!0,-1);var i=fe(n,r),o=n.first+n.size-1;if(i>o)return jr(n.first+n.size-1,se(n,o).text.length,null,!0,1);t<0&&(t=0);for(var l=se(n,i);;){var s=$r(e,l,i,t,r),a=Ie(l),u=a&&a.find(0,!0);if(!a||!(s.ch>u.from.ch||s.ch==u.from.ch&&s.xRel>0))return s;i=he(l=u.to.line)}}function Yr(e,t,r,n){n-=Rr(t);var i=t.text.length,o=le(function(t){return Or(e,r,t-1).bottom<=n},i,0);return{begin:o,end:i=le(function(t){return Or(e,r,t).top>n},o,i)}}function _r(e,t,r,n){return r||(r=Nr(e,t)),Yr(e,t,r,Br(e,t,Or(e,r,n),\\\"line\\\").top)}function qr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function $r(e,t,r,n,i){i-=je(t);var o=Nr(e,t),l=Rr(t),s=0,a=t.text.length,u=!0,c=Ze(t,e.doc.direction);if(c){var h=(e.options.lineWrapping?function(e,t,r,n,i,o,l){var s=Yr(e,t,n,l),a=s.begin,u=s.end;/\\\\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f<i.length;f++){var d=i[f];if(!(d.from>=u||d.to<=a)){var p=1!=d.level,g=Or(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=g<o?o-g+1e9:g-o;(!c||h>v)&&(c=d,h=v)}}c||(c=i[i.length-1]);c.from<a&&(c={from:a,to:c.to,level:c.level});c.to>u&&(c={from:c.from,to:u,level:c.level});return c}:function(e,t,r,n,i,o,l){var s=le(function(s){var a=i[s],u=1!=a.level;return qr(Vr(e,ge(r,u?a.to:a.from,u?\\\"before\\\":\\\"after\\\"),\\\"line\\\",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=Vr(e,ge(r,u?a.from:a.to,u?\\\"after\\\":\\\"before\\\"),\\\"line\\\",t,n);qr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a})(e,t,r,o,c,n,i);s=(u=1!=h.level)?h.from:h.to-1,a=u?h.to:h.from-1}var f,d,p=null,g=null,v=le(function(t){var r=Or(e,o,t);return r.top+=l,r.bottom+=l,!!qr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left<g.right-n,b=y==u;v=p+(b?0:1),d=b?\\\"after\\\":\\\"before\\\",f=y?g.left:g.right}else{u||v!=a&&v!=s||v++,d=0==v?\\\"after\\\":v==t.text.length?\\\"before\\\":Or(e,o,v-(u?1:0)).bottom+l<=i==u?\\\"after\\\":\\\"before\\\";var w=Vr(e,ge(r,v,d),\\\"line\\\",t,o);f=w.left,m=i<w.top||i>=w.bottom}return jr(r,v=oe(t.text,v,1),d,m,n-f)}function Zr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Ar){Ar=O(\\\"pre\\\");for(var t=0;t<49;++t)Ar.appendChild(document.createTextNode(\\\"x\\\")),Ar.appendChild(O(\\\"br\\\"));Ar.appendChild(document.createTextNode(\\\"x\\\"))}N(e.measure,Ar);var r=Ar.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),M(e.measure),r||1}function Qr(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=O(\\\"span\\\",\\\"xxxxxxxxxx\\\"),r=O(\\\"pre\\\",[t]);N(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function Jr(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)r[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[l]]=o.clientWidth;return{fixedPos:en(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function en(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function tn(e){var t=Zr(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/Qr(e.display)-3);return function(i){if(Ve(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return r?o+(Math.ceil(i.text.length/n)||1)*t:o+t}}function rn(e){var t=e.doc,r=tn(e);t.iter(function(e){var t=r(e);t!=e.height&&ce(e,t)})}function nn(e,t,r,n){var i=e.display;if(!r&&\\\"true\\\"==ht(t).getAttribute(\\\"cm-not-content\\\"))return null;var o,l,s=i.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,l=t.clientY-s.top}catch(t){return null}var a,u=Xr(e,o,l);if(n&&1==u.xRel&&(a=se(e.doc,u.line).text).length==u.ch){var c=I(a,a.length,e.options.tabSize)-a.length;u=ge(u.line,Math.max(0,Math.round((o-xr(e.display).left)/Qr(e.display))-c))}return u}function on(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function ln(e){e.display.input.showSelection(e.display.input.prepareSelection())}function sn(e,t){void 0===t&&(t=!0);for(var r=e.doc,n={},i=n.cursors=document.createDocumentFragment(),o=n.selection=document.createDocumentFragment(),l=0;l<r.sel.ranges.length;l++)if(t||l!=r.sel.primIndex){var s=r.sel.ranges[l];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var a=s.empty();(a||e.options.showCursorWhenSelecting)&&an(e,s.head,i),a||cn(e,s,o)}}return n}function an(e,t,r){var n=Vr(e,t,\\\"div\\\",null,null,!e.options.singleCursorHeightPerLine),i=r.appendChild(O(\\\"div\\\",\\\" \\\",\\\"CodeMirror-cursor\\\"));if(i.style.left=n.left+\\\"px\\\",i.style.top=n.top+\\\"px\\\",i.style.height=Math.max(0,n.bottom-n.top)*e.options.cursorHeight+\\\"px\\\",n.other){var o=r.appendChild(O(\\\"div\\\",\\\" \\\",\\\"CodeMirror-cursor CodeMirror-secondarycursor\\\"));o.style.display=\\\"\\\",o.style.left=n.other.left+\\\"px\\\",o.style.top=n.other.top+\\\"px\\\",o.style.height=.85*(n.other.bottom-n.other.top)+\\\"px\\\"}}function un(e,t){return e.top-t.top||e.left-t.left}function cn(e,t,r){var n=e.display,i=e.doc,o=document.createDocumentFragment(),l=xr(e.display),s=l.left,a=Math.max(n.sizerWidth,Sr(e)-n.sizer.offsetLeft)-l.right,u=\\\"ltr\\\"==i.direction;function c(e,t,r,n){t<0&&(t=0),t=Math.round(t),n=Math.round(n),o.appendChild(O(\\\"div\\\",null,\\\"CodeMirror-selected\\\",\\\"position: absolute; left: \\\"+e+\\\"px;\\\\n top: \\\"+t+\\\"px; width: \\\"+(null==r?a-e:r)+\\\"px;\\\\n height: \\\"+(n-t)+\\\"px\\\"))}function h(t,r,n){var o,l,h=se(i,t),f=h.text.length;function d(r,n){return Ur(e,ge(t,r),\\\"div\\\",h,n)}function p(t,r,n){var i=_r(e,h,null,t),o=\\\"ltr\\\"==r==(\\\"after\\\"==n)?\\\"left\\\":\\\"right\\\";return d(\\\"after\\\"==n?i.begin:i.end-(/\\\\s/.test(h.text.charAt(i.end-1))?2:1),o)[o]}var g=Ze(h,i.direction);return function(e,t,r,n){if(!e)return n(t,r,\\\"ltr\\\",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<r&&l.to>t||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?\\\"rtl\\\":\\\"ltr\\\",o),i=!0)}i||n(t,r,\\\"ltr\\\")}(g,r||0,null==n?f:n,function(e,t,i,h){var v=\\\"ltr\\\"==i,m=d(e,v?\\\"left\\\":\\\"right\\\"),y=d(t-1,v?\\\"right\\\":\\\"left\\\"),b=null==r&&0==e,w=null==n&&t==f,x=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var S=(u?w:b)&&C,L=(u?b:w)&&x?s:(v?m:y).left,k=S?a:(v?y:m).right;c(L,m.top,k-L,m.bottom)}else{var T,M,N,O;v?(T=u&&b&&x?s:m.left,M=u?a:p(e,i,\\\"before\\\"),N=u?s:p(t,i,\\\"after\\\"),O=u&&w&&C?a:y.right):(T=u?p(e,i,\\\"before\\\"):s,M=!u&&b&&x?a:m.right,N=!u&&w&&C?s:y.left,O=u?p(t,i,\\\"after\\\"):a),c(T,m.top,M-T,m.bottom),m.bottom<y.top&&c(s,m.bottom,null,y.top),c(N,y.top,O-N,y.bottom)}(!o||un(m,o)<0)&&(o=m),un(y,o)<0&&(o=y),(!l||un(m,l)<0)&&(l=m),un(y,l)<0&&(l=y)}),{start:o,end:l}}var f=t.from(),d=t.to();if(f.line==d.line)h(f.line,f.ch,d.ch);else{var p=se(i,f.line),g=se(i,d.line),v=Be(p)==Be(g),m=h(f.line,f.ch,v?p.text.length+1:null).end,y=h(d.line,v?0:null,d.ch).start;v&&(m.top<y.top-2?(c(m.right,m.top,null,m.bottom),c(s,y.top,y.left,y.bottom)):c(m.right,m.top,y.left-m.right,m.bottom)),m.bottom<y.top&&c(s,m.bottom,null,y.top)}r.appendChild(o)}function hn(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility=\\\"\\\",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?\\\"\\\":\\\"hidden\\\"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility=\\\"hidden\\\")}}function fn(e){e.state.focused||(e.display.input.focus(),pn(e))}function dn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,gn(e))},100)}function pn(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),\\\"nocursor\\\"!=e.options.readOnly&&(e.state.focused||(rt(e,\\\"focus\\\",e,t),e.state.focused=!0,H(e.display.wrapper,\\\"CodeMirror-focused\\\"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),a&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),hn(e))}function gn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(rt(e,\\\"blur\\\",e,t),e.state.focused=!1,T(e.display.wrapper,\\\"CodeMirror-focused\\\")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function vn(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=void 0;if(!i.hidden){if(l&&s<8){var a=i.node.offsetTop+i.node.offsetHeight;o=a-r,r=a}else{var u=i.node.getBoundingClientRect();o=u.bottom-u.top}var c=i.line.height-o;if(o<2&&(o=Zr(t)),(c>.005||c<-.005)&&(ce(i.line,o),mn(i.line),i.rest))for(var h=0;h<i.rest.length;h++)mn(i.rest[h])}}}function mn(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function yn(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-br(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=fe(t,n),l=fe(t,i);if(r&&r.ensure){var s=r.ensure.from.line,a=r.ensure.to.line;s<o?(o=s,l=fe(t,je(se(t,s))+e.wrapper.clientHeight)):Math.min(a,t.lastLine())>=l&&(o=fe(t,je(se(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function bn(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=en(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+\\\"px\\\",l=0;l<r.length;l++)if(!r[l].hidden){e.options.fixedGutter&&(r[l].gutter&&(r[l].gutter.style.left=o),r[l].gutterBackground&&(r[l].gutterBackground.style.left=o));var s=r[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=n+i+\\\"px\\\")}}function wn(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=pe(e.options,t.first+t.size-1),n=e.display;if(r.length!=n.lineNumChars){var i=n.measure.appendChild(O(\\\"div\\\",[O(\\\"div\\\",r)],\\\"CodeMirror-linenumber CodeMirror-gutter-elt\\\")),o=i.firstChild.offsetWidth,l=i.offsetWidth-o;return n.lineGutter.style.width=\\\"\\\",n.lineNumInnerWidth=Math.max(o,n.lineGutter.offsetWidth-l)+1,n.lineNumWidth=n.lineNumInnerWidth+l,n.lineNumChars=n.lineNumInnerWidth?r.length:-1,n.lineGutter.style.width=n.lineNumWidth+\\\"px\\\",oi(e),!0}return!1}function xn(e,t){var r=e.display,n=Zr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Lr(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+wr(r),a=t.top<n,u=t.bottom>s-n;if(t.top<i)l.scrollTop=a?0:t.top;else if(t.bottom>i+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=Sr(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>f;return d&&(t.right=t.left+f),t.left<10?l.scrollLeft=0:t.left<h?l.scrollLeft=Math.max(0,t.left-(d?0:10)):t.right>f+h-3&&(l.scrollLeft=t.right+(d?0:10)-f),l}function Cn(e,t){null!=t&&(kn(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Sn(e){kn(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Ln(e,t,r){null==t&&null==r||kn(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function kn(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Tn(e,Kr(e,t.from),Kr(e,t.to),t.margin))}function Tn(e,t,r,n){var i=xn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Ln(e,i.scrollLeft,i.scrollTop)}function Mn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||ii(e,{top:t}),Nn(e,t,!0),r&&ii(e),Jn(e,100))}function Nn(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function On(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,bn(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function An(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+wr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Cr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var Dn=function(e,t,r){this.cm=r;var n=this.vert=O(\\\"div\\\",[O(\\\"div\\\",null,null,\\\"min-width: 1px\\\")],\\\"CodeMirror-vscrollbar\\\"),i=this.horiz=O(\\\"div\\\",[O(\\\"div\\\",null,null,\\\"height: 100%; min-height: 1px\\\")],\\\"CodeMirror-hscrollbar\\\");e(n),e(i),Je(n,\\\"scroll\\\",function(){n.clientHeight&&t(n.scrollTop,\\\"vertical\\\")}),Je(i,\\\"scroll\\\",function(){i.clientWidth&&t(i.scrollLeft,\\\"horizontal\\\")}),this.checkedZeroWidth=!1,l&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth=\\\"18px\\\")};Dn.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display=\\\"block\\\",this.vert.style.bottom=t?n+\\\"px\\\":\\\"0\\\";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+\\\"px\\\"}else this.vert.style.display=\\\"\\\",this.vert.firstChild.style.height=\\\"0\\\";if(t){this.horiz.style.display=\\\"block\\\",this.horiz.style.right=r?n+\\\"px\\\":\\\"0\\\",this.horiz.style.left=e.barLeft+\\\"px\\\";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+\\\"px\\\"}else this.horiz.style.display=\\\"\\\",this.horiz.firstChild.style.width=\\\"0\\\";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},Dn.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,\\\"horiz\\\")},Dn.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,\\\"vert\\\")},Dn.prototype.zeroWidthHack=function(){var e=y&&!d?\\\"12px\\\":\\\"18px\\\";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents=\\\"none\\\",this.disableHoriz=new R,this.disableVert=new R},Dn.prototype.enableZeroWidthBar=function(e,t,r){e.style.pointerEvents=\\\"auto\\\",t.set(1e3,function n(){var i=e.getBoundingClientRect();(\\\"vert\\\"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents=\\\"none\\\":t.set(1e3,n)})},Dn.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Wn=function(){};function Hn(e,t){t||(t=An(e));var r=e.display.barWidth,n=e.display.barHeight;Fn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&vn(e),Fn(e,An(e)),r=e.display.barWidth,n=e.display.barHeight}function Fn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+\\\"px\\\",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+\\\"px\\\",r.heightForcer.style.borderBottom=n.bottom+\\\"px solid transparent\\\",n.right&&n.bottom?(r.scrollbarFiller.style.display=\\\"block\\\",r.scrollbarFiller.style.height=n.bottom+\\\"px\\\",r.scrollbarFiller.style.width=n.right+\\\"px\\\"):r.scrollbarFiller.style.display=\\\"\\\",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display=\\\"block\\\",r.gutterFiller.style.height=n.bottom+\\\"px\\\",r.gutterFiller.style.width=t.gutterWidth+\\\"px\\\"):r.gutterFiller.style.display=\\\"\\\"}Wn.prototype.update=function(){return{bottom:0,right:0}},Wn.prototype.setScrollLeft=function(){},Wn.prototype.setScrollTop=function(){},Wn.prototype.clear=function(){};var Pn={native:Dn,null:Wn};function En(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Pn[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),Je(t,\\\"mousedown\\\",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute(\\\"cm-not-content\\\",\\\"true\\\")},function(t,r){\\\"horizontal\\\"==r?On(e,t):Mn(e,t)},e),e.display.scrollbars.addClass&&H(e.display.wrapper,e.display.scrollbars.addClass)}var zn=0;function In(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++zn},t=e.curOp,nr?nr.ops.push(t):t.ownsGroup=nr={ops:[t],delayedCallbacks:[]}}function Rn(e){!function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}(r)}finally{nr=null,t(r)}}(e.curOp,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(e){for(var t=e.ops,r=0;r<t.length;r++)Bn(t[r]);for(var n=0;n<t.length;n++)(i=t[n]).updatedDisplay=i.mustUpdate&&ri(i.cm,i.update);var i;for(var o=0;o<t.length;o++)Gn(t[o]);for(var l=0;l<t.length;l++)Un(t[l]);for(var s=0;s<t.length;s++)Vn(t[s])}(e)})}function Bn(e){var t,r,n=e.cm,i=n.display;!(r=(t=n).display).scrollbarsClipped&&r.scroller.offsetWidth&&(r.nativeBarWidth=r.scroller.offsetWidth-r.scroller.clientWidth,r.heightForcer.style.height=Cr(t)+\\\"px\\\",r.sizer.style.marginBottom=-r.nativeBarWidth+\\\"px\\\",r.sizer.style.borderRightWidth=Cr(t)+\\\"px\\\",r.scrollbarsClipped=!0),e.updateMaxLine&&Ye(n),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<i.viewFrom||e.scrollToPos.to.line>=i.viewTo)||i.maxLineChanged&&n.options.lineWrapping,e.update=e.mustUpdate&&new ti(n,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Gn(e){var t=e.cm,r=t.display;e.updatedDisplay&&vn(t),e.barMeasure=An(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Tr(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Cr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Sr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function Un(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+\\\"px\\\",e.maxScrollLeft<t.doc.scrollLeft&&On(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==W();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&Hn(t,e.barMeasure),e.updatedDisplay&&li(t,e.barMeasure),e.selectionChanged&&hn(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&fn(e.cm)}function Vn(e){var t=e.cm,r=t.display,n=t.doc;(e.updatedDisplay&&ni(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&Nn(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&On(t,e.scrollLeft,!0,!0),e.scrollToPos)&&function(e,t){if(!nt(e,\\\"scrollCursorIntoView\\\")){var r=e.display,n=r.sizer.getBoundingClientRect(),i=null;if(t.top+n.top<0?i=!0:t.bottom+n.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=O(\\\"div\\\",\\\"\\\",null,\\\"position: absolute;\\\\n top: \\\"+(t.top-r.viewOffset-br(e.display))+\\\"px;\\\\n height: \\\"+(t.bottom-t.top+Cr(e)+r.barHeight)+\\\"px;\\\\n left: \\\"+t.left+\\\"px; width: \\\"+Math.max(2,t.right-t.left)+\\\"px;\\\");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r=\\\"before\\\"==(t=t.ch?ge(t.line,\\\"before\\\"==t.sticky?t.ch-1:t.ch,\\\"after\\\"):t).sticky?ge(t.line,t.ch+1,\\\"before\\\"):t);for(var o=0;o<5;o++){var l=!1,s=Vr(e,t),a=r&&r!=t?Vr(e,r):s,u=xn(e,i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n}),c=e.doc.scrollTop,h=e.doc.scrollLeft;if(null!=u.scrollTop&&(Mn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(On(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-h)>1&&(l=!0)),!l)break}return i}(t,Ce(n,e.scrollToPos.from),Ce(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l<i.length;++l)i[l].lines.length||rt(i[l],\\\"hide\\\");if(o)for(var s=0;s<o.length;++s)o[s].lines.length&&rt(o[s],\\\"unhide\\\");r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&rt(t,\\\"changes\\\",t,e.changeObjs),e.update&&e.update.finish()}function Kn(e,t){if(e.curOp)return t();In(e);try{return t()}finally{Rn(e)}}function jn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);In(e);try{return t.apply(e,arguments)}finally{Rn(e)}}}function Xn(e){return function(){if(this.curOp)return e.apply(this,arguments);In(this);try{return e.apply(this,arguments)}finally{Rn(this)}}}function Yn(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);In(t);try{return e.apply(this,arguments)}finally{Rn(t)}}}function _n(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)ke&&Ge(e.doc,t)<i.viewTo&&$n(e);else if(r<=i.viewFrom)ke&&Ue(e.doc,r+n)>i.viewFrom?$n(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)$n(e);else if(t<=i.viewFrom){var o=Zn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):$n(e)}else if(r>=i.viewTo){var l=Zn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):$n(e)}else{var s=Zn(e,t,t,-1),a=Zn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(rr(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):$n(e)}var u=i.externalMeasured;u&&(r<u.lineN?u.lineN+=n:t<u.lineN+u.size&&(i.externalMeasured=null))}function qn(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externalMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[on(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==B(l,r)&&l.push(r)}}}function $n(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Zn(e,t,r,n){var i,o=on(e,t),l=e.display.view;if(!ke||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(n>0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;Ge(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function Qn(e){for(var t=e.display.view,r=0,n=0;n<t.length;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function Jn(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,E(ei,e))}function ei(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,n=zt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?Ot(t.mode,n.state):null,a=Pt(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var h=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),f=0;!h&&f<l.length;++f)h=l[f]!=o.styles[f];h&&i.push(n.line),o.stateAfter=n.save(),n.nextLine()}else o.text.length<=e.options.maxHighlightLength&&It(e,o.text,n),o.stateAfter=n.line%5==0?n.save():null,n.nextLine();if(+new Date>r)return Jn(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&Kn(e,function(){for(var t=0;t<i.length;t++)qn(e,i[t],\\\"text\\\")})}}var ti=function(e,t,r){var n=e.display;this.viewport=t,this.visible=yn(n,e.doc,t),this.editorIsHidden=!n.wrapper.offsetWidth,this.wrapperHeight=n.wrapper.clientHeight,this.wrapperWidth=n.wrapper.clientWidth,this.oldDisplayWidth=Sr(e),this.force=r,this.dims=Jr(e),this.events=[]};function ri(e,t){var r=e.display,n=e.doc;if(t.editorIsHidden)return $n(e),!1;if(!t.force&&t.visible.from>=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==Qn(e))return!1;wn(e)&&($n(e),t.dims=Jr(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFrom<o&&o-r.viewFrom<20&&(o=Math.max(n.first,r.viewFrom)),r.viewTo>l&&r.viewTo-l<20&&(l=Math.min(i,r.viewTo)),ke&&(o=Ge(e.doc,o),l=Ue(e.doc,l));var s,u,c,h,f=o!=r.viewFrom||l!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;u=o,c=l,0==(h=(s=e).display).view.length||u>=h.viewTo||c<=h.viewFrom?(h.view=rr(s,u,c),h.viewFrom=u):(h.viewFrom>u?h.view=rr(s,u,h.viewFrom).concat(h.view):h.viewFrom<u&&(h.view=h.view.slice(on(s,u))),h.viewFrom=u,h.viewTo<c?h.view=h.view.concat(rr(s,h.viewTo,c)):h.viewTo>c&&(h.view=h.view.slice(0,on(s,c)))),h.viewTo=c,r.viewOffset=je(se(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+\\\"px\\\";var d=Qn(e);if(!f&&0==d&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var p=function(e){if(e.hasFocus())return null;var t=W();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return d>4&&(r.lineDiv.style.display=\\\"none\\\"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,l=o.firstChild;function s(t){var r=t.nextSibling;return a&&y&&e.display.currentWheelTarget==t?t.style.display=\\\"none\\\":t.parentNode.removeChild(t),r}for(var u=n.view,c=n.viewFrom,h=0;h<u.length;h++){var f=u[h];if(f.hidden);else if(f.node&&f.node.parentNode==o){for(;l!=f.node;)l=s(l);var d=i&&null!=t&&t<=c&&f.lineNumber;f.changes&&(B(f.changes,\\\"gutter\\\")>-1&&(d=!1),sr(e,f,c,r)),d&&(M(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(pe(e.options,c)))),l=f.node.nextSibling}else{var p=(m=c,b=r,void 0,w=ur(g=e,v=f),v.text=v.node=w.pre,w.bgClass&&(v.bgClass=w.bgClass),w.textClass&&(v.textClass=w.textClass),hr(g,v),fr(g,v,m,b),pr(g,v,b),v.node);o.insertBefore(p,l)}c+=f.size}var g,v,m,b,w;for(;l;)l=s(l)}(e,r.updateLineNumbers,t.dims),d>4&&(r.lineDiv.style.display=\\\"\\\"),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=W()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(p),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,f&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,Jn(e,400)),r.updateLineNumbers=null,!0}function ni(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Sr(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+wr(e.display)-Lr(e),r.top)}),t.visible=yn(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ri(e,t);n=!1){vn(e);var i=An(e);ln(e),Hn(e,i),li(e,i),t.force=!1}t.signal(e,\\\"update\\\",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,\\\"viewportChange\\\",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ii(e,t){var r=new ti(e,t);if(ri(e,r)){vn(e),ni(e,r);var n=An(e);ln(e),Hn(e,n),li(e,n),r.finish()}}function oi(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+\\\"px\\\"}function li(e,t){e.display.sizer.style.minHeight=t.docHeight+\\\"px\\\",e.display.heightForcer.style.top=t.docHeight+\\\"px\\\",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Cr(e)+\\\"px\\\"}function si(e){var t=e.display.gutters,r=e.options.gutters;M(t);for(var n=0;n<r.length;++n){var i=r[n],o=t.appendChild(O(\\\"div\\\",null,\\\"CodeMirror-gutter \\\"+i));\\\"CodeMirror-linenumbers\\\"==i&&(e.display.lineGutter=o,o.style.width=(e.display.lineNumWidth||1)+\\\"px\\\")}t.style.display=n?\\\"\\\":\\\"none\\\",oi(e)}function ai(e){var t=B(e.gutters,\\\"CodeMirror-linenumbers\\\");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat([\\\"CodeMirror-linenumbers\\\"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}ti.prototype.signal=function(e,t){ot(e,t)&&this.events.push(arguments)},ti.prototype.finish=function(){for(var e=0;e<this.events.length;e++)rt.apply(null,this.events[e])};var ui=0,ci=null;function hi(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function fi(e){var t=hi(e);return t.x*=ci,t.y*=ci,t}function di(e,t){var n=hi(t),i=n.x,o=n.y,l=e.display,s=l.scroller,u=s.scrollWidth>s.clientWidth,c=s.scrollHeight>s.clientHeight;if(i&&u||o&&c){if(o&&y&&a)e:for(var f=t.target,d=l.view;f!=s;f=f.parentNode)for(var p=0;p<d.length;p++)if(d[p].node==f){e.display.currentWheelTarget=f;break e}if(i&&!r&&!h&&null!=ci)return o&&c&&Mn(e,Math.max(0,s.scrollTop+o*ci)),On(e,Math.max(0,s.scrollLeft+i*ci)),(!o||o&&c)&&st(t),void(l.wheelStartX=null);if(o&&null!=ci){var g=o*ci,v=e.doc.scrollTop,m=v+l.wrapper.clientHeight;g<0?v=Math.max(0,v+g-50):m=Math.min(e.doc.height,m+g+50),ii(e,{top:v,bottom:m})}ui<20&&(null==l.wheelStartX?(l.wheelStartX=s.scrollLeft,l.wheelStartY=s.scrollTop,l.wheelDX=i,l.wheelDY=o,setTimeout(function(){if(null!=l.wheelStartX){var e=s.scrollLeft-l.wheelStartX,t=s.scrollTop-l.wheelStartY,r=t&&l.wheelDY&&t/l.wheelDY||e&&l.wheelDX&&e/l.wheelDX;l.wheelStartX=l.wheelStartY=null,r&&(ci=(ci*ui+r)/(ui+1),++ui)}},200)):(l.wheelDX+=i,l.wheelDY+=o))}}l?ci=-.53:r?ci=15:c?ci=-.7:f&&(ci=-1/3);var pi=function(e,t){this.ranges=e,this.primIndex=t};pi.prototype.primary=function(){return this.ranges[this.primIndex]},pi.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var r=this.ranges[t],n=e.ranges[t];if(!me(r.anchor,n.anchor)||!me(r.head,n.head))return!1}return!0},pi.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new gi(ye(this.ranges[t].anchor),ye(this.ranges[t].head));return new pi(e,this.primIndex)},pi.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},pi.prototype.contains=function(e,t){t||(t=e);for(var r=0;r<this.ranges.length;r++){var n=this.ranges[r];if(ve(t,n.from())>=0&&ve(e,n.to())<=0)return r}return-1};var gi=function(e,t){this.anchor=e,this.head=t};function vi(e,t){var r=e[t];e.sort(function(e,t){return ve(e.from(),t.from())}),t=B(e,r);for(var n=1;n<e.length;n++){var i=e[n],o=e[n-1];if(ve(o.to(),i.from())>=0){var l=we(o.from(),i.from()),s=be(o.to(),i.to()),a=o.empty()?i.from()==i.head:o.from()==o.head;n<=t&&--t,e.splice(--n,2,new gi(a?s:l,a?l:s))}}return new pi(e,t)}function mi(e,t){return new pi([new gi(e,t||e)],0)}function yi(e){return e.text?ge(e.from.line+e.text.length-1,q(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function bi(e,t){if(ve(e,t.from)<0)return e;if(ve(e,t.to)<=0)return yi(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=yi(t).ch-t.to.ch),ge(r,n)}function wi(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new gi(bi(i.anchor,t),bi(i.head,t)))}return vi(r,e.sel.primIndex)}function xi(e,t,r){return e.line==t.line?ge(r.line,e.ch-t.ch+r.ch):ge(r.line+(e.line-t.line),e.ch)}function Ci(e){e.doc.mode=Tt(e.options,e.doc.modeOption),Si(e)}function Si(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Jn(e,100),e.state.modeGen++,e.curOp&&_n(e)}function Li(e,t){return 0==t.from.ch&&0==t.to.ch&&\\\"\\\"==q(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function ki(e,t,r,n){function i(e){return r?r[e]:null}function o(e,r,i){!function(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),De(e),We(e,r);var i=n?n(e):1;i!=e.height&&ce(e,i)}(e,r,i,n),or(e,\\\"change\\\",e,t)}function l(e,t){for(var r=[],o=e;o<t;++o)r.push(new jt(u[o],i(o),n));return r}var s=t.from,a=t.to,u=t.text,c=se(e,s.line),h=se(e,a.line),f=q(u),d=i(u.length-1),p=a.line-s.line;if(t.full)e.insert(0,l(0,u.length)),e.remove(u.length,e.size-u.length);else if(Li(e,t)){var g=l(0,u.length-1);o(h,h.text,d),p&&e.remove(s.line,p),g.length&&e.insert(s.line,g)}else if(c==h)if(1==u.length)o(c,c.text.slice(0,s.ch)+f+c.text.slice(a.ch),d);else{var v=l(1,u.length-1);v.push(new jt(f+c.text.slice(a.ch),d,n)),o(c,c.text.slice(0,s.ch)+u[0],i(0)),e.insert(s.line+1,v)}else if(1==u.length)o(c,c.text.slice(0,s.ch)+u[0]+h.text.slice(a.ch),i(0)),e.remove(s.line+1,p);else{o(c,c.text.slice(0,s.ch)+u[0],i(0)),o(h,f+h.text.slice(a.ch),d);var m=l(1,u.length-1);p>1&&e.remove(s.line+1,p-1),e.insert(s.line+1,m)}or(e,\\\"change\\\",e,t)}function Ti(e,t,r){!function e(n,i,o){if(n.linked)for(var l=0;l<n.linked.length;++l){var s=n.linked[l];if(s.doc!=i){var a=o&&s.sharedHist;r&&!a||(t(s.doc,a),e(s.doc,n,a))}}}(e,null,!0)}function Mi(e,t){if(t.cm)throw new Error(\\\"This document is already in use.\\\");e.doc=t,t.cm=e,rn(e),Ci(e),Ni(e),e.options.lineWrapping||Ye(e),e.options.mode=t.modeOption,_n(e)}function Ni(e){(\\\"rtl\\\"==e.doc.direction?H:T)(e.display.lineDiv,\\\"CodeMirror-rtl\\\")}function Oi(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function Ai(e,t){var r={from:ye(t.from),to:yi(t),text:ae(e,t.from,t.to)};return Pi(e,r,t.from.line,t.to.line+1),Ti(e,function(e){return Pi(e,r,t.from.line,t.to.line+1)},!0),r}function Di(e){for(;e.length;){if(!q(e).ranges)break;e.pop()}}function Wi(e,t,r,n){var i=e.history;i.undone.length=0;var o,l,s,a=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&(\\\"+\\\"==t.origin.charAt(0)&&i.lastModTime>a-(e.cm?e.cm.options.historyEventDelay:500)||\\\"*\\\"==t.origin.charAt(0)))&&(s=i,o=i.lastOp==n?(Di(s.done),q(s.done)):s.done.length&&!q(s.done).ranges?q(s.done):s.done.length>1&&!s.done[s.done.length-2].ranges?(s.done.pop(),q(s.done)):void 0))l=q(o.changes),0==ve(t.from,t.to)&&0==ve(t.from,l.to)?l.to=yi(t):o.changes.push(Ai(e,t));else{var u=q(i.done);for(u&&u.ranges||Fi(e.sel,i.done),o={changes:[Ai(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||rt(e,\\\"historyAdded\\\")}function Hi(e,t,r,n){var i,o,l,s,a,u=e.history,c=n&&n.origin;r==u.lastSelOp||c&&u.lastSelOrigin==c&&(u.lastModTime==u.lastSelTime&&u.lastOrigin==c||(i=e,o=c,l=q(u.done),s=t,\\\"*\\\"==(a=o.charAt(0))||\\\"+\\\"==a&&l.ranges.length==s.ranges.length&&l.somethingSelected()==s.somethingSelected()&&new Date-i.history.lastSelTime<=(i.cm?i.cm.options.historyEventDelay:500)))?u.done[u.done.length-1]=t:Fi(t,u.done),u.lastSelTime=+new Date,u.lastSelOrigin=c,u.lastSelOp=r,n&&!1!==n.clearRedo&&Di(u.undone)}function Fi(e,t){var r=q(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Pi(e,t,r,n){var i=t[\\\"spans_\\\"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t[\\\"spans_\\\"+e.id]={}))[o]=r.markedSpans),++o})}function Ei(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function zi(e,t){var r=function(e,t){var r=t[\\\"spans_\\\"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(Ei(r[i]));return n}(e,t),n=Oe(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],l=n[i];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(r[i]=l)}return r}function Ii(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?pi.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];n.push({changes:s});for(var a=0;a<l.length;++a){var u=l[a],c=void 0;if(s.push({from:u.from,to:u.to,text:u.text}),t)for(var h in u)(c=h.match(/^spans_(\\\\d+)$/))&&B(t,Number(c[1]))>-1&&(q(s)[h]=u[h],delete u[h])}}}return n}function Ri(e,t,r,n){if(n){var i=e.anchor;if(r){var o=ve(t,i)<0;o!=ve(r,i)<0?(i=t,t=r):o!=ve(t,r)<0&&(t=r)}return new gi(i,t)}return new gi(r||t,t)}function Bi(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),ji(e,new pi([Ri(e.sel.primary(),t,r,i)],0),n)}function Gi(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=Ri(e.sel.ranges[o],t[o],null,i);ji(e,vi(n,e.sel.primIndex),r)}function Ui(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,ji(e,vi(i,e.sel.primIndex),n)}function Vi(e,t,r,n){ji(e,mi(t,r),n)}function Ki(e,t,r){var n=e.history.done,i=q(n);i&&i.ranges?(n[n.length-1]=t,Xi(e,t,r)):ji(e,t,r)}function ji(e,t,r){Xi(e,t,r),Hi(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function Xi(e,t,r){var n,i,o,l;(ot(e,\\\"beforeSelectionChange\\\")||e.cm&&ot(e.cm,\\\"beforeSelectionChange\\\"))&&(n=e,o=r,l={ranges:(i=t).ranges,update:function(e){this.ranges=[];for(var t=0;t<e.length;t++)this.ranges[t]=new gi(Ce(n,e[t].anchor),Ce(n,e[t].head))},origin:o&&o.origin},rt(n,\\\"beforeSelectionChange\\\",n,l),n.cm&&rt(n.cm,\\\"beforeSelectionChange\\\",n.cm,l),t=l.ranges!=i.ranges?vi(l.ranges,l.ranges.length-1):i),Yi(e,qi(e,t,r&&r.bias||(ve(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),r&&!1===r.scroll||!e.cm||Sn(e.cm)}function Yi(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,it(e.cm)),or(e,\\\"cursorActivity\\\",e))}function _i(e){Yi(e,qi(e,e.sel,null,!1))}function qi(e,t,r,n){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=Zi(e,l.anchor,s&&s.anchor,r,n),u=Zi(e,l.head,s&&s.head,r,n);(i||a!=l.anchor||u!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new gi(a,u))}return i?vi(i,t.primIndex):t}function $i(e,t,r,n,i){var o=se(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker;if((null==s.from||(a.inclusiveLeft?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(a.inclusiveRight?s.to>=t.ch:s.to>t.ch))){if(i&&(rt(a,\\\"beforeCursorEnter\\\"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var u=a.find(n<0?1:-1),c=void 0;if((n<0?a.inclusiveRight:a.inclusiveLeft)&&(u=Qi(e,u,-n,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=ve(u,r))&&(n<0?c<0:c>0))return $i(e,u,t,n,i)}var h=a.find(n<0?-1:1);return(n<0?a.inclusiveLeft:a.inclusiveRight)&&(h=Qi(e,h,n,h.line==t.line?o:null)),h?$i(e,h,t,n,i):null}}return t}function Zi(e,t,r,n,i){var o=n||1,l=$i(e,t,r,o,i)||!i&&$i(e,t,r,o,!0)||$i(e,t,r,-o,i)||!i&&$i(e,t,r,-o,!0);return l||(e.cantEdit=!0,ge(e.first,0))}function Qi(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?Ce(e,ge(t.line-1)):null:r>0&&t.ch==(n||se(e,t.line)).text.length?t.line<e.first+e.size-1?ge(t.line+1,0):null:new ge(t.line,t.ch+r)}function Ji(e){e.setSelection(ge(e.firstLine(),0),ge(e.lastLine()),V)}function eo(e,t,r){var n={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return n.canceled=!0}};return r&&(n.update=function(t,r,i,o){t&&(n.from=Ce(e,t)),r&&(n.to=Ce(e,r)),i&&(n.text=i),void 0!==o&&(n.origin=o)}),rt(e,\\\"beforeChange\\\",e,n),e.cm&&rt(e.cm,\\\"beforeChange\\\",e.cm,n),n.canceled?null:{from:n.from,to:n.to,text:n.text,origin:n.origin}}function to(e,t,r){if(e.cm){if(!e.cm.curOp)return jn(e.cm,to)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(ot(e,\\\"beforeChange\\\")||e.cm&&ot(e.cm,\\\"beforeChange\\\"))||(t=eo(e,t,!0))){var n=Le&&!r&&function(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=B(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var l=n[o],s=l.find(0),a=0;a<i.length;++a){var u=i[a];if(!(ve(u.to,s.from)<0||ve(u.from,s.to)>0)){var c=[a,1],h=ve(u.from,s.from),f=ve(u.to,s.to);(h<0||!l.inclusiveLeft&&!h)&&c.push({from:u.from,to:s.from}),(f>0||!l.inclusiveRight&&!f)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)ro(e,{from:n[i].from,to:n[i].to,text:i?[\\\"\\\"]:t.text,origin:t.origin});else ro(e,t)}}function ro(e,t){if(1!=t.text.length||\\\"\\\"!=t.text[0]||0!=ve(t.from,t.to)){var r=wi(e,t);Wi(e,t,r,e.cm?e.cm.curOp.id:NaN),oo(e,t,r,Oe(e,t));var n=[];Ti(e,function(e,r){r||-1!=B(n,e.history)||(uo(e.history,t),n.push(e.history)),oo(e,t,null,Oe(e,t))})}}function no(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,l=e.sel,s=\\\"undo\\\"==t?o.done:o.undone,a=\\\"undo\\\"==t?o.undone:o.done,u=0;u<s.length&&(i=s[u],r?!i.ranges||i.equals(e.sel):i.ranges);u++);if(u!=s.length){for(o.lastOrigin=o.lastSelOrigin=null;;){if(!(i=s.pop()).ranges){if(n)return void s.push(i);break}if(Fi(i,a),r&&!i.equals(e.sel))return void ji(e,i,{clearRedo:!1});l=i}var c=[];Fi(l,a),a.push({changes:c,generation:o.generation}),o.generation=i.generation||++o.maxGeneration;for(var h=ot(e,\\\"beforeChange\\\")||e.cm&&ot(e.cm,\\\"beforeChange\\\"),f=function(r){var n=i.changes[r];if(n.origin=t,h&&!eo(e,n,!1))return s.length=0,{};c.push(Ai(e,n));var o=r?wi(e,n):q(s);oo(e,n,o,zi(e,n)),!r&&e.cm&&e.cm.scrollIntoView({from:n.from,to:yi(n)});var l=[];Ti(e,function(e,t){t||-1!=B(l,e.history)||(uo(e.history,n),l.push(e.history)),oo(e,n,null,zi(e,n))})},d=i.changes.length-1;d>=0;--d){var p=f(d);if(p)return p.v}}}}function io(e,t){if(0!=t&&(e.first+=t,e.sel=new pi($(e.sel.ranges,function(e){return new gi(ge(e.anchor.line+t,e.anchor.ch),ge(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){_n(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)qn(e.cm,n,\\\"gutter\\\")}}function oo(e,t,r,n){if(e.cm&&!e.cm.curOp)return jn(e.cm,oo)(e,t,r,n);if(t.to.line<e.first)io(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);io(e,i),t={from:ge(e.first,0),to:ge(t.to.line+i,t.to.ch),text:[q(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:ge(o,se(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ae(e,t.from,t.to),r||(r=wi(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=he(Be(se(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0}));n.sel.contains(t.from,t.to)>-1&&it(e);ki(n,t,r,tn(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=Xe(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;n>r;n--){var i=se(e,n).stateAfter;if(i&&(!(i instanceof Ht)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,r)}})(n,o.line),Jn(e,400);var u=t.text.length-(l.line-o.line)-1;t.full?_n(e):o.line!=l.line||1!=t.text.length||Li(e.doc,t)?_n(e,o.line,l.line+1,u):qn(e,o.line,\\\"text\\\");var c=ot(e,\\\"changes\\\"),h=ot(e,\\\"change\\\");if(h||c){var f={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin};h&&or(e,\\\"change\\\",e,f),c&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(f)}e.display.selForContextMenu=null}(e.cm,t,n):ki(e,t,n),Xi(e,r,V)}}function lo(e,t,r,n,i){var o;(n||(n=r),ve(n,r)<0)&&(r=(o=[n,r])[0],n=o[1]);\\\"string\\\"==typeof t&&(t=e.splitLines(t)),to(e,{from:r,to:n,text:t,origin:i})}function so(e,t,r,n){r<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function ao(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var s=0;s<o.ranges.length;s++)so(o.ranges[s].anchor,t,r,n),so(o.ranges[s].head,t,r,n)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(r<u.from.line)u.from=ge(u.from.line+n,u.from.ch),u.to=ge(u.to.line+n,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function uo(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;ao(e.done,r,n,i),ao(e.undone,r,n,i)}function co(e,t,r,n){var i=t,o=t;return\\\"number\\\"==typeof t?o=se(e,xe(e,t)):i=he(t),null==i?null:(n(o,i)&&e.cm&&qn(e.cm,i,r),o)}function ho(e){this.lines=e,this.parent=null;for(var t=0,r=0;r<e.length;++r)e[r].parent=this,t+=e[r].height;this.height=t}function fo(e){this.children=e;for(var t=0,r=0,n=0;n<e.length;++n){var i=e[n];t+=i.chunkSize(),r+=i.height,i.parent=this}this.size=t,this.height=r,this.parent=null}gi.prototype.from=function(){return we(this.anchor,this.head)},gi.prototype.to=function(){return be(this.anchor,this.head)},gi.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},ho.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var r,n=e,i=e+t;n<i;++n){var o=this.lines[n];this.height-=o.height,(r=o).parent=null,De(r),or(o,\\\"delete\\\")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,r){this.height+=r,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var n=0;n<t.length;++n)t[n].parent=this},iterN:function(e,t,r){for(var n=e+t;e<n;++e)if(r(this.lines[e]))return!0}},fo.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var r=0;r<this.children.length;++r){var n=this.children[r],i=n.chunkSize();if(e<i){var o=Math.min(t,i-e),l=n.height;if(n.removeInner(e,o),this.height-=l-n.height,i==o&&(this.children.splice(r--,1),n.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof ho))){var s=[];this.collapse(s),this.children=[new ho(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,r){this.size+=t.length,this.height+=r;for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,r),i.lines&&i.lines.length>50){for(var l=i.lines.length%25+25,s=l;s<i.lines.length;){var a=new ho(i.lines.slice(s,s+=25));i.height-=a.height,this.children.splice(++n,0,a),a.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new fo(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var r=B(e.parent.children,e);e.parent.children.splice(r+1,0,t)}else{var n=new fo(e.children);n.parent=e,e.children=[n,t],e=n}t.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e);if(i.iterN(e,l,r))return!0;if(0==(t-=l))break;e=0}else e-=o}}};var po=function(e,t,r){if(r)for(var n in r)r.hasOwnProperty(n)&&(this[n]=r[n]);this.doc=e,this.node=t};function go(e,t,r){je(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Cn(e,r)}po.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,r=this.line,n=he(r);if(null!=n&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(r.widgets=null);var o=mr(this);ce(r,Math.max(0,r.height-o)),e&&(Kn(e,function(){go(e,r,-o),qn(e,n,\\\"widget\\\")}),or(e,\\\"lineWidgetCleared\\\",e,this,n))}},po.prototype.changed=function(){var e=this,t=this.height,r=this.doc.cm,n=this.line;this.height=null;var i=mr(this)-t;i&&(ce(n,n.height+i),r&&Kn(r,function(){r.curOp.forceUpdate=!0,go(r,n,i),or(r,\\\"lineWidgetChanged\\\",r,e,he(n))}))},lt(po);var vo=0,mo=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++vo};function yo(e,t,r,n,i){if(n&&n.shared)return function(e,t,r,n,i){(n=z(n)).shared=!1;var o=[yo(e,t,r,n,i)],l=o[0],s=n.widgetNode;return Ti(e,function(e){s&&(n.widgetNode=s.cloneNode(!0)),o.push(yo(e,Ce(e,t),Ce(e,r),n,i));for(var a=0;a<e.linked.length;++a)if(e.linked[a].isParent)return;l=q(o)}),new bo(o,l)}(e,t,r,n,i);if(e.cm&&!e.cm.curOp)return jn(e.cm,yo)(e,t,r,n,i);var o=new mo(e,i),l=ve(t,r);if(n&&z(n,o,!1),l>0||0==l&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A(\\\"span\\\",[o.replacedWith],\\\"CodeMirror-widget\\\"),n.handleMouseEvents||o.widgetNode.setAttribute(\\\"cm-ignore-events\\\",\\\"true\\\"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Re(e,t.line,t,r,o)||t.line!=r.line&&Re(e,r.line,t,r,o))throw new Error(\\\"Inserting collapsed marker partially overlapping an existing one\\\");ke=!0}o.addToHistory&&Wi(e,{from:t,to:r,origin:\\\"markText\\\"},e.sel,NaN);var s,a=t.line,u=e.cm;if(e.iter(a,r.line+1,function(e){var n,i;u&&o.collapsed&&!u.options.lineWrapping&&Be(e)==u.display.maxLine&&(s=!0),o.collapsed&&a!=t.line&&ce(e,0),n=e,i=new Te(o,a==t.line?t.ch:null,a==r.line?r.ch:null),n.markedSpans=n.markedSpans?n.markedSpans.concat([i]):[i],i.marker.attachLine(n),++a}),o.collapsed&&e.iter(t.line,r.line+1,function(t){Ve(e,t)&&ce(t,0)}),o.clearOnEnter&&Je(o,\\\"beforeCursorEnter\\\",function(){return o.clear()}),o.readOnly&&(Le=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++vo,o.atomic=!0),u){if(s&&(u.curOp.updateMaxLine=!0),o.collapsed)_n(u,t.line,r.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var c=t.line;c<=r.line;c++)qn(u,c,\\\"text\\\");o.atomic&&_i(u.doc),or(u,\\\"markerAdded\\\",u,o)}return o}mo.prototype.clear=function(){var e=this;if(!this.explicitlyCleared){var t=this.doc.cm,r=t&&!t.curOp;if(r&&In(t),ot(this,\\\"clear\\\")){var n=this.find();n&&or(this,\\\"clear\\\",n.from,n.to)}for(var i=null,o=null,l=0;l<this.lines.length;++l){var s=e.lines[l],a=Me(s.markedSpans,e);t&&!e.collapsed?qn(t,he(s),\\\"text\\\"):t&&(null!=a.to&&(o=he(s)),null!=a.from&&(i=he(s))),s.markedSpans=Ne(s.markedSpans,a),null==a.from&&e.collapsed&&!Ve(e.doc,s)&&t&&ce(s,Zr(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var u=0;u<this.lines.length;++u){var c=Be(e.lines[u]),h=Xe(c);h>t.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=h,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&_n(t,i,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&_i(t.doc)),t&&or(t,\\\"markerCleared\\\",t,this,i,o),r&&Rn(t),this.parent&&this.parent.clear()}},mo.prototype.find=function(e,t){var r,n;null==e&&\\\"bookmark\\\"==this.type&&(e=1);for(var i=0;i<this.lines.length;++i){var o=this.lines[i],l=Me(o.markedSpans,this);if(null!=l.from&&(r=ge(t?o:he(o),l.from),-1==e))return r;if(null!=l.to&&(n=ge(t?o:he(o),l.to),1==e))return n}return r&&{from:r,to:n}},mo.prototype.changed=function(){var e=this,t=this.find(-1,!0),r=this,n=this.doc.cm;t&&n&&Kn(n,function(){var i=t.line,o=he(t.line),l=Mr(n,o);if(l&&(Fr(l),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!Ve(r.doc,i)&&null!=r.height){var s=r.height;r.height=null;var a=mr(r)-s;a&&ce(i,i.height+a)}or(n,\\\"markerChanged\\\",n,e)})},mo.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=B(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},mo.prototype.detachLine=function(e){if(this.lines.splice(B(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},lt(mo);var bo=function(e,t){this.markers=e,this.primary=t;for(var r=0;r<e.length;++r)e[r].parent=this};function wo(e){return e.findMarks(ge(e.first,0),e.clipPos(ge(e.lastLine())),function(e){return e.parent})}function xo(e){for(var t=function(t){var r=e[t],n=[r.primary.doc];Ti(r.primary.doc,function(e){return n.push(e)});for(var i=0;i<r.markers.length;i++){var o=r.markers[i];-1==B(n,o.doc)&&(o.parent=null,r.markers.splice(i--,1))}},r=0;r<e.length;r++)t(r)}bo.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();or(this,\\\"clear\\\")}},bo.prototype.find=function(e,t){return this.primary.find(e,t)},lt(bo);var Co=0,So=function(e,t,r,n,i){if(!(this instanceof So))return new So(e,t,r,n,i);null==r&&(r=0),fo.call(this,[new ho([new jt(\\\"\\\",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=r;var o=ge(r,0);this.sel=mi(o),this.history=new Oi(null),this.id=++Co,this.modeOption=t,this.lineSep=n,this.direction=\\\"rtl\\\"==i?\\\"rtl\\\":\\\"ltr\\\",this.extend=!1,\\\"string\\\"==typeof e&&(e=this.splitLines(e)),ki(this,{from:o,to:o,text:e}),ji(this,mi(o),V)};So.prototype=Q(fo.prototype,{constructor:So,iter:function(e,t,r){r?this.iterN(e-this.first,t-e,r):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var r=0,n=0;n<t.length;++n)r+=t[n].height;this.insertInner(e-this.first,t,r)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=ue(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Yn(function(e){var t=ge(this.first,0),r=this.first+this.size-1;to(this,{from:t,to:ge(r,se(this,r).text.length),text:this.splitLines(e),origin:\\\"setValue\\\",full:!0},!0),this.cm&&Ln(this.cm,0,0),ji(this,mi(t),V)}),replaceRange:function(e,t,r,n){lo(this,e,t=Ce(this,t),r=r?Ce(this,r):t,n)},getRange:function(e,t,r){var n=ae(this,Ce(this,e),Ce(this,t));return!1===r?n:n.join(r||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(de(this,e))return se(this,e)},getLineNumber:function(e){return he(e)},getLineHandleVisualStart:function(e){return\\\"number\\\"==typeof e&&(e=se(this,e)),Be(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return Ce(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||\\\"head\\\"==e?t.head:\\\"anchor\\\"==e?t.anchor:\\\"end\\\"==e||\\\"to\\\"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Yn(function(e,t,r){Vi(this,Ce(this,\\\"number\\\"==typeof e?ge(e,t||0):e),null,r)}),setSelection:Yn(function(e,t,r){Vi(this,Ce(this,e),Ce(this,t||e),r)}),extendSelection:Yn(function(e,t,r){Bi(this,Ce(this,e),t&&Ce(this,t),r)}),extendSelections:Yn(function(e,t){Gi(this,Se(this,e),t)}),extendSelectionsBy:Yn(function(e,t){Gi(this,Se(this,$(this.sel.ranges,e)),t)}),setSelections:Yn(function(e,t,r){if(e.length){for(var n=[],i=0;i<e.length;i++)n[i]=new gi(Ce(this,e[i].anchor),Ce(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),ji(this,vi(n,t),r)}}),addSelection:Yn(function(e,t,r){var n=this.sel.ranges.slice(0);n.push(new gi(Ce(this,e),Ce(this,t||e))),ji(this,vi(n,n.length-1),r)}),getSelection:function(e){for(var t,r=this.sel.ranges,n=0;n<r.length;n++){var i=ae(this,r[n].from(),r[n].to());t=t?t.concat(i):i}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],r=this.sel.ranges,n=0;n<r.length;n++){var i=ae(this,r[n].from(),r[n].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[n]=i}return t},replaceSelection:function(e,t,r){for(var n=[],i=0;i<this.sel.ranges.length;i++)n[i]=e;this.replaceSelections(n,t,r||\\\"+input\\\")},replaceSelections:Yn(function(e,t,r){for(var n=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];n[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:r}}for(var s=t&&\\\"end\\\"!=t&&function(e,t,r){for(var n=[],i=ge(e.first,0),o=i,l=0;l<t.length;l++){var s=t[l],a=xi(s.from,i,o),u=xi(yi(s),i,o);if(i=s.to,o=u,\\\"around\\\"==r){var c=e.sel.ranges[l],h=ve(c.head,c.anchor)<0;n[l]=new gi(h?u:a,h?a:u)}else n[l]=new gi(a,a)}return new pi(n,e.sel.primIndex)}(this,n,t),a=n.length-1;a>=0;a--)to(this,n[a]);s?Ki(this,s):this.cm&&Sn(this.cm)}),undo:Yn(function(){no(this,\\\"undo\\\")}),redo:Yn(function(){no(this,\\\"redo\\\")}),undoSelection:Yn(function(){no(this,\\\"undo\\\",!0)}),redoSelection:Yn(function(){no(this,\\\"redo\\\",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++r;return{undo:t,redo:r}},clearHistory:function(){this.history=new Oi(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Ii(this.history.done),undone:Ii(this.history.undone)}},setHistory:function(e){var t=this.history=new Oi(this.history.maxGeneration);t.done=Ii(e.done.slice(0),null,!0),t.undone=Ii(e.undone.slice(0),null,!0)},setGutterMarker:Yn(function(e,t,r){return co(this,e,\\\"gutter\\\",function(e){var n=e.gutterMarkers||(e.gutterMarkers={});return n[t]=r,!r&&re(n)&&(e.gutterMarkers=null),!0})}),clearGutter:Yn(function(e){var t=this;this.iter(function(r){r.gutterMarkers&&r.gutterMarkers[e]&&co(t,r,\\\"gutter\\\",function(){return r.gutterMarkers[e]=null,re(r.gutterMarkers)&&(r.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if(\\\"number\\\"==typeof e){if(!de(this,e))return null;if(t=e,!(e=se(this,e)))return null}else if(null==(t=he(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Yn(function(e,t,r){return co(this,e,\\\"gutter\\\"==t?\\\"gutter\\\":\\\"class\\\",function(e){var n=\\\"text\\\"==t?\\\"textClass\\\":\\\"background\\\"==t?\\\"bgClass\\\":\\\"gutter\\\"==t?\\\"gutterClass\\\":\\\"wrapClass\\\";if(e[n]){if(L(r).test(e[n]))return!1;e[n]+=\\\" \\\"+r}else e[n]=r;return!0})}),removeLineClass:Yn(function(e,t,r){return co(this,e,\\\"gutter\\\"==t?\\\"gutter\\\":\\\"class\\\",function(e){var n=\\\"text\\\"==t?\\\"textClass\\\":\\\"background\\\"==t?\\\"bgClass\\\":\\\"gutter\\\"==t?\\\"gutterClass\\\":\\\"wrapClass\\\",i=e[n];if(!i)return!1;if(null==r)e[n]=null;else{var o=i.match(L(r));if(!o)return!1;var l=o.index+o[0].length;e[n]=i.slice(0,o.index)+(o.index&&l!=i.length?\\\" \\\":\\\"\\\")+i.slice(l)||null}return!0})}),addLineWidget:Yn(function(e,t,r){return i=e,o=new po(n=this,t,r),(l=n.cm)&&o.noHScroll&&(l.display.alignWidgets=!0),co(n,i,\\\"widget\\\",function(e){var t=e.widgets||(e.widgets=[]);if(null==o.insertAt?t.push(o):t.splice(Math.min(t.length-1,Math.max(0,o.insertAt)),0,o),o.line=e,l&&!Ve(n,e)){var r=je(e)<n.scrollTop;ce(e,e.height+mr(o)),r&&Cn(l,o.height),l.curOp.forceUpdate=!0}return!0}),l&&or(l,\\\"lineWidgetAdded\\\",l,o,\\\"number\\\"==typeof i?i:he(i)),o;var n,i,o,l}),removeLineWidget:function(e){e.clear()},markText:function(e,t,r){return yo(this,Ce(this,e),Ce(this,t),r,r&&r.type||\\\"range\\\")},setBookmark:function(e,t){var r={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return yo(this,e=Ce(this,e),e,r,\\\"bookmark\\\")},findMarksAt:function(e){var t=[],r=se(this,(e=Ce(this,e)).line).markedSpans;if(r)for(var n=0;n<r.length;++n){var i=r[n];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=Ce(this,e),t=Ce(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s<l.length;s++){var a=l[s];null!=a.to&&i==e.line&&e.ch>=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;n<r.length;++n)null!=r[n].from&&e.push(r[n].marker)}),e},posFromIndex:function(e){var t,r=this.first,n=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+n;if(o>e)return t=e,!0;e-=o,++r}),Ce(this,ge(r,t))},indexFromPos:function(e){var t=(e=Ce(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var r=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+r}),t},copy:function(e){var t=new So(ue(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,r=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<r&&(r=e.to);var n=new So(ue(this,t,r),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(ve(o,l)){var s=yo(e,o,l,n.primary,n.primary.type);n.markers.push(s),s.parent=n}}}(n,wo(this)),n},unlinkDoc:function(e){if(e instanceof wl&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),xo(wo(this));break}}if(e.history==this.history){var r=[e.id];Ti(e,function(e){return r.push(e.id)},!0),e.history=new Oi(null),e.history.done=Ii(this.history.done,r),e.history.undone=Ii(this.history.undone,r)}},iterLinkedDocs:function(e){Ti(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):bt(e)},lineSeparator:function(){return this.lineSep||\\\"\\\\n\\\"},setDirection:Yn(function(e){var t;(\\\"rtl\\\"!=e&&(e=\\\"ltr\\\"),e!=this.direction)&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&Kn(t=this.cm,function(){Ni(t),_n(t)}))})}),So.prototype.eachLine=So.prototype.iter;var Lo=0;function ko(e){var t=this;if(To(t),!nt(t,e)&&!yr(t.display,e)){st(e),l&&(Lo=+new Date);var r=nn(t,e,!0),n=e.dataTransfer.files;if(r&&!t.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),s=0,a=function(e,n){if(!t.options.allowDropFileTypes||-1!=B(t.options.allowDropFileTypes,e.type)){var l=new FileReader;l.onload=jn(t,function(){var e=l.result;if(/[\\\\x00-\\\\x08\\\\x0e-\\\\x1f]{2}/.test(e)&&(e=\\\"\\\"),o[n]=e,++s==i){var a={from:r=Ce(t.doc,r),to:r,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:\\\"paste\\\"};to(t.doc,a),Ki(t.doc,mi(r,yi(a)))}}),l.readAsText(e)}},u=0;u<i;++u)a(n[u],u);else{if(t.state.draggingText&&t.doc.sel.contains(r)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var c=e.dataTransfer.getData(\\\"Text\\\");if(c){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),Xi(t.doc,mi(r,r)),h)for(var f=0;f<h.length;++f)lo(t.doc,\\\"\\\",h[f].anchor,h[f].head,\\\"drag\\\");t.replaceSelection(c,\\\"around\\\",\\\"paste\\\"),t.display.input.focus()}}catch(e){}}}}function To(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Mo(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName(\\\"CodeMirror\\\"),r=0;r<t.length;r++){var n=t[r].CodeMirror;n&&e(n)}}var No=!1;function Oo(){var e;No||(Je(window,\\\"resize\\\",function(){null==e&&(e=setTimeout(function(){e=null,Mo(Ao)},100))}),Je(window,\\\"blur\\\",function(){return Mo(gn)}),No=!0)}function Ao(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}for(var Do={3:\\\"Pause\\\",8:\\\"Backspace\\\",9:\\\"Tab\\\",13:\\\"Enter\\\",16:\\\"Shift\\\",17:\\\"Ctrl\\\",18:\\\"Alt\\\",19:\\\"Pause\\\",20:\\\"CapsLock\\\",27:\\\"Esc\\\",32:\\\"Space\\\",33:\\\"PageUp\\\",34:\\\"PageDown\\\",35:\\\"End\\\",36:\\\"Home\\\",37:\\\"Left\\\",38:\\\"Up\\\",39:\\\"Right\\\",40:\\\"Down\\\",44:\\\"PrintScrn\\\",45:\\\"Insert\\\",46:\\\"Delete\\\",59:\\\";\\\",61:\\\"=\\\",91:\\\"Mod\\\",92:\\\"Mod\\\",93:\\\"Mod\\\",106:\\\"*\\\",107:\\\"=\\\",109:\\\"-\\\",110:\\\".\\\",111:\\\"/\\\",127:\\\"Delete\\\",145:\\\"ScrollLock\\\",173:\\\"-\\\",186:\\\";\\\",187:\\\"=\\\",188:\\\",\\\",189:\\\"-\\\",190:\\\".\\\",191:\\\"/\\\",192:\\\"`\\\",219:\\\"[\\\",220:\\\"\\\\\\\\\\\",221:\\\"]\\\",222:\\\"'\\\",63232:\\\"Up\\\",63233:\\\"Down\\\",63234:\\\"Left\\\",63235:\\\"Right\\\",63272:\\\"Delete\\\",63273:\\\"Home\\\",63275:\\\"End\\\",63276:\\\"PageUp\\\",63277:\\\"PageDown\\\",63302:\\\"Insert\\\"},Wo=0;Wo<10;Wo++)Do[Wo+48]=Do[Wo+96]=String(Wo);for(var Ho=65;Ho<=90;Ho++)Do[Ho]=String.fromCharCode(Ho);for(var Fo=1;Fo<=12;Fo++)Do[Fo+111]=Do[Fo+63235]=\\\"F\\\"+Fo;var Po={};function Eo(e){var t,r,n,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var l=0;l<o.length-1;l++){var s=o[l];if(/^(cmd|meta|m)$/i.test(s))i=!0;else if(/^a(lt)?$/i.test(s))t=!0;else if(/^(c|ctrl|control)$/i.test(s))r=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error(\\\"Unrecognized modifier name: \\\"+s);n=!0}}return t&&(e=\\\"Alt-\\\"+e),r&&(e=\\\"Ctrl-\\\"+e),i&&(e=\\\"Cmd-\\\"+e),n&&(e=\\\"Shift-\\\"+e),e}function zo(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if(\\\"...\\\"==n){delete e[r];continue}for(var i=$(r.split(\\\" \\\"),Eo),o=0;o<i.length;o++){var l=void 0,s=void 0;o==i.length-1?(s=i.join(\\\" \\\"),l=n):(s=i.slice(0,o+1).join(\\\" \\\"),l=\\\"...\\\");var a=t[s];if(a){if(a!=l)throw new Error(\\\"Inconsistent bindings for \\\"+s)}else t[s]=l}delete e[r]}for(var u in t)e[u]=t[u];return e}function Io(e,t,r,n){var i=(t=Uo(t)).call?t.call(e,n):t[e];if(!1===i)return\\\"nothing\\\";if(\\\"...\\\"===i)return\\\"multi\\\";if(null!=i&&r(i))return\\\"handled\\\";if(t.fallthrough){if(\\\"[object Array]\\\"!=Object.prototype.toString.call(t.fallthrough))return Io(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var l=Io(e,t.fallthrough[o],r,n);if(l)return l}}}function Ro(e){var t=\\\"string\\\"==typeof e?e:Do[e.keyCode];return\\\"Ctrl\\\"==t||\\\"Alt\\\"==t||\\\"Shift\\\"==t||\\\"Mod\\\"==t}function Bo(e,t,r){var n=e;return t.altKey&&\\\"Alt\\\"!=n&&(e=\\\"Alt-\\\"+e),(C?t.metaKey:t.ctrlKey)&&\\\"Ctrl\\\"!=n&&(e=\\\"Ctrl-\\\"+e),(C?t.ctrlKey:t.metaKey)&&\\\"Cmd\\\"!=n&&(e=\\\"Cmd-\\\"+e),!r&&t.shiftKey&&\\\"Shift\\\"!=n&&(e=\\\"Shift-\\\"+e),e}function Go(e,t){if(h&&34==e.keyCode&&e.char)return!1;var r=Do[e.keyCode];return null!=r&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(r=e.code),Bo(r,e,t))}function Uo(e){return\\\"string\\\"==typeof e?Po[e]:e}function Vo(e,t){for(var r=e.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=t(r[i]);n.length&&ve(o.from,q(n).to)<=0;){var l=n.pop();if(ve(l.from,o.from)<0){o.from=l.from;break}}n.push(o)}Kn(e,function(){for(var t=n.length-1;t>=0;t--)lo(e.doc,\\\"\\\",n[t].from,n[t].to,\\\"+delete\\\");Sn(e)})}function Ko(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function jo(e,t,r){var n=Ko(e,t.ch,r);return null==n?null:new ge(t.line,n,r<0?\\\"after\\\":\\\"before\\\")}function Xo(e,t,r,n,i){if(e){var o=Ze(r,t.doc.direction);if(o){var l,s=i<0?q(o):o[0],a=i<0==(1==s.level)?\\\"after\\\":\\\"before\\\";if(s.level>0||\\\"rtl\\\"==t.doc.direction){var u=Nr(t,r);l=i<0?r.text.length-1:0;var c=Or(t,u,l).top;l=le(function(e){return Or(t,u,e).top==c},i<0==(1==s.level)?s.from:s.to-1,l),\\\"before\\\"==a&&(l=Ko(r,l,1))}else l=i<0?s.to:s.from;return new ge(n,l,a)}}return new ge(n,i<0?r.text.length:0,i<0?\\\"before\\\":\\\"after\\\")}Po.basic={Left:\\\"goCharLeft\\\",Right:\\\"goCharRight\\\",Up:\\\"goLineUp\\\",Down:\\\"goLineDown\\\",End:\\\"goLineEnd\\\",Home:\\\"goLineStartSmart\\\",PageUp:\\\"goPageUp\\\",PageDown:\\\"goPageDown\\\",Delete:\\\"delCharAfter\\\",Backspace:\\\"delCharBefore\\\",\\\"Shift-Backspace\\\":\\\"delCharBefore\\\",Tab:\\\"defaultTab\\\",\\\"Shift-Tab\\\":\\\"indentAuto\\\",Enter:\\\"newlineAndIndent\\\",Insert:\\\"toggleOverwrite\\\",Esc:\\\"singleSelection\\\"},Po.pcDefault={\\\"Ctrl-A\\\":\\\"selectAll\\\",\\\"Ctrl-D\\\":\\\"deleteLine\\\",\\\"Ctrl-Z\\\":\\\"undo\\\",\\\"Shift-Ctrl-Z\\\":\\\"redo\\\",\\\"Ctrl-Y\\\":\\\"redo\\\",\\\"Ctrl-Home\\\":\\\"goDocStart\\\",\\\"Ctrl-End\\\":\\\"goDocEnd\\\",\\\"Ctrl-Up\\\":\\\"goLineUp\\\",\\\"Ctrl-Down\\\":\\\"goLineDown\\\",\\\"Ctrl-Left\\\":\\\"goGroupLeft\\\",\\\"Ctrl-Right\\\":\\\"goGroupRight\\\",\\\"Alt-Left\\\":\\\"goLineStart\\\",\\\"Alt-Right\\\":\\\"goLineEnd\\\",\\\"Ctrl-Backspace\\\":\\\"delGroupBefore\\\",\\\"Ctrl-Delete\\\":\\\"delGroupAfter\\\",\\\"Ctrl-S\\\":\\\"save\\\",\\\"Ctrl-F\\\":\\\"find\\\",\\\"Ctrl-G\\\":\\\"findNext\\\",\\\"Shift-Ctrl-G\\\":\\\"findPrev\\\",\\\"Shift-Ctrl-F\\\":\\\"replace\\\",\\\"Shift-Ctrl-R\\\":\\\"replaceAll\\\",\\\"Ctrl-[\\\":\\\"indentLess\\\",\\\"Ctrl-]\\\":\\\"indentMore\\\",\\\"Ctrl-U\\\":\\\"undoSelection\\\",\\\"Shift-Ctrl-U\\\":\\\"redoSelection\\\",\\\"Alt-U\\\":\\\"redoSelection\\\",fallthrough:\\\"basic\\\"},Po.emacsy={\\\"Ctrl-F\\\":\\\"goCharRight\\\",\\\"Ctrl-B\\\":\\\"goCharLeft\\\",\\\"Ctrl-P\\\":\\\"goLineUp\\\",\\\"Ctrl-N\\\":\\\"goLineDown\\\",\\\"Alt-F\\\":\\\"goWordRight\\\",\\\"Alt-B\\\":\\\"goWordLeft\\\",\\\"Ctrl-A\\\":\\\"goLineStart\\\",\\\"Ctrl-E\\\":\\\"goLineEnd\\\",\\\"Ctrl-V\\\":\\\"goPageDown\\\",\\\"Shift-Ctrl-V\\\":\\\"goPageUp\\\",\\\"Ctrl-D\\\":\\\"delCharAfter\\\",\\\"Ctrl-H\\\":\\\"delCharBefore\\\",\\\"Alt-D\\\":\\\"delWordAfter\\\",\\\"Alt-Backspace\\\":\\\"delWordBefore\\\",\\\"Ctrl-K\\\":\\\"killLine\\\",\\\"Ctrl-T\\\":\\\"transposeChars\\\",\\\"Ctrl-O\\\":\\\"openLine\\\"},Po.macDefault={\\\"Cmd-A\\\":\\\"selectAll\\\",\\\"Cmd-D\\\":\\\"deleteLine\\\",\\\"Cmd-Z\\\":\\\"undo\\\",\\\"Shift-Cmd-Z\\\":\\\"redo\\\",\\\"Cmd-Y\\\":\\\"redo\\\",\\\"Cmd-Home\\\":\\\"goDocStart\\\",\\\"Cmd-Up\\\":\\\"goDocStart\\\",\\\"Cmd-End\\\":\\\"goDocEnd\\\",\\\"Cmd-Down\\\":\\\"goDocEnd\\\",\\\"Alt-Left\\\":\\\"goGroupLeft\\\",\\\"Alt-Right\\\":\\\"goGroupRight\\\",\\\"Cmd-Left\\\":\\\"goLineLeft\\\",\\\"Cmd-Right\\\":\\\"goLineRight\\\",\\\"Alt-Backspace\\\":\\\"delGroupBefore\\\",\\\"Ctrl-Alt-Backspace\\\":\\\"delGroupAfter\\\",\\\"Alt-Delete\\\":\\\"delGroupAfter\\\",\\\"Cmd-S\\\":\\\"save\\\",\\\"Cmd-F\\\":\\\"find\\\",\\\"Cmd-G\\\":\\\"findNext\\\",\\\"Shift-Cmd-G\\\":\\\"findPrev\\\",\\\"Cmd-Alt-F\\\":\\\"replace\\\",\\\"Shift-Cmd-Alt-F\\\":\\\"replaceAll\\\",\\\"Cmd-[\\\":\\\"indentLess\\\",\\\"Cmd-]\\\":\\\"indentMore\\\",\\\"Cmd-Backspace\\\":\\\"delWrappedLineLeft\\\",\\\"Cmd-Delete\\\":\\\"delWrappedLineRight\\\",\\\"Cmd-U\\\":\\\"undoSelection\\\",\\\"Shift-Cmd-U\\\":\\\"redoSelection\\\",\\\"Ctrl-Up\\\":\\\"goDocStart\\\",\\\"Ctrl-Down\\\":\\\"goDocEnd\\\",fallthrough:[\\\"basic\\\",\\\"emacsy\\\"]},Po.default=y?Po.macDefault:Po.pcDefault;var Yo={selectAll:Ji,singleSelection:function(e){return e.setSelection(e.getCursor(\\\"anchor\\\"),e.getCursor(\\\"head\\\"),V)},killLine:function(e){return Vo(e,function(t){if(t.empty()){var r=se(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line<e.lastLine()?{from:t.head,to:ge(t.head.line+1,0)}:{from:t.head,to:ge(t.head.line,r)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return Vo(e,function(t){return{from:ge(t.from().line,0),to:Ce(e.doc,ge(t.to().line+1,0))}})},delLineLeft:function(e){return Vo(e,function(e){return{from:ge(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return Vo(e,function(t){var r=e.charCoords(t.head,\\\"div\\\").top+5;return{from:e.coordsChar({left:0,top:r},\\\"div\\\"),to:t.from()}})},delWrappedLineRight:function(e){return Vo(e,function(t){var r=e.charCoords(t.head,\\\"div\\\").top+5,n=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},\\\"div\\\");return{from:t.from(),to:n}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(ge(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(ge(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return _o(e,t.head.line)},{origin:\\\"+move\\\",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return qo(e,t.head)},{origin:\\\"+move\\\",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return function(e,t){var r=se(e.doc,t),n=function(e){for(var t;t=Ie(e);)e=t.find(1,!0).line;return e}(r);n!=r&&(t=he(n));return Xo(!0,e,r,t,-1)}(e,t.head.line)},{origin:\\\"+move\\\",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,\\\"div\\\").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},\\\"div\\\")},j)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,\\\"div\\\").top+5;return e.coordsChar({left:0,top:r},\\\"div\\\")},j)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,\\\"div\\\").top+5,n=e.coordsChar({left:0,top:r},\\\"div\\\");return n.ch<e.getLine(n.line).search(/\\\\S/)?qo(e,t.head):n},j)},goLineUp:function(e){return e.moveV(-1,\\\"line\\\")},goLineDown:function(e){return e.moveV(1,\\\"line\\\")},goPageUp:function(e){return e.moveV(-1,\\\"page\\\")},goPageDown:function(e){return e.moveV(1,\\\"page\\\")},goCharLeft:function(e){return e.moveH(-1,\\\"char\\\")},goCharRight:function(e){return e.moveH(1,\\\"char\\\")},goColumnLeft:function(e){return e.moveH(-1,\\\"column\\\")},goColumnRight:function(e){return e.moveH(1,\\\"column\\\")},goWordLeft:function(e){return e.moveH(-1,\\\"word\\\")},goGroupRight:function(e){return e.moveH(1,\\\"group\\\")},goGroupLeft:function(e){return e.moveH(-1,\\\"group\\\")},goWordRight:function(e){return e.moveH(1,\\\"word\\\")},delCharBefore:function(e){return e.deleteH(-1,\\\"char\\\")},delCharAfter:function(e){return e.deleteH(1,\\\"char\\\")},delWordBefore:function(e){return e.deleteH(-1,\\\"word\\\")},delWordAfter:function(e){return e.deleteH(1,\\\"word\\\")},delGroupBefore:function(e){return e.deleteH(-1,\\\"group\\\")},delGroupAfter:function(e){return e.deleteH(1,\\\"group\\\")},indentAuto:function(e){return e.indentSelection(\\\"smart\\\")},indentMore:function(e){return e.indentSelection(\\\"add\\\")},indentLess:function(e){return e.indentSelection(\\\"subtract\\\")},insertTab:function(e){return e.replaceSelection(\\\"\\\\t\\\")},insertSoftTab:function(e){for(var t=[],r=e.listSelections(),n=e.options.tabSize,i=0;i<r.length;i++){var o=r[i].from(),l=I(e.getLine(o.line),o.ch,n);t.push(_(n-l%n))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection(\\\"add\\\"):e.execCommand(\\\"insertTab\\\")},transposeChars:function(e){return Kn(e,function(){for(var t=e.listSelections(),r=[],n=0;n<t.length;n++)if(t[n].empty()){var i=t[n].head,o=se(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new ge(i.line,i.ch-1)),i.ch>0)i=new ge(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),ge(i.line,i.ch-2),i,\\\"+transpose\\\");else if(i.line>e.doc.first){var l=se(e.doc,i.line-1).text;l&&(i=new ge(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),ge(i.line-1,l.length-1),i,\\\"+transpose\\\"))}r.push(new gi(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return Kn(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,\\\"+input\\\");t=e.listSelections();for(var n=0;n<t.length;n++)e.indentLine(t[n].from().line,null,!0);Sn(e)})},openLine:function(e){return e.replaceSelection(\\\"\\\\n\\\",\\\"start\\\")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function _o(e,t){var r=se(e.doc,t),n=Be(r);return n!=r&&(t=he(n)),Xo(!0,e,n,t,1)}function qo(e,t){var r=_o(e,t.line),n=se(e.doc,r.line),i=Ze(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\\\\S/)),l=t.line==r.line&&t.ch<=o&&t.ch;return ge(r.line,l?0:o,r.sticky)}return r}function $o(e,t,r){if(\\\"string\\\"==typeof t&&!(t=Yo[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=U}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}var Zo=new R;function Qo(e,t,r,n){var i=e.state.keySeq;if(i){if(Ro(t))return\\\"handled\\\";if(/\\\\'$/.test(t)?e.state.keySeq=null:Zo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),Jo(e,i+\\\" \\\"+t,r,n))return!0}return Jo(e,t,r,n)}function Jo(e,t,r,n){var i=function(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=Io(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&Io(t,e.options.extraKeys,r,e)||Io(t,e.options.keyMap,r,e)}(e,t,n);return\\\"multi\\\"==i&&(e.state.keySeq=t),\\\"handled\\\"==i&&or(e,\\\"keyHandled\\\",e,t,r),\\\"handled\\\"!=i&&\\\"multi\\\"!=i||(st(r),hn(e)),!!i}function el(e,t){var r=Go(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?Qo(e,\\\"Shift-\\\"+r,t,function(t){return $o(e,t,!0)})||Qo(e,r,t,function(t){if(\\\"string\\\"==typeof t?/^go[A-Z]/.test(t):t.motion)return $o(e,t)}):Qo(e,r,t,function(t){return $o(e,t)}))}var tl=null;function rl(e){var t=this;if(t.curOp.focus=W(),!nt(t,e)){l&&s<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var n=el(t,e);h&&(tl=n?r:null,!n&&88==r&&!xt&&(y?e.metaKey:e.ctrlKey)&&t.replaceSelection(\\\"\\\",null,\\\"cut\\\")),18!=r||/\\\\bCodeMirror-crosshair\\\\b/.test(t.display.lineDiv.className)||function(e){var t=e.display.lineDiv;function r(e){18!=e.keyCode&&e.altKey||(T(t,\\\"CodeMirror-crosshair\\\"),tt(document,\\\"keyup\\\",r),tt(document,\\\"mouseover\\\",r))}H(t,\\\"CodeMirror-crosshair\\\"),Je(document,\\\"keyup\\\",r),Je(document,\\\"mouseover\\\",r)}(t)}}function nl(e){16==e.keyCode&&(this.doc.sel.shift=!1),nt(this,e)}function il(e){var t=this;if(!(yr(t.display,e)||nt(t,e)||e.ctrlKey&&!e.altKey||y&&e.metaKey)){var r=e.keyCode,n=e.charCode;if(h&&r==tl)return tl=null,void st(e);if(!h||e.which&&!(e.which<10)||!el(t,e)){var i,o=String.fromCharCode(null==n?r:n);if(\\\"\\\\b\\\"!=o)if(!Qo(i=t,\\\"'\\\"+o+\\\"'\\\",e,function(e){return $o(i,e,!0)}))t.display.input.onKeyPress(e)}}}var ol,ll,sl=function(e,t,r){this.time=e,this.pos=t,this.button=r};function al(e){var t=this,r=t.display;if(!(nt(t,e)||r.activeTouch&&r.input.supportsTouch()))if(r.input.ensurePolled(),r.shift=e.shiftKey,yr(r,e))a||(r.scroller.draggable=!1,setTimeout(function(){return r.scroller.draggable=!0},100));else if(!hl(t,e)){var n,i,o,u=nn(t,e),c=ft(e),h=u?(n=u,i=c,o=+new Date,ll&&ll.compare(o,n,i)?(ol=ll=null,\\\"triple\\\"):ol&&ol.compare(o,n,i)?(ll=new sl(o,n,i),ol=null,\\\"double\\\"):(ol=new sl(o,n,i),ll=null,\\\"single\\\")):\\\"single\\\";window.focus(),1==c&&t.state.selectingText&&t.state.selectingText(e),u&&function(e,t,r,n,i){var o=\\\"Click\\\";\\\"double\\\"==n?o=\\\"Double\\\"+o:\\\"triple\\\"==n&&(o=\\\"Triple\\\"+o);return Qo(e,Bo(o=(1==t?\\\"Left\\\":2==t?\\\"Middle\\\":\\\"Right\\\")+o,i),i,function(t){if(\\\"string\\\"==typeof t&&(t=Yo[t]),!t)return!1;var n=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n=t(e,r)!=U}finally{e.state.suppressEdits=!1}return n})}(t,c,u,h,e)||(1==c?u?function(e,t,r,n){l?setTimeout(E(fn,e),0):e.curOp.focus=W();var i,o=function(e,t,r){var n=e.getOption(\\\"configureMouse\\\"),i=n?n(e,t,r):{};if(null==i.unit){var o=b?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?\\\"rectangle\\\":\\\"single\\\"==t?\\\"char\\\":\\\"double\\\"==t?\\\"word\\\":\\\"line\\\"}(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey);null==i.addNew&&(i.addNew=y?r.metaKey:r.ctrlKey);null==i.moveOnDrag&&(i.moveOnDrag=!(y?r.altKey:r.ctrlKey));return i}(e,r,n),u=e.doc.sel;e.options.dragDrop&>&&!e.isReadOnly()&&\\\"single\\\"==r&&(i=u.contains(t))>-1&&(ve((i=u.ranges[i]).from(),t)<0||t.xRel>0)&&(ve(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,u=jn(e,function(t){a&&(i.scroller.draggable=!1),e.state.draggingText=!1,tt(i.wrapper.ownerDocument,\\\"mouseup\\\",u),tt(i.wrapper.ownerDocument,\\\"mousemove\\\",c),tt(i.scroller,\\\"dragstart\\\",h),tt(i.scroller,\\\"drop\\\",u),o||(st(t),n.addNew||Bi(e.doc,r,null,null,n.extend),a||l&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()},20):i.input.focus())}),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},h=function(){return o=!0};a&&(i.scroller.draggable=!0);e.state.draggingText=u,u.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop();Je(i.wrapper.ownerDocument,\\\"mouseup\\\",u),Je(i.wrapper.ownerDocument,\\\"mousemove\\\",c),Je(i.scroller,\\\"dragstart\\\",h),Je(i.scroller,\\\"drop\\\",u),dn(e),setTimeout(function(){return i.input.focus()},20)}(e,n,t,o):function(e,t,r,n){var i=e.display,o=e.doc;st(t);var l,s,a=o.sel,u=a.ranges;n.addNew&&!n.extend?(s=o.sel.contains(r),l=s>-1?u[s]:new gi(r,r)):(l=o.sel.primary(),s=o.sel.primIndex);if(\\\"rectangle\\\"==n.unit)n.addNew||(l=new gi(r,r)),r=nn(e,t,!0,!0),s=-1;else{var c=ul(e,r,n.unit);l=n.extend?Ri(l,c.anchor,c.head,n.extend):c}n.addNew?-1==s?(s=u.length,ji(o,vi(u.concat([l]),s),{scroll:!1,origin:\\\"*mouse\\\"})):u.length>1&&u[s].empty()&&\\\"char\\\"==n.unit&&!n.extend?(ji(o,vi(u.slice(0,s).concat(u.slice(s+1)),0),{scroll:!1,origin:\\\"*mouse\\\"}),a=o.sel):Ui(o,s,l,K):(s=0,ji(o,new pi([l],0),K),a=o.sel);var h=r;function f(t){if(0!=ve(h,t))if(h=t,\\\"rectangle\\\"==n.unit){for(var i=[],u=e.options.tabSize,c=I(se(o,r.line).text,r.ch,u),f=I(se(o,t.line).text,t.ch,u),d=Math.min(c,f),p=Math.max(c,f),g=Math.min(r.line,t.line),v=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=v;g++){var m=se(o,g).text,y=X(m,d,u);d==p?i.push(new gi(ge(g,y),ge(g,y))):m.length>y&&i.push(new gi(ge(g,y),ge(g,X(m,p,u))))}i.length||i.push(new gi(r,r)),ji(o,vi(a.ranges.slice(0,s).concat(i),s),{origin:\\\"*mouse\\\",scroll:!1}),e.scrollIntoView(t)}else{var b,w=l,x=ul(e,t,n.unit),C=w.anchor;ve(x.anchor,C)>0?(b=x.head,C=we(w.from(),x.anchor)):(b=x.anchor,C=be(w.to(),x.head));var S=a.ranges.slice(0);S[s]=function(e,t){var r=t.anchor,n=t.head,i=se(e.doc,r.line);if(0==ve(r,n)&&r.sticky==n.sticky)return t;var o=Ze(i);if(!o)return t;var l=qe(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a,u=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==u||u==o.length)return t;if(n.line!=r.line)a=(n.line-r.line)*(\\\"ltr\\\"==e.doc.direction?1:-1)>0;else{var c=qe(o,n.ch,n.sticky),h=c-l||(n.ch-r.ch)*(1==s.level?-1:1);a=c==u-1||c==u?h<0:h>0}var f=o[u+(a?-1:0)],d=a==(1==f.level),p=d?f.from:f.to,g=d?\\\"after\\\":\\\"before\\\";return r.ch==p&&r.sticky==g?t:new gi(new ge(r.line,p,g),n)}(e,new gi(Ce(o,C),b)),ji(o,vi(S,s),K)}}var d=i.wrapper.getBoundingClientRect(),p=0;function g(t){e.state.selectingText=!1,p=1/0,st(t),i.input.focus(),tt(i.wrapper.ownerDocument,\\\"mousemove\\\",v),tt(i.wrapper.ownerDocument,\\\"mouseup\\\",m),o.history.lastSelOrigin=null}var v=jn(e,function(t){ft(t)?function t(r){var l=++p;var s=nn(e,r,!0,\\\"rectangle\\\"==n.unit);if(!s)return;if(0!=ve(s,h)){e.curOp.focus=W(),f(s);var a=yn(i,o);(s.line>=a.to||s.line<a.from)&&setTimeout(jn(e,function(){p==l&&t(r)}),150)}else{var u=r.clientY<d.top?-20:r.clientY>d.bottom?20:0;u&&setTimeout(jn(e,function(){p==l&&(i.scroller.scrollTop+=u,t(r))}),50)}}(t):g(t)}),m=jn(e,g);e.state.selectingText=m,Je(i.wrapper.ownerDocument,\\\"mousemove\\\",v),Je(i.wrapper.ownerDocument,\\\"mouseup\\\",m)}(e,n,t,o)}(t,u,h,e):ht(e)==r.scroller&&st(e):2==c?(u&&Bi(t.doc,u),setTimeout(function(){return r.input.focus()},20)):3==c&&(S?fl(t,e):dn(t)))}}function ul(e,t,r){if(\\\"char\\\"==r)return new gi(t,t);if(\\\"word\\\"==r)return e.findWordAt(t);if(\\\"line\\\"==r)return new gi(ge(t.line,0),Ce(e.doc,ge(t.line+1,0)));var n=r(e,t);return new gi(n.from,n.to)}function cl(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&st(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!ot(e,r))return ut(t);o-=s.top-l.viewOffset;for(var a=0;a<e.options.gutters.length;++a){var u=l.gutters.childNodes[a];if(u&&u.getBoundingClientRect().right>=i)return rt(e,r,e,fe(e.doc,o),e.options.gutters[a],t),ut(t)}}function hl(e,t){return cl(e,t,\\\"gutterClick\\\",!0)}function fl(e,t){yr(e.display,t)||function(e,t){if(!ot(e,\\\"gutterContextMenu\\\"))return!1;return cl(e,t,\\\"gutterContextMenu\\\",!1)}(e,t)||nt(e,t,\\\"contextmenu\\\")||e.display.input.onContextMenu(t)}function dl(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\\\\s*cm-s-\\\\S+/g,\\\"\\\")+e.options.theme.replace(/(^|\\\\s)\\\\s*/g,\\\" cm-s-\\\"),Er(e)}sl.prototype.compare=function(e,t,r){return this.time+400>e&&0==ve(t,this.pos)&&r==this.button};var pl={toString:function(){return\\\"CodeMirror.Init\\\"}},gl={},vl={};function ml(e){si(e),_n(e),bn(e)}function yl(e,t,r){if(!t!=!(r&&r!=pl)){var n=e.display.dragFunctions,i=t?Je:tt;i(e.display.scroller,\\\"dragstart\\\",n.start),i(e.display.scroller,\\\"dragenter\\\",n.enter),i(e.display.scroller,\\\"dragover\\\",n.over),i(e.display.scroller,\\\"dragleave\\\",n.leave),i(e.display.scroller,\\\"drop\\\",n.drop)}}function bl(e){e.options.lineWrapping?(H(e.display.wrapper,\\\"CodeMirror-wrap\\\"),e.display.sizer.style.minWidth=\\\"\\\",e.display.sizerWidth=null):(T(e.display.wrapper,\\\"CodeMirror-wrap\\\"),Ye(e)),rn(e),_n(e),Er(e),setTimeout(function(){return Hn(e)},100)}function wl(e,t){var n=this;if(!(this instanceof wl))return new wl(e,t);this.options=t=t?z(t):{},z(gl,t,!1),ai(t);var i=t.value;\\\"string\\\"==typeof i&&(i=new So(i,t.mode,null,t.lineSeparator,t.direction)),this.doc=i;var o=new wl.inputStyles[t.inputStyle](this),u=this.display=new function(e,t,n){var i=this;this.input=n,i.scrollbarFiller=O(\\\"div\\\",null,\\\"CodeMirror-scrollbar-filler\\\"),i.scrollbarFiller.setAttribute(\\\"cm-not-content\\\",\\\"true\\\"),i.gutterFiller=O(\\\"div\\\",null,\\\"CodeMirror-gutter-filler\\\"),i.gutterFiller.setAttribute(\\\"cm-not-content\\\",\\\"true\\\"),i.lineDiv=A(\\\"div\\\",null,\\\"CodeMirror-code\\\"),i.selectionDiv=O(\\\"div\\\",null,null,\\\"position: relative; z-index: 1\\\"),i.cursorDiv=O(\\\"div\\\",null,\\\"CodeMirror-cursors\\\"),i.measure=O(\\\"div\\\",null,\\\"CodeMirror-measure\\\"),i.lineMeasure=O(\\\"div\\\",null,\\\"CodeMirror-measure\\\"),i.lineSpace=A(\\\"div\\\",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,\\\"position: relative; outline: none\\\");var o=A(\\\"div\\\",[i.lineSpace],\\\"CodeMirror-lines\\\");i.mover=O(\\\"div\\\",[o],null,\\\"position: relative\\\"),i.sizer=O(\\\"div\\\",[i.mover],\\\"CodeMirror-sizer\\\"),i.sizerWidth=null,i.heightForcer=O(\\\"div\\\",null,null,\\\"position: absolute; height: \\\"+G+\\\"px; width: 1px;\\\"),i.gutters=O(\\\"div\\\",null,\\\"CodeMirror-gutters\\\"),i.lineGutter=null,i.scroller=O(\\\"div\\\",[i.sizer,i.heightForcer,i.gutters],\\\"CodeMirror-scroll\\\"),i.scroller.setAttribute(\\\"tabIndex\\\",\\\"-1\\\"),i.wrapper=O(\\\"div\\\",[i.scrollbarFiller,i.gutterFiller,i.scroller],\\\"CodeMirror\\\"),l&&s<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),a||r&&m||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,n.init(i)}(e,i,o);for(var c in u.wrapper.CodeMirror=this,si(this),dl(this),t.lineWrapping&&(this.display.wrapper.className+=\\\" CodeMirror-wrap\\\"),En(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new R,keySeq:null,specialChars:null},t.autofocus&&!m&&u.input.focus(),l&&s<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(e){var t=e.display;Je(t.scroller,\\\"mousedown\\\",jn(e,al)),Je(t.scroller,\\\"dblclick\\\",l&&s<11?jn(e,function(t){if(!nt(e,t)){var r=nn(e,t);if(r&&!hl(e,t)&&!yr(e.display,t)){st(t);var n=e.findWordAt(r);Bi(e.doc,n.anchor,n.head)}}}):function(t){return nt(e,t)||st(t)});S||Je(t.scroller,\\\"contextmenu\\\",function(t){return fl(e,t)});var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout(function(){return t.activeTouch=null},1e3),(n=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}Je(t.scroller,\\\"touchstart\\\",function(i){if(!nt(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!hl(e,i)){t.input.ensurePolled(),clearTimeout(r);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),Je(t.scroller,\\\"touchmove\\\",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),Je(t.scroller,\\\"touchend\\\",function(r){var n=t.activeTouch;if(n&&!yr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var l,s=e.coordsChar(t.activeTouch,\\\"page\\\");l=!n.prev||o(n,n.prev)?new gi(s,s):!n.prev.prev||o(n,n.prev.prev)?e.findWordAt(s):new gi(ge(s.line,0),Ce(e.doc,ge(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),st(r)}i()}),Je(t.scroller,\\\"touchcancel\\\",i),Je(t.scroller,\\\"scroll\\\",function(){t.scroller.clientHeight&&(Mn(e,t.scroller.scrollTop),On(e,t.scroller.scrollLeft,!0),rt(e,\\\"scroll\\\",e))}),Je(t.scroller,\\\"mousewheel\\\",function(t){return di(e,t)}),Je(t.scroller,\\\"DOMMouseScroll\\\",function(t){return di(e,t)}),Je(t.wrapper,\\\"scroll\\\",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){nt(e,t)||ct(t)},over:function(t){nt(e,t)||(!function(e,t){var r=nn(e,t);if(r){var n=document.createDocumentFragment();an(e,r,n),e.display.dragCursor||(e.display.dragCursor=O(\\\"div\\\",null,\\\"CodeMirror-cursors CodeMirror-dragcursors\\\"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),N(e.display.dragCursor,n)}}(e,t),ct(t))},start:function(t){return function(e,t){if(l&&(!e.state.draggingText||+new Date-Lo<100))ct(t);else if(!nt(e,t)&&!yr(e.display,t)&&(t.dataTransfer.setData(\\\"Text\\\",e.getSelection()),t.dataTransfer.effectAllowed=\\\"copyMove\\\",t.dataTransfer.setDragImage&&!f)){var r=O(\\\"img\\\",null,null,\\\"position: fixed; left: 0; top: 0;\\\");r.src=\\\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\\\",h&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),h&&r.parentNode.removeChild(r)}}(e,t)},drop:jn(e,ko),leave:function(t){nt(e,t)||To(e)}};var a=t.input.getField();Je(a,\\\"keyup\\\",function(t){return nl.call(e,t)}),Je(a,\\\"keydown\\\",jn(e,rl)),Je(a,\\\"keypress\\\",jn(e,il)),Je(a,\\\"focus\\\",function(t){return pn(e,t)}),Je(a,\\\"blur\\\",function(t){return gn(e,t)})}(this),Oo(),In(this),this.curOp.forceUpdate=!0,Mi(this,i),t.autofocus&&!m||this.hasFocus()?setTimeout(E(pn,this),20):gn(this),vl)vl.hasOwnProperty(c)&&vl[c](n,t[c],pl);wn(this),t.finishInit&&t.finishInit(this);for(var d=0;d<xl.length;++d)xl[d](n);Rn(this),a&&t.lineWrapping&&\\\"optimizelegibility\\\"==getComputedStyle(u.lineDiv).textRendering&&(u.lineDiv.style.textRendering=\\\"auto\\\")}wl.defaults=gl,wl.optionHandlers=vl;var xl=[];function Cl(e,t,r,n){var i,o=e.doc;null==r&&(r=\\\"add\\\"),\\\"smart\\\"==r&&(o.mode.indent?i=zt(e,t).state:r=\\\"prev\\\");var l=e.options.tabSize,s=se(o,t),a=I(s.text,null,l);s.stateAfter&&(s.stateAfter=null);var u,c=s.text.match(/^\\\\s*/)[0];if(n||/\\\\S/.test(s.text)){if(\\\"smart\\\"==r&&((u=o.mode.indent(i,s.text.slice(c.length),s.text))==U||u>150)){if(!n)return;r=\\\"prev\\\"}}else u=0,r=\\\"not\\\";\\\"prev\\\"==r?u=t>o.first?I(se(o,t-1).text,null,l):0:\\\"add\\\"==r?u=a+e.options.indentUnit:\\\"subtract\\\"==r?u=a-e.options.indentUnit:\\\"number\\\"==typeof r&&(u=a+r),u=Math.max(0,u);var h=\\\"\\\",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/l);d;--d)f+=l,h+=\\\"\\\\t\\\";if(f<u&&(h+=_(u-f)),h!=c)return lo(o,h,ge(t,0),ge(t,c.length),\\\"+input\\\"),s.stateAfter=null,!0;for(var p=0;p<o.sel.ranges.length;p++){var g=o.sel.ranges[p];if(g.head.line==t&&g.head.ch<c.length){var v=ge(t,c.length);Ui(o,p,new gi(v,v));break}}}wl.defineInitHook=function(e){return xl.push(e)};var Sl=null;function Ll(e){Sl=e}function kl(e,t,r,n,i){var o=e.doc;e.display.shift=!1,n||(n=o.sel);var l,s=e.state.pasteIncoming||\\\"paste\\\"==i,a=bt(t),u=null;if(s&&n.ranges.length>1)if(Sl&&Sl.text.join(\\\"\\\\n\\\")==t){if(n.ranges.length%Sl.text.length==0){u=[];for(var c=0;c<Sl.text.length;c++)u.push(o.splitLines(Sl.text[c]))}}else a.length==n.ranges.length&&e.options.pasteLinesPerSelection&&(u=$(a,function(e){return[e]}));for(var h=n.ranges.length-1;h>=0;h--){var f=n.ranges[h],d=f.from(),p=f.to();f.empty()&&(r&&r>0?d=ge(d.line,d.ch-r):e.state.overwrite&&!s?p=ge(p.line,Math.min(se(o,p.line).text.length,p.ch+q(a).length)):Sl&&Sl.lineWise&&Sl.text.join(\\\"\\\\n\\\")==t&&(d=p=ge(d.line,0))),l=e.curOp.updateInput;var g={from:d,to:p,text:u?u[h%u.length]:a,origin:i||(s?\\\"paste\\\":e.state.cutIncoming?\\\"cut\\\":\\\"+input\\\")};to(e.doc,g),or(e,\\\"inputRead\\\",e,g)}t&&!s&&Ml(e,t),Sn(e),e.curOp.updateInput=l,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Tl(e,t){var r=e.clipboardData&&e.clipboardData.getData(\\\"Text\\\");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Kn(t,function(){return kl(t,r,0,null,\\\"paste\\\")}),!0}function Ml(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(t.indexOf(o.electricChars.charAt(s))>-1){l=Cl(e,i.head.line,\\\"smart\\\");break}}else o.electricInput&&o.electricInput.test(se(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Cl(e,i.head.line,\\\"smart\\\"));l&&or(e,\\\"electricInput\\\",e,i.head.line)}}}function Nl(e){for(var t=[],r=[],n=0;n<e.doc.sel.ranges.length;n++){var i=e.doc.sel.ranges[n].head.line,o={anchor:ge(i,0),head:ge(i+1,0)};r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function Ol(e,t){e.setAttribute(\\\"autocorrect\\\",\\\"off\\\"),e.setAttribute(\\\"autocapitalize\\\",\\\"off\\\"),e.setAttribute(\\\"spellcheck\\\",!!t)}function Al(){var e=O(\\\"textarea\\\",null,null,\\\"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\\\"),t=O(\\\"div\\\",[e],null,\\\"overflow: hidden; position: relative; width: 3px; height: 0px;\\\");return a?e.style.width=\\\"1000px\\\":e.setAttribute(\\\"wrap\\\",\\\"off\\\"),g&&(e.style.border=\\\"1px solid black\\\"),Ol(e),t}function Dl(e,t,r,n,i){var o=t,l=r,s=se(e,t.line);function a(n){var o,l;if(null==(o=i?function(e,t,r,n){var i=Ze(t,e.doc.direction);if(!i)return jo(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky=\\\"before\\\"):r.ch<=0&&(r.ch=0,r.sticky=\\\"after\\\");var o=qe(i,r.ch,r.sticky),l=i[o];if(\\\"ltr\\\"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from<r.ch))return jo(t,r,n);var s,a=function(e,r){return Ko(t,e instanceof ge?e.ch:e,r)},u=function(r){return e.options.lineWrapping?(s=s||Nr(e,t),_r(e,t,s,r)):{begin:0,end:t.text.length}},c=u(\\\"before\\\"==r.sticky?a(r,-1):r.ch);if(\\\"rtl\\\"==e.doc.direction||1==l.level){var h=1==l.level==n<0,f=a(r,h?1:-1);if(null!=f&&(h?f<=l.to&&f<=c.end:f>=l.from&&f>=c.begin)){var d=h?\\\"before\\\":\\\"after\\\";return new ge(r.line,f,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new ge(r.line,a(e,1),\\\"before\\\"):new ge(r.line,e,\\\"after\\\")};e>=0&&e<i.length;e+=t){var l=i[e],s=t>0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u<l.to)return o(u,s);if(u=s?l.from:a(l.to,-1),n.begin<=u&&u<n.end)return o(u,s)}},g=p(o+n,n,c);if(g)return g;var v=n>0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}(e.cm,s,t,r):jo(s,t,r))){if(n||(l=t.line+r)<e.first||l>=e.first+e.size||(t=new ge(l,t.ch,t.sticky),!(s=se(e,l))))return!1;t=Xo(i,e.cm,s,t.line,r)}else t=o;return!0}if(\\\"char\\\"==n)a();else if(\\\"column\\\"==n)a(!0);else if(\\\"word\\\"==n||\\\"group\\\"==n)for(var u=null,c=\\\"group\\\"==n,h=e.cm&&e.cm.getHelper(t,\\\"wordChars\\\"),f=!0;!(r<0)||a(!f);f=!1){var d=s.text.charAt(t.ch)||\\\"\\\\n\\\",p=te(d,h)?\\\"w\\\":c&&\\\"\\\\n\\\"==d?\\\"n\\\":!c||/\\\\s/.test(d)?null:\\\"p\\\";if(!c||f||p||(p=\\\"s\\\"),u&&u!=p){r<0&&(r=1,a(),t.sticky=\\\"after\\\");break}if(p&&(u=p),r>0&&!a(!f))break}var g=Zi(e,t,o,l,!0);return me(o,g)&&(g.hitSide=!0),g}function Wl(e,t,r,n){var i,o,l=e.doc,s=t.left;if(\\\"page\\\"==n){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),u=Math.max(a-.5*Zr(e.display),3);i=(r>0?t.bottom:t.top)+r*u}else\\\"line\\\"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=Xr(e,s,i)).outside;){if(r<0?i<=0:i>=l.height){o.hitSide=!0;break}i+=5*r}return o}var Hl=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new R,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Fl(e,t){var r=Mr(e,t.line);if(!r||r.hidden)return null;var n=se(e.doc,t.line),i=kr(r,n,t.line),o=Ze(n,e.doc.direction),l=\\\"left\\\";o&&(l=qe(o,t.ch)%2?\\\"right\\\":\\\"left\\\");var s=Wr(i.map,t.ch,l);return s.offset=\\\"right\\\"==s.collapse?s.end:s.start,s}function Pl(e,t){return t&&(e.bad=!0),e}function El(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return Pl(e.clipPos(ge(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==n)return zl(o,t,r)}}function zl(e,t,r){var n=e.text.firstChild,i=!1;if(!t||!D(n,t))return Pl(ge(he(e.line),0),!0);if(t==n&&(i=!0,t=n.childNodes[r],r=0,!t)){var o=e.rest?q(e.rest):e.line;return Pl(ge(he(o),o.text.length),i)}var l=3==t.nodeType?t:null,s=t;for(l||1!=t.childNodes.length||3!=t.firstChild.nodeType||(l=t.firstChild,r&&(r=l.nodeValue.length));s.parentNode!=n;)s=s.parentNode;var a=e.measure,u=a.maps;function c(t,r,n){for(var i=-1;i<(u?u.length:0);i++)for(var o=i<0?a.map:u[i],l=0;l<o.length;l+=3){var s=o[l+2];if(s==t||s==r){var c=he(i<0?e.line:e.rest[i]),h=o[l]+n;return(n<0||s!=t)&&(h=o[l+(n?1:0)]),ge(c,h)}}}var h=c(l,s,r);if(h)return Pl(h,i);for(var f=s.nextSibling,d=l?l.nodeValue.length-r:0;f;f=f.nextSibling){if(h=c(f,f.firstChild,0))return Pl(ge(h.line,h.ch-d),i);d+=f.textContent.length}for(var p=s.previousSibling,g=r;p;p=p.previousSibling){if(h=c(p,p.firstChild,-1))return Pl(ge(h.line,h.ch+g),i);g+=p.textContent.length}}Hl.prototype.init=function(e){var t=this,r=this,n=r.cm,i=r.div=e.lineDiv;function o(e){if(!nt(n,e)){if(n.somethingSelected())Ll({lineWise:!1,text:n.getSelections()}),\\\"cut\\\"==e.type&&n.replaceSelection(\\\"\\\",null,\\\"cut\\\");else{if(!n.options.lineWiseCopyCut)return;var t=Nl(n);Ll({lineWise:!0,text:t.text}),\\\"cut\\\"==e.type&&n.operation(function(){n.setSelections(t.ranges,0,V),n.replaceSelection(\\\"\\\",null,\\\"cut\\\")})}if(e.clipboardData){e.clipboardData.clearData();var o=Sl.text.join(\\\"\\\\n\\\");if(e.clipboardData.setData(\\\"Text\\\",o),e.clipboardData.getData(\\\"Text\\\")==o)return void e.preventDefault()}var l=Al(),s=l.firstChild;n.display.lineSpace.insertBefore(l,n.display.lineSpace.firstChild),s.value=Sl.text.join(\\\"\\\\n\\\");var a=document.activeElement;P(s),setTimeout(function(){n.display.lineSpace.removeChild(l),a.focus(),a==i&&r.showPrimarySelection()},50)}}Ol(i,n.options.spellcheck),Je(i,\\\"paste\\\",function(e){nt(n,e)||Tl(e,n)||s<=11&&setTimeout(jn(n,function(){return t.updateFromDOM()}),20)}),Je(i,\\\"compositionstart\\\",function(e){t.composing={data:e.data,done:!1}}),Je(i,\\\"compositionupdate\\\",function(e){t.composing||(t.composing={data:e.data,done:!1})}),Je(i,\\\"compositionend\\\",function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),Je(i,\\\"touchstart\\\",function(){return r.forceCompositionEnd()}),Je(i,\\\"input\\\",function(){t.composing||t.readFromDOMSoon()}),Je(i,\\\"copy\\\",o),Je(i,\\\"cut\\\",o)},Hl.prototype.prepareSelection=function(){var e=sn(this.cm,!1);return e.focus=this.cm.state.focused,e},Hl.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Hl.prototype.showPrimarySelection=function(){var e=window.getSelection(),t=this.cm,n=t.doc.sel.primary(),i=n.from(),o=n.to();if(t.display.viewTo==t.display.viewFrom||i.line>=t.display.viewTo||o.line<t.display.viewFrom)e.removeAllRanges();else{var l=El(t,e.anchorNode,e.anchorOffset),s=El(t,e.focusNode,e.focusOffset);if(!l||l.bad||!s||s.bad||0!=ve(we(l,s),i)||0!=ve(be(l,s),o)){var a=t.display.view,u=i.line>=t.display.viewFrom&&Fl(t,i)||{node:a[0].measure.map[2],offset:0},c=o.line<t.display.viewTo&&Fl(t,o);if(!c){var h=a[a.length-1].measure,f=h.maps?h.maps[h.maps.length-1]:h.map;c={node:f[f.length-1],offset:f[f.length-2]-f[f.length-3]}}if(u&&c){var d,p=e.rangeCount&&e.getRangeAt(0);try{d=k(u.node,u.offset,c.offset,c.node)}catch(e){}d&&(!r&&t.state.focused?(e.collapse(u.node,u.offset),d.collapsed||(e.removeAllRanges(),e.addRange(d))):(e.removeAllRanges(),e.addRange(d)),p&&null==e.anchorNode?e.addRange(p):r&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Hl.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Hl.prototype.showMultipleSelections=function(e){N(this.cm.display.cursorDiv,e.cursors),N(this.cm.display.selectionDiv,e.selection)},Hl.prototype.rememberSelection=function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Hl.prototype.selectionInEditor=function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return D(this.div,t)},Hl.prototype.focus=function(){\\\"nocursor\\\"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Hl.prototype.blur=function(){this.div.blur()},Hl.prototype.getField=function(){return this.div},Hl.prototype.supportsTouch=function(){return!0},Hl.prototype.receivedFocus=function(){var e=this;this.selectionInEditor()?this.pollSelection():Kn(this.cm,function(){return e.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,function t(){e.cm.state.focused&&(e.pollSelection(),e.polling.set(e.cm.options.pollInterval,t))})},Hl.prototype.selectionChanged=function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Hl.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(v&&c&&this.cm.options.gutters.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}(e.anchorNode))return this.cm.triggerOnKeyDown({type:\\\"keydown\\\",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var r=El(t,e.anchorNode,e.anchorOffset),n=El(t,e.focusNode,e.focusOffset);r&&n&&Kn(t,function(){ji(t.doc,mi(r,n),V),(r.bad||n.bad)&&(t.curOp.selectionChanged=!0)})}}},Hl.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t,r,n=this.cm,i=n.display,o=n.doc.sel.primary(),l=o.from(),s=o.to();if(0==l.ch&&l.line>n.firstLine()&&(l=ge(l.line-1,se(n.doc,l.line-1).length)),s.ch==se(n.doc,s.line).text.length&&s.line<n.lastLine()&&(s=ge(s.line+1,0)),l.line<i.viewFrom||s.line>i.viewTo-1)return!1;l.line==i.viewFrom||0==(e=on(n,l.line))?(t=he(i.view[0].line),r=i.view[0].node):(t=he(i.view[e].line),r=i.view[e-1].node.nextSibling);var a,u,c=on(n,s.line);if(c==i.view.length-1?(a=i.viewTo-1,u=i.lineDiv.lastChild):(a=he(i.view[c+1].line)-1,u=i.view[c+1].node.previousSibling),!r)return!1;for(var h=n.doc.splitLines(function(e,t,r,n,i){var o=\\\"\\\",l=!1,s=e.doc.lineSeparator();function a(){l&&(o+=s,l=!1)}function u(e){e&&(a(),o+=e)}function c(t){if(1==t.nodeType){var r=t.getAttribute(\\\"cm-text\\\");if(null!=r)return void u(r||t.textContent.replace(/\\\\u200b/g,\\\"\\\"));var o,h=t.getAttribute(\\\"cm-marker\\\");if(h){var f=e.findMarks(ge(n,0),ge(i+1,0),(g=+h,function(e){return e.id==g}));return void(f.length&&(o=f[0].find(0))&&u(ae(e.doc,o.from,o.to).join(s)))}if(\\\"false\\\"==t.getAttribute(\\\"contenteditable\\\"))return;var d=/^(pre|div|p)$/i.test(t.nodeName);d&&a();for(var p=0;p<t.childNodes.length;p++)c(t.childNodes[p]);d&&(l=!0)}else 3==t.nodeType&&u(t.nodeValue);var g}for(;c(t),t!=r;)t=t.nextSibling;return o}(n,r,u,t,a)),f=ae(n.doc,ge(t,0),ge(a,se(n.doc,a).text.length));h.length>1&&f.length>1;)if(q(h)==q(f))h.pop(),f.pop(),a--;else{if(h[0]!=f[0])break;h.shift(),f.shift(),t++}for(var d=0,p=0,g=h[0],v=f[0],m=Math.min(g.length,v.length);d<m&&g.charCodeAt(d)==v.charCodeAt(d);)++d;for(var y=q(h),b=q(f),w=Math.min(y.length-(1==h.length?d:0),b.length-(1==f.length?d:0));p<w&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)++p;if(1==h.length&&1==f.length&&t==l.line)for(;d&&d>l.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\\\\u200b+/,\\\"\\\"),h[0]=h[0].slice(d).replace(/\\\\u200b+$/,\\\"\\\");var x=ge(t,d),C=ge(a,f.length?q(f).length-p:0);return h.length>1||h[0]||ve(x,C)?(lo(n.doc,h,x,C,\\\"+input\\\"),!0):void 0},Hl.prototype.ensurePolled=function(){this.forceCompositionEnd()},Hl.prototype.reset=function(){this.forceCompositionEnd()},Hl.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Hl.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Hl.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Kn(this.cm,function(){return _n(e.cm)})},Hl.prototype.setUneditable=function(e){e.contentEditable=\\\"false\\\"},Hl.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||jn(this.cm,kl)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Hl.prototype.readOnlyChanged=function(e){this.div.contentEditable=String(\\\"nocursor\\\"!=e)},Hl.prototype.onContextMenu=function(){},Hl.prototype.resetPosition=function(){},Hl.prototype.needsContentAttribute=!0;var Il,Rl,Bl,Gl=function(e){this.cm=e,this.prevInput=\\\"\\\",this.pollingFast=!1,this.polling=new R,this.hasSelection=!1,this.composing=null};Gl.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!nt(n,e)){if(n.somethingSelected())Ll({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Nl(n);Ll({lineWise:!0,text:t.text}),\\\"cut\\\"==e.type?n.setSelections(t.ranges,null,V):(r.prevInput=\\\"\\\",i.value=t.text.join(\\\"\\\\n\\\"),P(i))}\\\"cut\\\"==e.type&&(n.state.cutIncoming=!0)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width=\\\"0px\\\"),Je(i,\\\"input\\\",function(){l&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()}),Je(i,\\\"paste\\\",function(e){nt(n,e)||Tl(e,n)||(n.state.pasteIncoming=!0,r.fastPoll())}),Je(i,\\\"cut\\\",o),Je(i,\\\"copy\\\",o),Je(e.scroller,\\\"paste\\\",function(t){yr(e,t)||nt(n,t)||(n.state.pasteIncoming=!0,r.focus())}),Je(e.lineSpace,\\\"selectstart\\\",function(t){yr(e,t)||st(t)}),Je(i,\\\"compositionstart\\\",function(){var e=n.getCursor(\\\"from\\\");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor(\\\"to\\\"),{className:\\\"CodeMirror-composing\\\"})}}),Je(i,\\\"compositionend\\\",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},Gl.prototype.createField=function(e){this.wrapper=Al(),this.textarea=this.wrapper.firstChild},Gl.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=sn(e);if(e.options.moveInputWithCursor){var i=Vr(e,r.sel.primary().head,\\\"div\\\"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},Gl.prototype.showSelection=function(e){var t=this.cm.display;N(t.cursorDiv,e.cursors),N(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+\\\"px\\\",this.wrapper.style.left=e.teLeft+\\\"px\\\")},Gl.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput=\\\"\\\";var r=t.getSelection();this.textarea.value=r,t.state.focused&&P(this.textarea),l&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value=\\\"\\\",l&&s>=9&&(this.hasSelection=null))}},Gl.prototype.getField=function(){return this.textarea},Gl.prototype.supportsTouch=function(){return!1},Gl.prototype.focus=function(){if(\\\"nocursor\\\"!=this.cm.options.readOnly&&(!m||W()!=this.textarea))try{this.textarea.focus()}catch(e){}},Gl.prototype.blur=function(){this.textarea.blur()},Gl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Gl.prototype.receivedFocus=function(){this.slowPoll()},Gl.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Gl.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))})},Gl.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||wt(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(l&&s>=9&&this.hasSelection===i||y&&/[\\\\uf700-\\\\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n=\\\"\\\"),8666==o)return this.reset(),this.cm.execCommand(\\\"undo\\\")}for(var a=0,u=Math.min(n.length,i.length);a<u&&n.charCodeAt(a)==i.charCodeAt(a);)++a;return Kn(t,function(){kl(t,i.slice(a),n.length-a,null,e.composing?\\\"*compose\\\":null),i.length>1e3||i.indexOf(\\\"\\\\n\\\")>-1?r.value=e.prevInput=\\\"\\\":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor(\\\"to\\\"),{className:\\\"CodeMirror-composing\\\"}))}),!0},Gl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Gl.prototype.onKeyPress=function(){l&&s>=9&&(this.hasSelection=null),this.fastPoll()},Gl.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea,o=nn(r,e),u=n.scroller.scrollTop;if(o&&!h){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&jn(r,ji)(r.doc,mi(o),V);var c=i.style.cssText,f=t.wrapper.style.cssText;t.wrapper.style.cssText=\\\"position: absolute\\\";var d,p=t.wrapper.getBoundingClientRect();if(i.style.cssText=\\\"position: absolute; width: 30px; height: 30px;\\\\n top: \\\"+(e.clientY-p.top-5)+\\\"px; left: \\\"+(e.clientX-p.left-5)+\\\"px;\\\\n z-index: 1000; background: \\\"+(l?\\\"rgba(255, 255, 255, .05)\\\":\\\"transparent\\\")+\\\";\\\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\\\",a&&(d=window.scrollY),n.input.focus(),a&&window.scrollTo(null,d),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=\\\" \\\"),t.contextMenuPending=!0,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),l&&s>=9&&v(),S){ct(e);var g=function(){tt(window,\\\"mouseup\\\",g),setTimeout(m,20)};Je(window,\\\"mouseup\\\",g)}else setTimeout(m,50)}function v(){if(null!=i.selectionStart){var e=r.somethingSelected(),o=\\\"\\\"+(e?i.value:\\\"\\\");i.value=\\\"⇚\\\",i.value=o,t.prevInput=e?\\\"\\\":\\\"\\\",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function m(){if(t.contextMenuPending=!1,t.wrapper.style.cssText=f,i.style.cssText=c,l&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=u),null!=i.selectionStart){(!l||l&&s<9)&&v();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&\\\"\\\"==t.prevInput?jn(r,Ji)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},Gl.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=\\\"nocursor\\\"==e},Gl.prototype.setUneditable=function(){},Gl.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=pl&&i(e,t,r)}:i)}e.defineOption=r,e.Init=pl,r(\\\"value\\\",\\\"\\\",function(e,t){return e.setValue(t)},!0),r(\\\"mode\\\",null,function(e,t){e.doc.modeOption=t,Ci(e)},!0),r(\\\"indentUnit\\\",2,Ci,!0),r(\\\"indentWithTabs\\\",!1),r(\\\"smartIndent\\\",!0),r(\\\"tabSize\\\",4,function(e){Si(e),Er(e),_n(e)},!0),r(\\\"lineSeparator\\\",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(ge(n,o))}n++});for(var i=r.length-1;i>=0;i--)lo(e.doc,t,r[i],ge(r[i].line,r[i].ch+t.length))}}),r(\\\"specialChars\\\",/[\\\\u0000-\\\\u001f\\\\u007f-\\\\u009f\\\\u00ad\\\\u061c\\\\u200b-\\\\u200f\\\\u2028\\\\u2029\\\\ufeff]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test(\\\"\\\\t\\\")?\\\"\\\":\\\"|\\\\t\\\"),\\\"g\\\"),r!=pl&&e.refresh()}),r(\\\"specialCharPlaceholder\\\",$t,function(e){return e.refresh()},!0),r(\\\"electricChars\\\",!0),r(\\\"inputStyle\\\",m?\\\"contenteditable\\\":\\\"textarea\\\",function(){throw new Error(\\\"inputStyle can not (yet) be changed in a running editor\\\")},!0),r(\\\"spellcheck\\\",!1,function(e,t){return e.getInputField().spellcheck=t},!0),r(\\\"rtlMoveVisually\\\",!w),r(\\\"wholeLineUpdateBefore\\\",!0),r(\\\"theme\\\",\\\"default\\\",function(e){dl(e),ml(e)},!0),r(\\\"keyMap\\\",\\\"default\\\",function(e,t,r){var n=Uo(t),i=r!=pl&&Uo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),r(\\\"extraKeys\\\",null),r(\\\"configureMouse\\\",null),r(\\\"lineWrapping\\\",!1,bl,!0),r(\\\"gutters\\\",[],function(e){ai(e.options),ml(e)},!0),r(\\\"fixedGutter\\\",!0,function(e,t){e.display.gutters.style.left=t?en(e.display)+\\\"px\\\":\\\"0\\\",e.refresh()},!0),r(\\\"coverGutterNextToScrollbar\\\",!1,function(e){return Hn(e)},!0),r(\\\"scrollbarStyle\\\",\\\"native\\\",function(e){En(e),Hn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),r(\\\"lineNumbers\\\",!1,function(e){ai(e.options),ml(e)},!0),r(\\\"firstLineNumber\\\",1,ml,!0),r(\\\"lineNumberFormatter\\\",function(e){return e},ml,!0),r(\\\"showCursorWhenSelecting\\\",!1,ln,!0),r(\\\"resetSelectionOnContextMenu\\\",!0),r(\\\"lineWiseCopyCut\\\",!0),r(\\\"pasteLinesPerSelection\\\",!0),r(\\\"readOnly\\\",!1,function(e,t){\\\"nocursor\\\"==t&&(gn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),r(\\\"disableInput\\\",!1,function(e,t){t||e.display.input.reset()},!0),r(\\\"dragDrop\\\",!0,yl),r(\\\"allowDropFileTypes\\\",null),r(\\\"cursorBlinkRate\\\",530),r(\\\"cursorScrollMargin\\\",0),r(\\\"cursorHeight\\\",1,ln,!0),r(\\\"singleCursorHeightPerLine\\\",!0,ln,!0),r(\\\"workTime\\\",100),r(\\\"workDelay\\\",100),r(\\\"flattenSpans\\\",!0,Si,!0),r(\\\"addModeClass\\\",!1,Si,!0),r(\\\"pollInterval\\\",100),r(\\\"undoDepth\\\",200,function(e,t){return e.doc.history.undoDepth=t}),r(\\\"historyEventDelay\\\",1250),r(\\\"viewportMargin\\\",10,function(e){return e.refresh()},!0),r(\\\"maxHighlightLength\\\",1e4,Si,!0),r(\\\"moveInputWithCursor\\\",!0,function(e,t){t||e.display.input.resetPosition()}),r(\\\"tabindex\\\",null,function(e,t){return e.display.input.getField().tabIndex=t||\\\"\\\"}),r(\\\"autofocus\\\",null),r(\\\"direction\\\",\\\"ltr\\\",function(e,t){return e.doc.setDirection(t)},!0)}(wl),Rl=(Il=wl).optionHandlers,Bl=Il.helpers={},Il.prototype={constructor:Il,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var r=this.options,n=r[e];r[e]==t&&\\\"mode\\\"!=e||(r[e]=t,Rl.hasOwnProperty(e)&&jn(this,Rl[e])(this,t,n),rt(this,\\\"optionChange\\\",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?\\\"push\\\":\\\"unshift\\\"](Uo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;r<t.length;++r)if(t[r]==e||t[r].name==e)return t.splice(r,1),!0},addOverlay:Xn(function(e,t){var r=e.token?e:Il.getMode(this.options,e);if(r.startState)throw new Error(\\\"Overlays may not be stateful.\\\");!function(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}(this.state.overlays,{mode:r,modeSpec:e,opaque:t&&t.opaque,priority:t&&t.priority||0},function(e){return e.priority}),this.state.modeGen++,_n(this)}),removeOverlay:Xn(function(e){for(var t=this.state.overlays,r=0;r<t.length;++r){var n=t[r].modeSpec;if(n==e||\\\"string\\\"==typeof e&&n.name==e)return t.splice(r,1),this.state.modeGen++,void _n(this)}}),indentLine:Xn(function(e,t,r){\\\"string\\\"!=typeof t&&\\\"number\\\"!=typeof t&&(t=null==t?this.options.smartIndent?\\\"smart\\\":\\\"prev\\\":t?\\\"add\\\":\\\"subtract\\\"),de(this.doc,e)&&Cl(this,e,t,r)}),indentSelection:Xn(function(e){for(var t=this,r=this.doc.sel.ranges,n=-1,i=0;i<r.length;i++){var o=r[i];if(o.empty())o.head.line>n&&(Cl(t,o.head.line,e,!0),n=o.head.line,i==t.doc.sel.primIndex&&Sn(t));else{var l=o.from(),s=o.to(),a=Math.max(n,l.line);n=Math.min(t.lastLine(),s.line-(s.ch?0:1))+1;for(var u=a;u<n;++u)Cl(t,u,e);var c=t.doc.sel.ranges;0==l.ch&&r.length==c.length&&c[i].from().ch>0&&Ui(t.doc,i,new gi(l,c[i].to()),V)}}}),getTokenAt:function(e,t){return Ut(this,e,t)},getLineTokens:function(e,t){return Ut(this,ge(e),t,!0)},getTokenTypeAt:function(e){e=Ce(this.doc,e);var t,r=Et(this,se(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]<o)){t=r[2*l+2];break}n=l+1}}var s=t?t.indexOf(\\\"overlay \\\"):-1;return s<0?t:0==s?null:t.slice(0,s-1)},getModeAt:function(e){var t=this.doc.mode;return t.innerMode?Il.innerMode(t,this.getTokenAt(e).state).mode:t},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var r=[];if(!Bl.hasOwnProperty(t))return r;var n=Bl[t],i=this.getModeAt(e);if(\\\"string\\\"==typeof i[t])n[i[t]]&&r.push(n[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var l=n[i[t][o]];l&&r.push(l)}else i.helperType&&n[i.helperType]?r.push(n[i.helperType]):n[i.name]&&r.push(n[i.name]);for(var s=0;s<n._global.length;s++){var a=n._global[s];a.pred(i,this)&&-1==B(r,a.val)&&r.push(a.val)}return r},getStateAfter:function(e,t){var r=this.doc;return zt(this,(e=xe(r,null==e?r.first+r.size-1:e))+1,t).state},cursorCoords:function(e,t){var r=this.doc.sel.primary();return Vr(this,null==e?r.head:\\\"object\\\"==typeof e?Ce(this.doc,e):e?r.from():r.to(),t||\\\"page\\\")},charCoords:function(e,t){return Ur(this,Ce(this.doc,e),t||\\\"page\\\")},coordsChar:function(e,t){return Xr(this,(e=Gr(this,e,t||\\\"page\\\")).left,e.top)},lineAtHeight:function(e,t){return e=Gr(this,{top:e,left:0},t||\\\"page\\\").top,fe(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,r){var n,i=!1;if(\\\"number\\\"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,i=!0),n=se(this.doc,e)}else n=e;return Br(this,n,{top:0,left:0},t||\\\"page\\\",r||i).top+(i?this.doc.height-je(n):0)},defaultTextHeight:function(){return Zr(this.display)},defaultCharWidth:function(){return Qr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,l,s,a=this.display,u=(e=Vr(this,Ce(this.doc,e))).bottom,c=e.left;if(t.style.position=\\\"absolute\\\",t.setAttribute(\\\"cm-ignore-events\\\",\\\"true\\\"),this.display.input.setUneditable(t),a.sizer.appendChild(t),\\\"over\\\"==n)u=e.top;else if(\\\"above\\\"==n||\\\"near\\\"==n){var h=Math.max(a.wrapper.clientHeight,this.doc.height),f=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);(\\\"above\\\"==n||e.bottom+t.offsetHeight>h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+\\\"px\\\",t.style.left=t.style.right=\\\"\\\",\\\"right\\\"==i?(c=a.sizer.clientWidth-t.offsetWidth,t.style.right=\\\"0px\\\"):(\\\"left\\\"==i?c=0:\\\"middle\\\"==i&&(c=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+\\\"px\\\"),r&&(o=this,l={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(s=xn(o,l)).scrollTop&&Mn(o,s.scrollTop),null!=s.scrollLeft&&On(o,s.scrollLeft))},triggerOnKeyDown:Xn(rl),triggerOnKeyPress:Xn(il),triggerOnKeyUp:nl,triggerOnMouseDown:Xn(al),execCommand:function(e){if(Yo.hasOwnProperty(e))return Yo[e].call(null,this)},triggerElectric:Xn(function(e){Ml(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=Ce(this.doc,e),l=0;l<t&&!(o=Dl(this.doc,o,i,r,n)).hitSide;++l);return o},moveH:Xn(function(e,t){var r=this;this.extendSelectionsBy(function(n){return r.display.shift||r.doc.extend||n.empty()?Dl(r.doc,n.head,e,t,r.options.rtlMoveVisually):e<0?n.from():n.to()},j)}),deleteH:Xn(function(e,t){var r=this.doc.sel,n=this.doc;r.somethingSelected()?n.replaceSelection(\\\"\\\",null,\\\"+delete\\\"):Vo(this,function(r){var i=Dl(n,r.head,e,t,!1);return e<0?{from:i,to:r.head}:{from:r.head,to:i}})}),findPosV:function(e,t,r,n){var i=1,o=n;t<0&&(i=-1,t=-t);for(var l=Ce(this.doc,e),s=0;s<t;++s){var a=Vr(this,l,\\\"div\\\");if(null==o?o=a.left:a.left=o,(l=Wl(this,a,i,r)).hitSide)break}return l},moveV:Xn(function(e,t){var r=this,n=this.doc,i=[],o=!this.display.shift&&!n.extend&&n.sel.somethingSelected();if(n.extendSelectionsBy(function(l){if(o)return e<0?l.from():l.to();var s=Vr(r,l.head,\\\"div\\\");null!=l.goalColumn&&(s.left=l.goalColumn),i.push(s.left);var a=Wl(r,s,e,t);return\\\"page\\\"==t&&l==n.sel.primary()&&Cn(r,Ur(r,a,\\\"div\\\").top-s.top),a},j),i.length)for(var l=0;l<n.sel.ranges.length;l++)n.sel.ranges[l].goalColumn=i[l]}),findWordAt:function(e){var t=se(this.doc,e.line).text,r=e.ch,n=e.ch;if(t){var i=this.getHelper(e,\\\"wordChars\\\");\\\"before\\\"!=e.sticky&&n!=t.length||!r?++n:--r;for(var o=t.charAt(r),l=te(o,i)?function(e){return te(e,i)}:/\\\\s/.test(o)?function(e){return/\\\\s/.test(e)}:function(e){return!/\\\\s/.test(e)&&!te(e)};r>0&&l(t.charAt(r-1));)--r;for(;n<t.length&&l(t.charAt(n));)++n}return new gi(ge(e.line,r),ge(e.line,n))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?H(this.display.cursorDiv,\\\"CodeMirror-overwrite\\\"):T(this.display.cursorDiv,\\\"CodeMirror-overwrite\\\"),rt(this,\\\"overwriteToggle\\\",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==W()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:Xn(function(e,t){Ln(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Cr(this)-this.display.barHeight,width:e.scrollWidth-Cr(this)-this.display.barWidth,clientHeight:Lr(this),clientWidth:Sr(this)}},scrollIntoView:Xn(function(e,t){var r,n;null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):\\\"number\\\"==typeof e?e={from:ge(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?(n=e,kn(r=this),r.curOp.scrollToPos=n):Tn(this,e.from,e.to,e.margin)}),setSize:Xn(function(e,t){var r=this,n=function(e){return\\\"number\\\"==typeof e||/^\\\\d+$/.test(String(e))?e+\\\"px\\\":e};null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&Pr(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){qn(r,i,\\\"widget\\\");break}++i}),this.curOp.forceUpdate=!0,rt(this,\\\"refresh\\\",this)}),operation:function(e){return Kn(this,e)},startOperation:function(){return In(this)},endOperation:function(){return Rn(this)},refresh:Xn(function(){var e=this.display.cachedTextHeight;_n(this),this.curOp.forceUpdate=!0,Er(this),Ln(this,this.doc.scrollLeft,this.doc.scrollTop),oi(this),(null==e||Math.abs(e-Zr(this.display))>.5)&&rn(this),rt(this,\\\"refresh\\\",this)}),swapDoc:Xn(function(e){var t=this.doc;return t.cm=null,Mi(this,e),Er(this),this.display.input.reset(),Ln(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,or(this,\\\"swapDoc\\\",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},lt(Il),Il.registerHelper=function(e,t,r){Bl.hasOwnProperty(e)||(Bl[e]=Il[e]={_global:[]}),Bl[e][t]=r},Il.registerGlobalHelper=function(e,t,r,n){Il.registerHelper(e,t,n),Bl[e]._global.push({pred:r,val:n})};var Ul,Vl=\\\"iter insert remove copy getEditor constructor\\\".split(\\\" \\\");for(var Kl in So.prototype)So.prototype.hasOwnProperty(Kl)&&B(Vl,Kl)<0&&(wl.prototype[Kl]=function(e){return function(){return e.apply(this.doc,arguments)}}(So.prototype[Kl]));return lt(So),wl.inputStyles={textarea:Gl,contenteditable:Hl},wl.defineMode=function(e){wl.defaults.mode||\\\"null\\\"==e||(wl.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),St[e]=t}.apply(this,arguments)},wl.defineMIME=function(e,t){Lt[e]=t},wl.defineMode(\\\"null\\\",function(){return{token:function(e){return e.skipToEnd()}}}),wl.defineMIME(\\\"text/plain\\\",\\\"null\\\"),wl.defineExtension=function(e,t){wl.prototype[e]=t},wl.defineDocExtension=function(e,t){So.prototype[e]=t},wl.fromTextArea=function(e,t){if((t=t?z(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=W();t.autofocus=r==e||null!=e.getAttribute(\\\"autofocus\\\")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(Je(e.form,\\\"submit\\\",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=l}}catch(e){}}t.finishInit=function(t){t.save=n,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,n(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display=\\\"\\\",e.form&&(tt(e.form,\\\"submit\\\",n),\\\"function\\\"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display=\\\"none\\\";var s=wl(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},(Ul=wl).off=tt,Ul.on=Je,Ul.wheelEventPixels=fi,Ul.Doc=So,Ul.splitLines=bt,Ul.countColumn=I,Ul.findColumn=X,Ul.isWordChar=ee,Ul.Pass=U,Ul.signal=rt,Ul.Line=jt,Ul.changeEnd=yi,Ul.scrollbarModel=Pn,Ul.Pos=ge,Ul.cmpPos=ve,Ul.modes=St,Ul.mimeModes=Lt,Ul.resolveMode=kt,Ul.getMode=Tt,Ul.modeExtensions=Mt,Ul.extendMode=Nt,Ul.copyState=Ot,Ul.startState=Dt,Ul.innerMode=At,Ul.commands=Yo,Ul.keyMap=Po,Ul.keyName=Go,Ul.isModifierKey=Ro,Ul.lookupKey=Io,Ul.normalizeKeyMap=zo,Ul.StringStream=Wt,Ul.SharedTextMarker=bo,Ul.TextMarker=mo,Ul.LineWidget=po,Ul.e_preventDefault=st,Ul.e_stopPropagation=at,Ul.e_stop=ct,Ul.addClass=H,Ul.contains=D,Ul.rmClass=T,Ul.keyNames=Do,wl.version=\\\"5.37.1\\\",wl});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/codemirror/lib/codemirror.css\": {\n \"text\": \".CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{0%{}50%{background-color:transparent}}@-webkit-keyframes blink{0%{}50%{background-color:transparent}}@keyframes blink{0%{}50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none}\\n\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/lib/codemirror.css\",\n \"tags\": \"[[$:/tags/Stylesheet]]\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css\": {\n \"text\": \".CodeMirror-dialog {\\n position: absolute;\\n left: 0; right: 0;\\n background: inherit;\\n z-index: 15;\\n padding: .1em .8em;\\n overflow: hidden;\\n color: inherit;\\n}\\n\\n.CodeMirror-dialog-top {\\n border-bottom: 1px solid #eee;\\n top: 0;\\n}\\n\\n.CodeMirror-dialog-bottom {\\n border-top: 1px solid #eee;\\n bottom: 0;\\n}\\n\\n.CodeMirror-dialog input {\\n border: none;\\n outline: none;\\n background: transparent;\\n width: 20em;\\n color: inherit;\\n font-family: monospace;\\n}\\n\\n.CodeMirror-dialog button {\\n font-size: 70%;\\n}\\n\",\n \"type\": \"text/css\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css\",\n \"tags\": \"[[$:/tags/Stylesheet]]\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js\": {\n \"text\": \"!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){function o(e,o,n){var t;return(t=e.getWrapperElement().appendChild(document.createElement(\\\"div\\\"))).className=n?\\\"CodeMirror-dialog CodeMirror-dialog-bottom\\\":\\\"CodeMirror-dialog CodeMirror-dialog-top\\\",\\\"string\\\"==typeof o?t.innerHTML=o:t.appendChild(o),t}function n(e,o){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=o}e.defineExtension(\\\"openDialog\\\",function(t,i,r){r||(r={}),n(this,null);var u=o(this,t,r.bottom),l=!1,c=this;function a(e){if(\\\"string\\\"==typeof e)s.value=e;else{if(l)return;l=!0,u.parentNode.removeChild(u),c.focus(),r.onClose&&r.onClose(u)}}var f,s=u.getElementsByTagName(\\\"input\\\")[0];return s?(s.focus(),r.value&&(s.value=r.value,!1!==r.selectValueOnOpen&&s.select()),r.onInput&&e.on(s,\\\"input\\\",function(e){r.onInput(e,s.value,a)}),r.onKeyUp&&e.on(s,\\\"keyup\\\",function(e){r.onKeyUp(e,s.value,a)}),e.on(s,\\\"keydown\\\",function(o){r&&r.onKeyDown&&r.onKeyDown(o,s.value,a)||((27==o.keyCode||!1!==r.closeOnEnter&&13==o.keyCode)&&(s.blur(),e.e_stop(o),a()),13==o.keyCode&&i(s.value,o))}),!1!==r.closeOnBlur&&e.on(s,\\\"blur\\\",a)):(f=u.getElementsByTagName(\\\"button\\\")[0])&&(e.on(f,\\\"click\\\",function(){a(),c.focus()}),!1!==r.closeOnBlur&&e.on(f,\\\"blur\\\",a),f.focus()),a}),e.defineExtension(\\\"openConfirm\\\",function(t,i,r){n(this,null);var u=o(this,t,r&&r.bottom),l=u.getElementsByTagName(\\\"button\\\"),c=!1,a=this,f=1;function s(){c||(c=!0,u.parentNode.removeChild(u),a.focus())}l[0].focus();for(var d=0;d<l.length;++d){var p=l[d];!function(o){e.on(p,\\\"click\\\",function(n){e.e_preventDefault(n),s(),o&&o(a)})}(i[d]),e.on(p,\\\"blur\\\",function(){--f,setTimeout(function(){f<=0&&s()},200)}),e.on(p,\\\"focus\\\",function(){++f})}}),e.defineExtension(\\\"openNotification\\\",function(t,i){n(this,a);var r,u=o(this,t,i&&i.bottom),l=!1,c=i&&void 0!==i.duration?i.duration:5e3;function a(){l||(l=!0,clearTimeout(r),u.parentNode.removeChild(u))}return e.on(u,\\\"click\\\",function(o){e.e_preventDefault(o),a()}),c&&(r=setTimeout(a,c)),a})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/selection/activeline.js\": {\n \"text\": \"!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";var t=\\\"CodeMirror-activeline\\\",n=\\\"CodeMirror-activeline-background\\\",i=\\\"CodeMirror-activeline-gutter\\\";function r(e){for(var r=0;r<e.state.activeLines.length;r++)e.removeLineClass(e.state.activeLines[r],\\\"wrap\\\",t),e.removeLineClass(e.state.activeLines[r],\\\"background\\\",n),e.removeLineClass(e.state.activeLines[r],\\\"gutter\\\",i)}function o(e,o){for(var a=[],s=0;s<o.length;s++){var c=o[s],l=e.getOption(\\\"styleActiveLine\\\");if(\\\"object\\\"==typeof l&&l.nonEmpty?c.anchor.line==c.head.line:c.empty()){var f=e.getLineHandleVisualStart(c.head.line);a[a.length-1]!=f&&a.push(f)}}(function(e,t){if(e.length!=t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0})(e.state.activeLines,a)||e.operation(function(){r(e);for(var o=0;o<a.length;o++)e.addLineClass(a[o],\\\"wrap\\\",t),e.addLineClass(a[o],\\\"background\\\",n),e.addLineClass(a[o],\\\"gutter\\\",i);e.state.activeLines=a})}function a(e,t){o(e,t.ranges)}e.defineOption(\\\"styleActiveLine\\\",!1,function(t,n,i){var s=i!=e.Init&&i;n!=s&&(s&&(t.off(\\\"beforeSelectionChange\\\",a),r(t),delete t.state.activeLines),n&&(t.state.activeLines=[],o(t,t.listSelections()),t.on(\\\"beforeSelectionChange\\\",a)))})});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/selection/activeline.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/mode/tw-meta.js\": {\n \"text\": \"!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";e.modeInfo=[{name:\\\"CMake\\\",mime:\\\"text/x-cmake\\\",mode:\\\"cmake\\\",ext:[\\\"cmake\\\",\\\"cmake.in\\\"],file:/^CMakeLists.txt$/},{name:\\\"Cython\\\",mime:\\\"text/x-cython\\\",mode:\\\"python\\\",ext:[\\\"pyx\\\",\\\"pxd\\\",\\\"pxi\\\"]},{name:\\\"CSS\\\",mime:\\\"text/css\\\",mode:\\\"css\\\",ext:[\\\"css\\\"]},{name:\\\"diff\\\",mime:\\\"text/x-diff\\\",mode:\\\"diff\\\",ext:[\\\"diff\\\",\\\"patch\\\"]},{name:\\\"Embedded Javascript\\\",mime:\\\"application/x-ejs\\\",mode:\\\"htmlembedded\\\",ext:[\\\"ejs\\\"]},{name:\\\"Embedded Ruby\\\",mime:\\\"application/x-erb\\\",mode:\\\"htmlembedded\\\",ext:[\\\"erb\\\"]},{name:\\\"Erlang\\\",mime:\\\"text/x-erlang\\\",mode:\\\"erlang\\\",ext:[\\\"erl\\\"]},{name:\\\"GitHub Flavored Markdown\\\",mime:\\\"text/x-gfm\\\",mode:\\\"gfm\\\",file:/^(readme|contributing|history).md$/i},{name:\\\"Go\\\",mime:\\\"text/x-go\\\",mode:\\\"go\\\",ext:[\\\"go\\\"]},{name:\\\"ASP.NET\\\",mime:\\\"application/x-aspx\\\",mode:\\\"htmlembedded\\\",ext:[\\\"aspx\\\"],alias:[\\\"asp\\\",\\\"aspx\\\"]},{name:\\\"HTML\\\",mime:\\\"text/html\\\",mode:\\\"htmlmixed\\\",ext:[\\\"html\\\",\\\"htm\\\",\\\"handlebars\\\",\\\"hbs\\\"],alias:[\\\"xhtml\\\"]},{name:\\\"HTTP\\\",mime:\\\"message/http\\\",mode:\\\"http\\\"},{name:\\\"JavaScript\\\",mimes:[\\\"text/javascript\\\",\\\"text/ecmascript\\\",\\\"application/javascript\\\",\\\"application/x-javascript\\\",\\\"application/ecmascript\\\"],mode:\\\"javascript\\\",ext:[\\\"js\\\"],alias:[\\\"ecmascript\\\",\\\"js\\\",\\\"node\\\"]},{name:\\\"JSON\\\",mimes:[\\\"application/json\\\",\\\"application/x-json\\\"],mode:\\\"javascript\\\",ext:[\\\"json\\\",\\\"map\\\"],alias:[\\\"json5\\\"]},{name:\\\"JSON-LD\\\",mime:\\\"application/ld+json\\\",mode:\\\"javascript\\\",ext:[\\\"jsonld\\\"],alias:[\\\"jsonld\\\"]},{name:\\\"Lua\\\",mime:\\\"text/x-lua\\\",mode:\\\"lua\\\",ext:[\\\"lua\\\"]},{name:\\\"Markdown\\\",mime:\\\"text/x-markdown\\\",mode:\\\"markdown\\\",ext:[\\\"markdown\\\",\\\"md\\\",\\\"mkd\\\"]},{name:\\\"MySQL\\\",mime:\\\"text/x-mysql\\\",mode:\\\"sql\\\"},{name:\\\"Plain Text\\\",mime:\\\"text/plain\\\",mode:\\\"null\\\",ext:[\\\"txt\\\",\\\"text\\\",\\\"conf\\\",\\\"def\\\",\\\"list\\\",\\\"log\\\"]},{name:\\\"Python\\\",mime:\\\"text/x-python\\\",mode:\\\"python\\\",ext:[\\\"BUILD\\\",\\\"bzl\\\",\\\"py\\\",\\\"pyw\\\"],file:/^(BUCK|BUILD)$/},{name:\\\"SCSS\\\",mime:\\\"text/x-scss\\\",mode:\\\"css\\\",ext:[\\\"scss\\\"]},{name:\\\"LaTeX\\\",mime:\\\"text/x-latex\\\",mode:\\\"stex\\\",ext:[\\\"text\\\",\\\"ltx\\\",\\\"tex\\\"],alias:[\\\"tex\\\"]},{name:\\\"TiddlyWiki \\\",mime:\\\"text/x-tiddlywiki\\\",mode:\\\"tiddlywiki\\\"}];for(var t=0;t<e.modeInfo.length;t++){var m=e.modeInfo[t];m.mimes&&(m.mime=m.mimes[0])}e.findModeByMIME=function(t){t=t.toLowerCase();for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.mime==t)return i;if(i.mimes)for(var a=0;a<i.mimes.length;a++)if(i.mimes[a]==t)return i}return/\\\\+xml$/.test(t)?e.findModeByMIME(\\\"application/xml\\\"):/\\\\+json$/.test(t)?e.findModeByMIME(\\\"application/json\\\"):void 0},e.findModeByExtension=function(t){for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.ext)for(var a=0;a<i.ext.length;a++)if(i.ext[a]==t)return i}},e.findModeByFileName=function(t){for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.file&&i.file.test(t))return i}var a=t.lastIndexOf(\\\".\\\"),o=a>-1&&t.substring(a+1,t.length);if(o)return e.findModeByExtension(o)},e.findModeByName=function(t){t=t.toLowerCase();for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.name.toLowerCase()==t)return i;if(i.alias)for(var a=0;a<i.alias.length;a++)if(i.alias[a].toLowerCase()==t)return i}}});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/tw-meta.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/keyboard\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/keyboard\",\n \"text\": \"\\n!!Default keyboard shortcuts\\n\\n!!!Basic shortcuts\\n\\n|Shortcut |Function |h\\n|Left |goCharLeft |\\n|Right |goCharRight |\\n|Up |goLineUp |\\n|Down |goLineDown |\\n|End |goLineEnd |\\n|Home |goLineStartSmart |\\n|~PageUp |goPageUp |\\n|~PageDown |goPageDown |\\n|Delete |delCharAfter |\\n|Backspace |delCharBefore |\\n|Shift-Backspace |delCharBefore |\\n|Tab |defaultTab |\\n|Shift-Tab |indentAuto |\\n|Enter |newlineAndIndent |\\n|Insert |toggleOverwrite |\\n|Ctrl-Esc |singleSelection |\\n\\n\\n!!!Shortcuts on Windows and Linux\\n\\n|Shortcut |Function |h\\n|Ctrl-A |selectAll |\\n|Ctrl-D |deleteLine |\\n|Ctrl-Z |undo |\\n|Shift-Ctrl-Z |redo |\\n|Ctrl-Y |redo |\\n|Ctrl-Home |goDocStart |\\n|Ctrl-End |goDocEnd |\\n|Ctrl-Up |goLineUp |\\n|Ctrl-Down |goLineDown |\\n|Ctrl-Left |goGroupLeft |\\n|Ctrl-Right |goGroupRight |\\n|Alt-Left |goLineStart |\\n|Alt-Right |goLineEnd |\\n|Ctrl-Backspace |delGroupBefore |\\n|Ctrl-Delete |delGroupAfter |\\n|Ctrl-F |find |\\n|Ctrl-G |findNext |\\n|Shift-Ctrl-G |findPrev |\\n|Shift-Ctrl-F |replace |\\n|Shift-Ctrl-R |replaceAll |\\n|Ctrl-[ |indentLess |\\n|Ctrl-] |indentMore |\\n|Alt-U |undoSelection |\\n|Shift-Ctrl-U |redoSelection |\\n|Shift-Alt-U |redoSelection |\\n\\n\\n!!!Shortcuts on ~MacOs\\n\\n|Shortcut |Function |h\\n|Cmd-A |selectAll |\\n|Cmd-D |deleteLine |\\n|Cmd-Z |undo |\\n|Shift-Cmd-Z |redo |\\n|Cmd-Y |redo |\\n|Cmd-Home |goDocStart |\\n|Cmd-Up |goDocStart |\\n|Cmd-End |goDocEnd |\\n|Cmd-Down |goDocEnd |\\n|Alt-Left |goGroupLeft |\\n|Alt-Right |goGroupRight |\\n|Cmd-Left |goLineLeft |\\n|Cmd-Right |goLineRight |\\n|Alt-Backspace |delGroupBefore |\\n|Ctrl-Alt-Backspace |delGroupAfter |\\n|Alt-Delete |delGroupAfter |\\n|Cmd-F |find |\\n|Cmd-G |findNext |\\n|Shift-Cmd-G |findPrev |\\n|Cmd-Alt-F |replace |\\n|Shift-Cmd-Alt-F |replaceAll |\\n|Cmd-[ |indentLess |\\n|Cmd-] |indentMore |\\n|Cmd-Backspace |delWrappedLineLeft |\\n|Cmd-Delete |delWrappedLineRight |\\n|Alt-U |undoSelection |\\n|Shift-Alt-U |redoSelection |\\n|Ctrl-Up |goDocStart |\\n|Ctrl-Down |goDocEnd |\\n|Ctrl-F |goCharRight |\\n|Ctrl-B |goCharLeft |\\n|Ctrl-P |goLineUp |\\n|Ctrl-N |goLineDown |\\n|Alt-F |goWordRight |\\n|Alt-B |goWordLeft |\\n|Ctrl-A |goLineStart |\\n|Ctrl-E |goLineEnd |\\n|Ctrl-V |goPageDown |\\n|Shift-Ctrl-V |goPageUp |\\n|Ctrl-D |delCharAfter |\\n|Ctrl-H |delCharBefore |\\n|Alt-D |delWordAfter |\\n|Alt-Backspace |delWordBefore |\\n|Ctrl-K |killLine |\\n|Alt-T |transposeChars |\\n|Ctrl-O |openLine |\\n\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/license\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/license\",\n \"text\": \"\\\"\\\"\\\"\\n~CodeMirror, copyright (c) by Marijn Haverbeke and others\\nDistributed under an MIT license: http://codemirror.net/LICENSE\\n\\nCopyright (c) 2004-2007, Jeremy Ruston\\nCopyright (c) 2007-2018, UnaMesa Association\\nDistributed under an BSD license: https://tiddlywiki.com/#License\\n\\\"\\\"\\\"\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/readme\",\n \"text\": \"This plugin provides an enhanced text editor component based on [[CodeMirror|http://codemirror.net]]. The basic configuration is designed to be as lightweight as possible and is just around 235kb of size. Additional features can be installed with ~CodeMirror ~AddOns from the plugin library.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/codemirror]]\\n\\nBased on ~CodeMirror version 5.37.0\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/codemirror/editorFont\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/codemirror/editorFont\",\n \"tags\": \"$:/tags/ControlPanel/Settings/CodeMirror\",\n \"caption\": \"{{$:/language/codemirror/editorFont/hint}}\",\n \"text\": \"\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/codemirror/keyMap\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/codemirror/keyMap\",\n \"tags\": \"$:/tags/ControlPanel/Settings/CodeMirror\",\n \"caption\": \"{{$:/language/codemirror/keyMap/hint}}\",\n \"text\": \"\\\\define lingo-base() $:/language/codemirror/keyMap\\n\\n<$link to=\\\"$:/config/codemirror/keyMap\\\"><<lingo hint>></$link>\\n\\n<$select tiddler=\\\"$:/config/codemirror/keyMap\\\" default=\\\"default\\\">\\n<option value=\\\"default\\\">default</option>\\n<$list filter=\\\"[all[shadows+tiddlers]module-type[codemirror-keymap]!has[draft.of]get[text]]\\\">\\n<option value=<<currentTiddler>>><$transclude><$text text=<<currentTiddler>>/></$transclude></option>\\n</$list>\\n</$select>\\n\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/codemirror/lineNumbers\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/codemirror/lineNumbers\",\n \"tags\": \"$:/tags/ControlPanel/Settings/CodeMirror\",\n \"caption\": \"{{$:/language/codemirror/lineNumbers/hint}}\",\n \"text\": \"\\\\define lingo-base() $:/language/codemirror/lineNumbers/\\n<<lingo hint>>\\n\\n<$checkbox tiddler=\\\"$:/config/codemirror/lineNumbers\\\" field=\\\"text\\\" checked=\\\"true\\\" unchecked=\\\"false\\\" default=\\\"false\\\"> <$link to=\\\"$:/config/codemirror/lineNumbers\\\"><<lingo info>></$link> </$checkbox>\\n\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/codemirror/lineWrapping\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/codemirror/lineWrapping\",\n \"tags\": \"$:/tags/ControlPanel/Settings/CodeMirror\",\n \"caption\": \"{{$:/language/codemirror/lineWrapping/hint}}\",\n \"text\": \"\\\\define lingo-base() $:/language/codemirror/lineWrapping/\\n<<lingo hint>>\\n\\n<$checkbox tiddler=\\\"$:/config/codemirror/lineWrapping\\\" field=\\\"text\\\" checked=\\\"true\\\" unchecked=\\\"false\\\" default=\\\"true\\\"> <$link to=\\\"$:/config/codemirror/lineWrapping\\\"><<lingo info>></$link> </$checkbox>\\n\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/codemirror/showCursorWhenSelecting\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/codemirror/showCursorWhenSelecting\",\n \"tags\": \"$:/tags/ControlPanel/Settings/CodeMirror\",\n \"caption\": \"{{$:/language/codemirror/showCursorWhenSelecting/hint}}\",\n \"text\": \"\\\\define lingo-base() $:/language/codemirror/showCursorWhenSelecting/\\n<<lingo hint>>\\n\\n<$checkbox tiddler=\\\"$:/config/codemirror/showCursorWhenSelecting\\\" field=\\\"text\\\" checked=\\\"true\\\" unchecked=\\\"false\\\" default=\\\"true\\\"> <$link to=\\\"$:/config/codemirror/showCursorWhenSelecting\\\"><<lingo info>></$link> </$checkbox>\\n\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/codemirror/styleActiveLine\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/codemirror/styleActiveLine\",\n \"tags\": \"$:/tags/ControlPanel/Settings/CodeMirror\",\n \"caption\": \"{{$:/language/codemirror/styleActiveLine/hint}}\",\n \"text\": \"\\\\define lingo-base() $:/language/codemirror/styleActiveLine/\\n<<lingo hint>>\\n\\n<$checkbox tiddler=\\\"$:/config/codemirror/styleActiveLine\\\" field=\\\"text\\\" checked=\\\"true\\\" unchecked=\\\"false\\\" default=\\\"false\\\"> <$link to=\\\"$:/config/codemirror/styleActiveLine\\\"><<lingo info>></$link> </$checkbox>\\n\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/codemirror/theme\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/codemirror/theme\",\n \"tags\": \"$:/tags/ControlPanel/Settings/CodeMirror\",\n \"caption\": \"{{$:/language/codemirror/theme/hint}}\",\n \"text\": \"\\\\define lingo-base() $:/language/codemirror/\\n\\n<$link to=\\\"$:/config/codemirror/theme\\\"><<lingo hint>></$link>\\n\\n<$select tiddler=\\\"$:/config/codemirror/theme\\\" default=\\\"default\\\">\\n<option value=\\\"default\\\">default</option>\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]module-type[codemirror-theme]!has[draft.of]get[name]]\\\">\\n<option value=<<currentTiddler>>><$transclude field=\\\"name\\\"><$text text=<<currentTiddler>>/></$transclude></option>\\n</$list>\\n</$select>\\n\\n//see the [[CodeMirror Usage|$:/plugins/tiddlywiki/codemirror/usage]] how to add themes//\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"/* Make the editor resize to fit its content */\\n\\n.CodeMirror {\\n\\theight: auto;\\n\\tborder: 1px solid <<colour tiddler-editor-border>>;\\n\\tline-height: 1.5;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\\n}\\n\\n.CodeMirror-scroll {\\n\\toverflow-x: auto;\\n\\toverflow-y: hidden;\\t\\n}\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/CodeMirror\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/CodeMirror\",\n \"tags\": \"$:/tags/ControlPanel/SettingsTab\",\n \"caption\": \"CodeMirror\",\n \"list-after\": \"$:/core/ui/ControlPanel/Settings/TiddlyWiki\",\n \"text\": \"\\\\define lingo-base() $:/language/codemirror/controlPanel/\\n\\n<<lingo hint>>\\n\\n<$link to=\\\"$:/plugins/tiddlywiki/codemirror/usage\\\"><<lingo usage>></$link>\\n\\n<$link to=\\\"$:/plugins/tiddlywiki/codemirror/keyboard\\\"><<lingo keyboard>></$link>\\n\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings/CodeMirror]]\\\">\\n\\n<div style=\\\"border-top:1px solid #eee;\\\">\\n\\n!! <$link><$transclude field=\\\"caption\\\"/></$link>\\n\\n<$transclude/>\\n\\n</div>\\n\\n</$list>\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings\",\n \"tags\": \"$:/tags/ControlPanel\",\n \"caption\": \"{{$:/language/ControlPanel/Settings/Caption}}\",\n \"text\": \"<div class=\\\"tc-control-panel\\\">\\n<<tabs \\\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/SettingsTab]!has[draft.of]]\\\" \\\"$:/core/ui/ControlPanel/Settings/TiddlyWiki\\\">>\\n</div>\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/TiddlyWiki\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/TiddlyWiki\",\n \"tags\": \"$:/tags/ControlPanel/SettingsTab\",\n \"caption\": \"TiddlyWiki\",\n \"text\": \"\\\\define lingo-base() $:/language/ControlPanel/Settings/\\n\\n<<lingo Hint>>\\n\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\\\">\\n\\n<div style=\\\"border-top:1px solid #eee;\\\">\\n\\n!! <$link><$transclude field=\\\"caption\\\"/></$link>\\n\\n<$transclude/>\\n\\n</div>\\n\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/usage\",\n \"text\": \"! Configuration\\n\\nConfiguration for the ~CodeMirror text-editor can be done from within the CodeMirror Settings Tab in the [[ControlPanel|$:/ControlPanel]] (Settings - ~CodeMirror)\\n\\n\\n!!Setting a different Theme\\n\\n~CodeMirror themes are available in the [ext[official GitHub repository|https://github.com/codemirror/CodeMirror/tree/master/theme]]\\n\\nMore themes can be found at https://github.com/FarhadG/code-mirror-themes/tree/master/themes and previewed [ext[here|http://farhadg.github.io/code-mirror-themes/]]\\n\\n\\nTo add a theme to your wiki, follow these four steps:\\n\\n* choose one of the CSS files and copy its content to a new tiddler\\n* remove all comments from the top and tag the tiddler with <<tag-pill \\\"$:/tags/Stylesheet\\\">>\\n* add a field \\\"module-type\\\" with the value \\\"codemirror-theme\\\". add a field \\\"name\\\" with the exact ''name'' of the theme as value\\n* save the tiddler and go to the Settings tab in $:/ControlPanel - look for the \\\"theme\\\" dropdown to select your newly added theme\\n\\n\\n!!Line Numbers\\n\\nTo show or hide the Line Numbers at the left, go to ~ControlPanel - Settings - ~CodeMirror and look for the \\\"Line Numbers\\\" checkbox\\n\\n\\n!!Line Wrapping\\n\\nControls if long lines get visually wrapped to a new line if they're too long to fit the editor width or if the editor should scroll horizontally\\n\\nTo change the line-wrapping behaviour, go to ~ControlPanel - Settings - ~CodeMirror and look for the \\\"Line Wrapping\\\" checkbox\\n\\n\\n!!Show Cursor when selecting\\n\\nDefines whether the Mouse cursor should be visually shown or hidden when making a text-selection\\n\\nTo change the show-cursor-when-selecting behaviour, go to ~ControlPanel - Settings - ~CodeMirror and look for the \\\"Show cursor when selecting\\\" checkbox\\n\\n\\n!!~CodeMirror Font Family\\n\\nThe Font-Family used within the ~CodeMirror text-editor defaults to \\\"monospace\\\" which will choose your configured monospace system-font\\n\\nThat setting can be overridden entering one or more Font-Families in the \\\"Font Family\\\" input field at ~ControlPanel - Settings - ~CodeMirror\\n\\n* The entries must be separated by semicolons ','\\n* Font-Family Names that contain spaces must be quoted like \\\"My Font\\\"\\n* If a list of Font-Families is specified, the last Font-Family found on the user-system gets used, non-existing fonts get ignored\\n* If none of the specified Font-Families is available, ~CodeMirror uses the default \\\"monospace\\\"\\n\\n\\n!!\\\"Hidden\\\" Settings:\\n\\n!!!Cursor Blink Rate\\n\\nThe cursor blink-rate defines how fast (in milliseconds) the cursor blinks inside the textarea\\n\\nYou can change it by editing $:/config/codemirror/cursorBlinkRate\\n\\\"0\\\" disables blinking\\n\\n!!!Tabsize\\n\\nThe Tabsize defines the width of a tab character. Default is 4.\\n\\nYou can change it by editing $:/config/codemirror/tabSize\\n\\n!!!Indent Unit\\n\\nNot enabled for vnd.tiddlywiki and x-tiddlywiki\\n\\nDefines how many spaces a text-block should be indented. Defaults to 2.\\n\\nYou can change it by editing $:/config/codemirror/indentUnit\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-autocomplete":{"title":"$:/plugins/tiddlywiki/codemirror-autocomplete","name":"CodeMirror Autocomplete","description":"Autocompletion for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-mode-css","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/codemirror/autocomplete\": {\n \"title\": \"$:/config/codemirror/autocomplete\",\n \"extend\": \"extraKeys\",\n \"type\": \"json\",\n \"text\": \"{\\n\\t\\\"Ctrl-Space\\\": \\\"autocomplete\\\"\\n}\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";var r=/[\\\\w$]+/;e.registerHelper(\\\"hint\\\",\\\"anyword\\\",function(t,o){for(var i=o&&o.word||r,n=o&&o.range||500,f=t.getCursor(),s=t.getLine(f.line),a=f.ch,c=a;c&&i.test(s.charAt(c-1));)--c;for(var l=c!=a&&s.slice(c,a),d=o&&o.list||[],u={},p=new RegExp(i.source,\\\"g\\\"),g=-1;g<=1;g+=2)for(var h=f.line,m=Math.min(Math.max(h+g*n,t.firstLine()),t.lastLine())+g;h!=m;h+=g)for(var y,b=t.getLine(h);y=p.exec(b);)h==f.line&&y[0]===l||l&&0!=y[0].lastIndexOf(l,0)||Object.prototype.hasOwnProperty.call(u,y[0])||(u[y[0]]=!0,d.push(y[0]));return{list:d,from:e.Pos(f.line,c),to:e.Pos(f.line,a)}})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/hint/css-hint.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\"),require(\\\"../../mode/css/css\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"../../mode/css/css\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";var r={link:1,visited:1,active:1,hover:1,focus:1,\\\"first-letter\\\":1,\\\"first-line\\\":1,\\\"first-child\\\":1,before:1,after:1,lang:1};e.registerHelper(\\\"hint\\\",\\\"css\\\",function(t){var o=t.getCursor(),s=t.getTokenAt(o),i=e.innerMode(t.getMode(),s.state);if(\\\"css\\\"==i.mode.name){if(\\\"keyword\\\"==s.type&&0==\\\"!important\\\".indexOf(s.string))return{list:[\\\"!important\\\"],from:e.Pos(o.line,s.start),to:e.Pos(o.line,s.end)};var n=s.start,a=o.ch,d=s.string.slice(0,a-n);/[^\\\\w$_-]/.test(d)&&(d=\\\"\\\",n=a=o.ch);var c=e.resolveMode(\\\"text/css\\\"),f=[],l=i.state.state;return\\\"pseudo\\\"==l||\\\"variable-3\\\"==s.type?p(r):\\\"block\\\"==l||\\\"maybeprop\\\"==l?p(c.propertyKeywords):\\\"prop\\\"==l||\\\"parens\\\"==l||\\\"at\\\"==l||\\\"params\\\"==l?(p(c.valueKeywords),p(c.colorKeywords)):\\\"media\\\"!=l&&\\\"media_parens\\\"!=l||(p(c.mediaTypes),p(c.mediaFeatures)),f.length?{list:f,from:e.Pos(o.line,n),to:e.Pos(o.line,a)}:void 0}function p(e){for(var r in e)d&&0!=r.lastIndexOf(d,0)||f.push(r)}})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/hint/css-hint.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/hint/html-hint.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(l){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?l(require(\\\"../../lib/codemirror\\\"),require(\\\"./xml-hint\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"./xml-hint\\\"],l):l(CodeMirror)}(function(l){\\\"use strict\\\";var t=\\\"ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu\\\".split(\\\" \\\"),e=[\\\"_blank\\\",\\\"_self\\\",\\\"_top\\\",\\\"_parent\\\"],a=[\\\"ascii\\\",\\\"utf-8\\\",\\\"utf-16\\\",\\\"latin1\\\",\\\"latin1\\\"],n=[\\\"get\\\",\\\"post\\\",\\\"put\\\",\\\"delete\\\"],r=[\\\"application/x-www-form-urlencoded\\\",\\\"multipart/form-data\\\",\\\"text/plain\\\"],o=[\\\"all\\\",\\\"screen\\\",\\\"print\\\",\\\"embossed\\\",\\\"braille\\\",\\\"handheld\\\",\\\"print\\\",\\\"projection\\\",\\\"screen\\\",\\\"tty\\\",\\\"tv\\\",\\\"speech\\\",\\\"3d-glasses\\\",\\\"resolution [>][<][=] [X]\\\",\\\"device-aspect-ratio: X/Y\\\",\\\"orientation:portrait\\\",\\\"orientation:landscape\\\",\\\"device-height: [X]\\\",\\\"device-width: [X]\\\"],s={attrs:{}},u={a:{attrs:{href:null,ping:null,type:null,media:o,target:e,hreflang:t}},abbr:s,acronym:s,address:s,applet:s,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:o,hreflang:t,type:null,shape:[\\\"default\\\",\\\"rect\\\",\\\"circle\\\",\\\"poly\\\"]}},article:s,aside:s,audio:{attrs:{src:null,mediagroup:null,crossorigin:[\\\"anonymous\\\",\\\"use-credentials\\\"],preload:[\\\"none\\\",\\\"metadata\\\",\\\"auto\\\"],autoplay:[\\\"\\\",\\\"autoplay\\\"],loop:[\\\"\\\",\\\"loop\\\"],controls:[\\\"\\\",\\\"controls\\\"]}},b:s,base:{attrs:{href:null,target:e}},basefont:s,bdi:s,bdo:s,big:s,blockquote:{attrs:{cite:null}},body:s,br:s,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[\\\"\\\",\\\"autofocus\\\"],disabled:[\\\"\\\",\\\"autofocus\\\"],formenctype:r,formmethod:n,formnovalidate:[\\\"\\\",\\\"novalidate\\\"],formtarget:e,type:[\\\"submit\\\",\\\"reset\\\",\\\"button\\\"]}},canvas:{attrs:{width:null,height:null}},caption:s,center:s,cite:s,code:s,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[\\\"command\\\",\\\"checkbox\\\",\\\"radio\\\"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[\\\"\\\",\\\"disabled\\\"],checked:[\\\"\\\",\\\"checked\\\"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[\\\"\\\",\\\"disabled\\\"],multiple:[\\\"\\\",\\\"multiple\\\"]}},datalist:{attrs:{data:null}},dd:s,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[\\\"\\\",\\\"open\\\"]}},dfn:s,dir:s,div:s,dl:s,dt:s,em:s,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[\\\"\\\",\\\"disabled\\\"],form:null,name:null}},figcaption:s,figure:s,font:s,footer:s,form:{attrs:{action:null,name:null,\\\"accept-charset\\\":a,autocomplete:[\\\"on\\\",\\\"off\\\"],enctype:r,method:n,novalidate:[\\\"\\\",\\\"novalidate\\\"],target:e}},frame:s,frameset:s,h1:s,h2:s,h3:s,h4:s,h5:s,h6:s,head:{attrs:{},children:[\\\"title\\\",\\\"base\\\",\\\"link\\\",\\\"style\\\",\\\"meta\\\",\\\"script\\\",\\\"noscript\\\",\\\"command\\\"]},header:s,hgroup:s,hr:s,html:{attrs:{manifest:null},children:[\\\"head\\\",\\\"body\\\"]},i:s,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[\\\"allow-top-navigation\\\",\\\"allow-same-origin\\\",\\\"allow-forms\\\",\\\"allow-scripts\\\"],seamless:[\\\"\\\",\\\"seamless\\\"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[\\\"anonymous\\\",\\\"use-credentials\\\"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[\\\"audio/*\\\",\\\"video/*\\\",\\\"image/*\\\"],autocomplete:[\\\"on\\\",\\\"off\\\"],autofocus:[\\\"\\\",\\\"autofocus\\\"],checked:[\\\"\\\",\\\"checked\\\"],disabled:[\\\"\\\",\\\"disabled\\\"],formenctype:r,formmethod:n,formnovalidate:[\\\"\\\",\\\"novalidate\\\"],formtarget:e,multiple:[\\\"\\\",\\\"multiple\\\"],readonly:[\\\"\\\",\\\"readonly\\\"],required:[\\\"\\\",\\\"required\\\"],type:[\\\"hidden\\\",\\\"text\\\",\\\"search\\\",\\\"tel\\\",\\\"url\\\",\\\"email\\\",\\\"password\\\",\\\"datetime\\\",\\\"date\\\",\\\"month\\\",\\\"week\\\",\\\"time\\\",\\\"datetime-local\\\",\\\"number\\\",\\\"range\\\",\\\"color\\\",\\\"checkbox\\\",\\\"radio\\\",\\\"file\\\",\\\"submit\\\",\\\"image\\\",\\\"reset\\\",\\\"button\\\"]}},ins:{attrs:{cite:null,datetime:null}},kbd:s,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[\\\"\\\",\\\"autofocus\\\"],disabled:[\\\"\\\",\\\"disabled\\\"],keytype:[\\\"RSA\\\"]}},label:{attrs:{for:null,form:null}},legend:s,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:t,media:o,sizes:[\\\"all\\\",\\\"16x16\\\",\\\"16x16 32x32\\\",\\\"16x16 32x32 64x64\\\"]}},map:{attrs:{name:null}},mark:s,menu:{attrs:{label:null,type:[\\\"list\\\",\\\"context\\\",\\\"toolbar\\\"]}},meta:{attrs:{content:null,charset:a,name:[\\\"viewport\\\",\\\"application-name\\\",\\\"author\\\",\\\"description\\\",\\\"generator\\\",\\\"keywords\\\"],\\\"http-equiv\\\":[\\\"content-language\\\",\\\"content-type\\\",\\\"default-style\\\",\\\"refresh\\\"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:s,noframes:s,noscript:s,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[\\\"\\\",\\\"typemustmatch\\\"]}},ol:{attrs:{reversed:[\\\"\\\",\\\"reversed\\\"],start:null,type:[\\\"1\\\",\\\"a\\\",\\\"A\\\",\\\"i\\\",\\\"I\\\"]}},optgroup:{attrs:{disabled:[\\\"\\\",\\\"disabled\\\"],label:null}},option:{attrs:{disabled:[\\\"\\\",\\\"disabled\\\"],label:null,selected:[\\\"\\\",\\\"selected\\\"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:s,param:{attrs:{name:null,value:null}},pre:s,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:s,rt:s,ruby:s,s:s,samp:s,script:{attrs:{type:[\\\"text/javascript\\\"],src:null,async:[\\\"\\\",\\\"async\\\"],defer:[\\\"\\\",\\\"defer\\\"],charset:a}},section:s,select:{attrs:{form:null,name:null,size:null,autofocus:[\\\"\\\",\\\"autofocus\\\"],disabled:[\\\"\\\",\\\"disabled\\\"],multiple:[\\\"\\\",\\\"multiple\\\"]}},small:s,source:{attrs:{src:null,type:null,media:null}},span:s,strike:s,strong:s,style:{attrs:{type:[\\\"text/css\\\"],media:o,scoped:null}},sub:s,summary:s,sup:s,table:s,tbody:s,td:{attrs:{colspan:null,rowspan:null,headers:null}},textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[\\\"\\\",\\\"autofocus\\\"],disabled:[\\\"\\\",\\\"disabled\\\"],readonly:[\\\"\\\",\\\"readonly\\\"],required:[\\\"\\\",\\\"required\\\"],wrap:[\\\"soft\\\",\\\"hard\\\"]}},tfoot:s,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[\\\"row\\\",\\\"col\\\",\\\"rowgroup\\\",\\\"colgroup\\\"]}},thead:s,time:{attrs:{datetime:null}},title:s,tr:s,track:{attrs:{src:null,label:null,default:null,kind:[\\\"subtitles\\\",\\\"captions\\\",\\\"descriptions\\\",\\\"chapters\\\",\\\"metadata\\\"],srclang:t}},tt:s,u:s,ul:s,var:s,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[\\\"anonymous\\\",\\\"use-credentials\\\"],preload:[\\\"auto\\\",\\\"metadata\\\",\\\"none\\\"],autoplay:[\\\"\\\",\\\"autoplay\\\"],mediagroup:[\\\"movie\\\"],muted:[\\\"\\\",\\\"muted\\\"],controls:[\\\"\\\",\\\"controls\\\"]}},wbr:s},i={accesskey:[\\\"a\\\",\\\"b\\\",\\\"c\\\",\\\"d\\\",\\\"e\\\",\\\"f\\\",\\\"g\\\",\\\"h\\\",\\\"i\\\",\\\"j\\\",\\\"k\\\",\\\"l\\\",\\\"m\\\",\\\"n\\\",\\\"o\\\",\\\"p\\\",\\\"q\\\",\\\"r\\\",\\\"s\\\",\\\"t\\\",\\\"u\\\",\\\"v\\\",\\\"w\\\",\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\"],class:null,contenteditable:[\\\"true\\\",\\\"false\\\"],contextmenu:null,dir:[\\\"ltr\\\",\\\"rtl\\\",\\\"auto\\\"],draggable:[\\\"true\\\",\\\"false\\\",\\\"auto\\\"],dropzone:[\\\"copy\\\",\\\"move\\\",\\\"link\\\",\\\"string:\\\",\\\"file:\\\"],hidden:[\\\"hidden\\\"],id:null,inert:[\\\"inert\\\"],itemid:null,itemprop:null,itemref:null,itemscope:[\\\"itemscope\\\"],itemtype:null,lang:[\\\"en\\\",\\\"es\\\"],spellcheck:[\\\"true\\\",\\\"false\\\"],style:null,tabindex:[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\"],title:null,translate:[\\\"yes\\\",\\\"no\\\"],onclick:null,rel:[\\\"stylesheet\\\",\\\"alternate\\\",\\\"author\\\",\\\"bookmark\\\",\\\"help\\\",\\\"license\\\",\\\"next\\\",\\\"nofollow\\\",\\\"noreferrer\\\",\\\"prefetch\\\",\\\"prev\\\",\\\"search\\\",\\\"tag\\\"]};function d(l){for(var t in i)i.hasOwnProperty(t)&&(l.attrs[t]=i[t])}for(var c in d(s),u)u.hasOwnProperty(c)&&u[c]!=s&&d(u[c]);l.htmlSchema=u,l.registerHelper(\\\"hint\\\",\\\"html\\\",function(t,e){var a={schemaInfo:u};if(e)for(var n in e)a[n]=e[n];return l.hint.xml(t,a)})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/hint/html-hint.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/hint/javascript-hint.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],t):t(CodeMirror)}(function(t){var e=t.Pos;function r(t,e){for(var r=0,n=t.length;r<n;++r)e(t[r])}function n(n,i,l,f){var c=n.getCursor(),p=l(n,c);if(!/\\\\b(?:string|comment)\\\\b/.test(p.type)){var u=t.innerMode(n.getMode(),p.state);if(\\\"json\\\"!==u.mode.helperType){p.state=u.state,/^[\\\\w$_]*$/.test(p.string)?p.end>c.ch&&(p.end=c.ch,p.string=p.string.slice(0,c.ch-p.start)):p={start:c.ch,end:c.ch,string:\\\"\\\",state:p.state,type:\\\".\\\"==p.string?\\\"property\\\":null};for(var d=p;\\\"property\\\"==d.type;){if(\\\".\\\"!=(d=l(n,e(c.line,d.start))).string)return;if(d=l(n,e(c.line,d.start)),!g)var g=[];g.push(d)}return{list:function(t,e,n,i){var l=[],f=t.string,c=i&&i.globalScope||window;function p(t){0!=t.lastIndexOf(f,0)||function(t,e){if(!Array.prototype.indexOf){for(var r=t.length;r--;)if(t[r]===e)return!0;return!1}return-1!=t.indexOf(e)}(l,t)||l.push(t)}function u(t){\\\"string\\\"==typeof t?r(o,p):t instanceof Array?r(s,p):t instanceof Function&&r(a,p),function(t,e){if(Object.getOwnPropertyNames&&Object.getPrototypeOf)for(var r=t;r;r=Object.getPrototypeOf(r))Object.getOwnPropertyNames(r).forEach(e);else for(var n in t)e(n)}(t,p)}if(e&&e.length){var d,g=e.pop();for(g.type&&0===g.type.indexOf(\\\"variable\\\")?(i&&i.additionalContext&&(d=i.additionalContext[g.string]),i&&!1===i.useGlobalScope||(d=d||c[g.string])):\\\"string\\\"==g.type?d=\\\"\\\":\\\"atom\\\"==g.type?d=1:\\\"function\\\"==g.type&&(null==c.jQuery||\\\"$\\\"!=g.string&&\\\"jQuery\\\"!=g.string||\\\"function\\\"!=typeof c.jQuery?null!=c._&&\\\"_\\\"==g.string&&\\\"function\\\"==typeof c._&&(d=c._()):d=c.jQuery());null!=d&&e.length;)d=d[e.pop().string];null!=d&&u(d)}else{for(var y=t.state.localVars;y;y=y.next)p(y.name);for(var y=t.state.globalVars;y;y=y.next)p(y.name);i&&!1===i.useGlobalScope||u(c),r(n,p)}return l}(p,g,i,f),from:e(c.line,p.start),to:e(c.line,p.end)}}}}function i(t,e){var r=t.getTokenAt(e);return e.ch==r.start+1&&\\\".\\\"==r.string.charAt(0)?(r.end=r.start,r.string=\\\".\\\",r.type=\\\"property\\\"):/^\\\\.[\\\\w$_]*$/.test(r.string)&&(r.type=\\\"property\\\",r.start++,r.string=r.string.replace(/\\\\./,\\\"\\\")),r}t.registerHelper(\\\"hint\\\",\\\"javascript\\\",function(t,e){return n(t,l,function(t,e){return t.getTokenAt(e)},e)}),t.registerHelper(\\\"hint\\\",\\\"coffeescript\\\",function(t,e){return n(t,f,i,e)});var o=\\\"charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight toUpperCase toLowerCase split concat match replace search\\\".split(\\\" \\\"),s=\\\"length concat join splice push pop shift unshift slice reverse sort indexOf lastIndexOf every some filter forEach map reduce reduceRight \\\".split(\\\" \\\"),a=\\\"prototype apply call bind\\\".split(\\\" \\\"),l=\\\"break case catch class const continue debugger default delete do else export extends false finally for function if in import instanceof new null return super switch this throw true try typeof var void while with yield\\\".split(\\\" \\\"),f=\\\"and break catch class continue delete do else extends false finally for if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes\\\".split(\\\" \\\")});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/hint/javascript-hint.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],t):t(CodeMirror)}(function(t){\\\"use strict\\\";var i=\\\"CodeMirror-hint\\\",e=\\\"CodeMirror-hint-active\\\";function n(t,i){this.cm=t,this.options=i,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor(\\\"start\\\"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length;var e=this;t.on(\\\"cursorActivity\\\",this.activityFunc=function(){e.cursorActivity()})}t.showHint=function(t,i,e){if(!i)return t.showHint(e);e&&e.async&&(i.async=!0);var n={hint:i};if(e)for(var o in e)n[o]=e[o];return t.showHint(n)},t.defineExtension(\\\"showHint\\\",function(i){i=function(t,i,e){var n=t.options.hintOptions,o={};for(var s in a)o[s]=a[s];if(n)for(var s in n)void 0!==n[s]&&(o[s]=n[s]);if(e)for(var s in e)void 0!==e[s]&&(o[s]=e[s]);o.hint.resolve&&(o.hint=o.hint.resolve(t,i));return o}(this,this.getCursor(\\\"start\\\"),i);var e=this.listSelections();if(!(e.length>1)){if(this.somethingSelected()){if(!i.hint.supportsSelection)return;for(var o=0;o<e.length;o++)if(e[o].head.line!=e[o].anchor.line)return}this.state.completionActive&&this.state.completionActive.close();var s=this.state.completionActive=new n(this,i);s.options.hint&&(t.signal(this,\\\"startCompletion\\\",this),s.update(!0))}});var o=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},s=window.cancelAnimationFrame||clearTimeout;function c(t){return\\\"string\\\"==typeof t?t:t.text}function r(t,i){for(;i&&i!=t;){if(\\\"LI\\\"===i.nodeName.toUpperCase()&&i.parentNode==t)return i;i=i.parentNode}}function h(n,o){this.completion=n,this.data=o,this.picked=!1;var s=this,h=n.cm,l=this.hints=document.createElement(\\\"ul\\\");l.className=\\\"CodeMirror-hints\\\",this.selectedHint=o.selectedHint||0;for(var a=o.list,u=0;u<a.length;++u){var f=l.appendChild(document.createElement(\\\"li\\\")),d=a[u],p=i+(u!=this.selectedHint?\\\"\\\":\\\" \\\"+e);null!=d.className&&(p=d.className+\\\" \\\"+p),f.className=p,d.render?d.render(f,o,d):f.appendChild(document.createTextNode(d.displayText||c(d))),f.hintId=u}var m=h.cursorCoords(n.options.alignWithWord?o.from:null),g=m.left,v=m.bottom,y=!0;l.style.left=g+\\\"px\\\",l.style.top=v+\\\"px\\\";var w=window.innerWidth||Math.max(document.body.offsetWidth,document.documentElement.offsetWidth),H=window.innerHeight||Math.max(document.body.offsetHeight,document.documentElement.offsetHeight);(n.options.container||document.body).appendChild(l);var k=l.getBoundingClientRect(),C=k.bottom-H,b=l.scrollHeight>l.clientHeight+1,x=h.getScrollInfo();if(C>0){var A=k.bottom-k.top;if(m.top-(m.bottom-k.top)-A>0)l.style.top=(v=m.top-A)+\\\"px\\\",y=!1;else if(A>H){l.style.height=H-5+\\\"px\\\",l.style.top=(v=m.bottom-k.top)+\\\"px\\\";var S=h.getCursor();o.from.ch!=S.ch&&(m=h.cursorCoords(S),l.style.left=(g=m.left)+\\\"px\\\",k=l.getBoundingClientRect())}}var T,M=k.right-w;if(M>0&&(k.right-k.left>w&&(l.style.width=w-5+\\\"px\\\",M-=k.right-k.left-w),l.style.left=(g=m.left-M)+\\\"px\\\"),b)for(var N=l.firstChild;N;N=N.nextSibling)N.style.paddingRight=h.display.nativeBarWidth+\\\"px\\\";(h.addKeyMap(this.keyMap=function(t,i){var e={Up:function(){i.moveFocus(-1)},Down:function(){i.moveFocus(1)},PageUp:function(){i.moveFocus(1-i.menuSize(),!0)},PageDown:function(){i.moveFocus(i.menuSize()-1,!0)},Home:function(){i.setFocus(0)},End:function(){i.setFocus(i.length-1)},Enter:i.pick,Tab:i.pick,Esc:i.close},n=t.options.customKeys,o=n?{}:e;function s(t,n){var s;s=\\\"string\\\"!=typeof n?function(t){return n(t,i)}:e.hasOwnProperty(n)?e[n]:n,o[t]=s}if(n)for(var c in n)n.hasOwnProperty(c)&&s(c,n[c]);var r=t.options.extraKeys;if(r)for(var c in r)r.hasOwnProperty(c)&&s(c,r[c]);return o}(n,{moveFocus:function(t,i){s.changeActive(s.selectedHint+t,i)},setFocus:function(t){s.changeActive(t)},menuSize:function(){return s.screenAmount()},length:a.length,close:function(){n.close()},pick:function(){s.pick()},data:o})),n.options.closeOnUnfocus)&&(h.on(\\\"blur\\\",this.onBlur=function(){T=setTimeout(function(){n.close()},100)}),h.on(\\\"focus\\\",this.onFocus=function(){clearTimeout(T)}));return h.on(\\\"scroll\\\",this.onScroll=function(){var t=h.getScrollInfo(),i=h.getWrapperElement().getBoundingClientRect(),e=v+x.top-t.top,o=e-(window.pageYOffset||(document.documentElement||document.body).scrollTop);if(y||(o+=l.offsetHeight),o<=i.top||o>=i.bottom)return n.close();l.style.top=e+\\\"px\\\",l.style.left=g+x.left-t.left+\\\"px\\\"}),t.on(l,\\\"dblclick\\\",function(t){var i=r(l,t.target||t.srcElement);i&&null!=i.hintId&&(s.changeActive(i.hintId),s.pick())}),t.on(l,\\\"click\\\",function(t){var i=r(l,t.target||t.srcElement);i&&null!=i.hintId&&(s.changeActive(i.hintId),n.options.completeOnSingleClick&&s.pick())}),t.on(l,\\\"mousedown\\\",function(){setTimeout(function(){h.focus()},20)}),t.signal(o,\\\"select\\\",a[this.selectedHint],l.childNodes[this.selectedHint]),!0}function l(t,i,e,n){if(t.async)t(i,n,e);else{var o=t(i,e);o&&o.then?o.then(n):n(o)}}n.prototype={close:function(){this.active()&&(this.cm.state.completionActive=null,this.tick=null,this.cm.off(\\\"cursorActivity\\\",this.activityFunc),this.widget&&this.data&&t.signal(this.data,\\\"close\\\"),this.widget&&this.widget.close(),t.signal(this.cm,\\\"endCompletion\\\",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(i,e){var n=i.list[e];n.hint?n.hint(this.cm,i,n):this.cm.replaceRange(c(n),n.from||i.from,n.to||i.to,\\\"complete\\\"),t.signal(i,\\\"pick\\\",n),this.close()},cursorActivity:function(){this.debounce&&(s(this.debounce),this.debounce=0);var t=this.cm.getCursor(),i=this.cm.getLine(t.line);if(t.line!=this.startPos.line||i.length-t.ch!=this.startLen-this.startPos.ch||t.ch<this.startPos.ch||this.cm.somethingSelected()||t.ch&&this.options.closeCharacters.test(i.charAt(t.ch-1)))this.close();else{var e=this;this.debounce=o(function(){e.update()}),this.widget&&this.widget.disable()}},update:function(t){if(null!=this.tick){var i=this,e=++this.tick;l(this.options.hint,this.cm,this.options,function(n){i.tick==e&&i.finishUpdate(n,t)})}},finishUpdate:function(i,e){this.data&&t.signal(this.data,\\\"update\\\");var n=this.widget&&this.widget.picked||e&&this.options.completeSingle;this.widget&&this.widget.close(),this.data=i,i&&i.list.length&&(n&&1==i.list.length?this.pick(i,0):(this.widget=new h(this,i),t.signal(i,\\\"shown\\\")))}},h.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null,this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap);var t=this.completion.cm;this.completion.options.closeOnUnfocus&&(t.off(\\\"blur\\\",this.onBlur),t.off(\\\"focus\\\",this.onFocus)),t.off(\\\"scroll\\\",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var t=this;this.keyMap={Enter:function(){t.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(i,n){if(i>=this.data.list.length?i=n?this.data.list.length-1:0:i<0&&(i=n?0:this.data.list.length-1),this.selectedHint!=i){var o=this.hints.childNodes[this.selectedHint];o.className=o.className.replace(\\\" \\\"+e,\\\"\\\"),(o=this.hints.childNodes[this.selectedHint=i]).className+=\\\" \\\"+e,o.offsetTop<this.hints.scrollTop?this.hints.scrollTop=o.offsetTop-3:o.offsetTop+o.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=o.offsetTop+o.offsetHeight-this.hints.clientHeight+3),t.signal(this.data,\\\"select\\\",this.data.list[this.selectedHint],o)}},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1}},t.registerHelper(\\\"hint\\\",\\\"auto\\\",{resolve:function(i,e){var n,o=i.getHelpers(e,\\\"hint\\\");if(o.length){var s=function(t,i,e){var n=function(t,i){if(!t.somethingSelected())return i;for(var e=[],n=0;n<i.length;n++)i[n].supportsSelection&&e.push(i[n]);return e}(t,o);!function o(s){if(s==n.length)return i(null);l(n[s],t,e,function(t){t&&t.list.length>0?i(t):o(s+1)})}(0)};return s.async=!0,s.supportsSelection=!0,s}return(n=i.getHelper(i.getCursor(),\\\"hintWords\\\"))?function(i){return t.hint.fromList(i,{words:n})}:t.hint.anyword?function(i,e){return t.hint.anyword(i,e)}:function(){}}}),t.registerHelper(\\\"hint\\\",\\\"fromList\\\",function(i,e){var n,o=i.getCursor(),s=i.getTokenAt(o),c=t.Pos(o.line,s.start),r=o;s.start<o.ch&&/\\\\w/.test(s.string.charAt(o.ch-s.start-1))?n=s.string.substr(0,o.ch-s.start):(n=\\\"\\\",c=o);for(var h=[],l=0;l<e.words.length;l++){var a=e.words[l];a.slice(0,n.length)==n&&h.push(a)}if(h.length)return{list:h,from:c,to:r}}),t.commands.autocomplete=t.showHint;var a={hint:t.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/[\\\\s()\\\\[\\\\]{};:>,]/,closeOnUnfocus:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null};t.defineOption(\\\"hintOptions\\\",null)});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.css\": {\n \"text\": \".CodeMirror-hints {\\n position: absolute;\\n z-index: 999;\\n overflow: hidden;\\n list-style: none;\\n\\n margin: 0;\\n padding: 2px;\\n\\n -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n border-radius: 3px;\\n border: 1px solid silver;\\n\\n background: white;\\n font-size: 90%;\\n font-family: monospace;\\n\\n max-height: 20em;\\n overflow-y: auto;\\n}\\n\\n.CodeMirror-hint {\\n margin: 0;\\n padding: 0 4px;\\n border-radius: 2px;\\n white-space: pre;\\n color: black;\\n cursor: pointer;\\n}\\n\\nli.CodeMirror-hint-active {\\n background: #08f;\\n color: white;\\n}\\n\",\n \"type\": \"text/css\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.css\",\n \"tags\": \"[[$:/tags/Stylesheet]]\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/hint/xml-hint.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],t):t(CodeMirror)}(function(t){\\\"use strict\\\";var e=t.Pos;t.registerHelper(\\\"hint\\\",\\\"xml\\\",function(r,s){var n=s&&s.schemaInfo,a=s&&s.quoteChar||'\\\"';if(n){var i=r.getCursor(),o=r.getTokenAt(i);o.end>i.ch&&(o.end=i.ch,o.string=o.string.slice(0,i.ch-o.start));var l=t.innerMode(r.getMode(),o.state);if(\\\"xml\\\"==l.mode.name){var f,g,c=[],h=!1,p=/\\\\btag\\\\b/.test(o.type)&&!/>$/.test(o.string),u=p&&/^\\\\w/.test(o.string);if(u){var d=r.getLine(i.line).slice(Math.max(0,o.start-2),o.start),m=/<\\\\/$/.test(d)?\\\"close\\\":/<$/.test(d)?\\\"open\\\":null;m&&(g=o.start-(\\\"close\\\"==m?2:1))}else p&&\\\"<\\\"==o.string?m=\\\"open\\\":p&&\\\"</\\\"==o.string&&(m=\\\"close\\\");if(!p&&!l.state.tagName||m){u&&(f=o.string),h=m;var v=l.state.context,y=v&&n[v.tagName],x=v?y&&y.children:n[\\\"!top\\\"];if(x&&\\\"close\\\"!=m)for(var O=0;O<x.length;++O)f&&0!=x[O].lastIndexOf(f,0)||c.push(\\\"<\\\"+x[O]);else if(\\\"close\\\"!=m)for(var b in n)!n.hasOwnProperty(b)||\\\"!top\\\"==b||\\\"!attrs\\\"==b||f&&0!=b.lastIndexOf(f,0)||c.push(\\\"<\\\"+b);v&&(!f||\\\"close\\\"==m&&0==v.tagName.lastIndexOf(f,0))&&c.push(\\\"</\\\"+v.tagName+\\\">\\\")}else{var w=(y=n[l.state.tagName])&&y.attrs,I=n[\\\"!attrs\\\"];if(!w&&!I)return;if(w){if(I){var P={};for(var A in I)I.hasOwnProperty(A)&&(P[A]=I[A]);for(var A in w)w.hasOwnProperty(A)&&(P[A]=w[A]);w=P}}else w=I;if(\\\"string\\\"==o.type||\\\"=\\\"==o.string){var M,N=(d=r.getRange(e(i.line,Math.max(0,i.ch-60)),e(i.line,\\\"string\\\"==o.type?o.start:o.end))).match(/([^\\\\s\\\\u00a0=<>\\\\\\\"\\\\']+)=$/);if(!N||!w.hasOwnProperty(N[1])||!(M=w[N[1]]))return;if(\\\"function\\\"==typeof M&&(M=M.call(this,r)),\\\"string\\\"==o.type){f=o.string;var $=0;/['\\\"]/.test(o.string.charAt(0))&&(a=o.string.charAt(0),f=o.string.slice(1),$++);var C=o.string.length;/['\\\"]/.test(o.string.charAt(C-1))&&(a=o.string.charAt(C-1),f=o.string.substr($,C-2)),h=!0}for(O=0;O<M.length;++O)f&&0!=M[O].lastIndexOf(f,0)||c.push(a+M[O]+a)}else for(var j in\\\"attribute\\\"==o.type&&(f=o.string,h=!0),w)!w.hasOwnProperty(j)||f&&0!=j.lastIndexOf(f,0)||c.push(j)}return{list:c,from:h?e(i.line,null==g?o.start:g):i,to:h?e(i.line,o.end):i}}}})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/hint/xml-hint.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-autocomplete/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-autocomplete/readme\",\n \"text\": \"This plugin enhances the [[CodeMirror|http://codemirror.net]] text editor with Autocompletion functionality. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\nIt adds Autocompletion for ''html'', ''javascript'' and ''xml'' and also for ''already present words'' within a text-editor instance\\n\\nThe ''Keyboard Shortcut'' for autocompletion is `Ctrl+Space`\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-closebrackets":{"title":"$:/plugins/tiddlywiki/codemirror-closebrackets","name":"CodeMirror Close Brackets","description":"Close brackets for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/codemirror/autoCloseBrackets\": {\n \"title\": \"$:/config/codemirror/autoCloseBrackets\",\n \"type\": \"bool\",\n \"text\": \"true\"\n },\n \"$:/config/codemirror/matchBrackets\": {\n \"title\": \"$:/config/codemirror/matchBrackets\",\n \"type\": \"bool\",\n \"text\": \"true\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){var t={pairs:\\\"()[]{}''\\\\\\\"\\\\\\\"\\\",triples:\\\"\\\",explode:\\\"[]{}\\\"},r=e.Pos;function n(e,r){return\\\"pairs\\\"==r&&\\\"string\\\"==typeof e?e:\\\"object\\\"==typeof e&&null!=e[r]?e[r]:t[r]}e.defineOption(\\\"autoCloseBrackets\\\",!1,function(t,r,o){o&&o!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),r&&(a(n(r,\\\"pairs\\\")),t.state.closeBrackets=r,t.addKeyMap(i))});var i={Backspace:function(t){var i=s(t);if(!i||t.getOption(\\\"disableInput\\\"))return e.Pass;for(var a=n(i,\\\"pairs\\\"),o=t.listSelections(),c=0;c<o.length;c++){if(!o[c].empty())return e.Pass;var f=l(t,o[c].head);if(!f||a.indexOf(f)%2!=0)return e.Pass}for(var c=o.length-1;c>=0;c--){var h=o[c].head;t.replaceRange(\\\"\\\",r(h.line,h.ch-1),r(h.line,h.ch+1),\\\"+delete\\\")}},Enter:function(t){var r=s(t),i=r&&n(r,\\\"explode\\\");if(!i||t.getOption(\\\"disableInput\\\"))return e.Pass;for(var a=t.listSelections(),o=0;o<a.length;o++){if(!a[o].empty())return e.Pass;var c=l(t,a[o].head);if(!c||i.indexOf(c)%2!=0)return e.Pass}t.operation(function(){var e=t.lineSeparator()||\\\"\\\\n\\\";t.replaceSelection(e+e,null),t.execCommand(\\\"goCharLeft\\\"),a=t.listSelections();for(var r=0;r<a.length;r++){var n=a[r].head.line;t.indentLine(n,null,!0),t.indentLine(n+1,null,!0)}})}};function a(e){for(var t=0;t<e.length;t++){var r=e.charAt(t),n=\\\"'\\\"+r+\\\"'\\\";i[n]||(i[n]=o(r))}}function o(t){return function(i){return function(t,i){var a=s(t);if(!a||t.getOption(\\\"disableInput\\\"))return e.Pass;var o=n(a,\\\"pairs\\\"),l=o.indexOf(i);if(-1==l)return e.Pass;for(var c,f=n(a,\\\"triples\\\"),h=o.charAt(l+1)==i,d=t.listSelections(),u=l%2==0,g=0;g<d.length;g++){var p,v=d[g],m=v.head,b=t.getRange(m,r(m.line,m.ch+1));if(u&&!v.empty())p=\\\"surround\\\";else if(!h&&u||b!=i)if(h&&m.ch>1&&f.indexOf(i)>=0&&t.getRange(r(m.line,m.ch-2),m)==i+i){if(m.ch>2&&/\\\\bstring/.test(t.getTokenTypeAt(r(m.line,m.ch-2))))return e.Pass;p=\\\"addFour\\\"}else if(h){var C=0==m.ch?\\\" \\\":t.getRange(r(m.line,m.ch-1),m);if(e.isWordChar(b)||C==i||e.isWordChar(C))return e.Pass;p=\\\"both\\\"}else{if(!u||!(t.getLine(m.line).length==m.ch||(x=b,P=o,void 0,k=P.lastIndexOf(x),k>-1&&k%2==1)||/\\\\s/.test(b)))return e.Pass;p=\\\"both\\\"}else p=!h||(S=m,void 0,O=(y=t).getTokenAt(r(S.line,S.ch+1)),!/\\\\bstring/.test(O.type)||O.start!=S.ch||0!=S.ch&&/\\\\bstring/.test(y.getTokenTypeAt(S)))?f.indexOf(i)>=0&&t.getRange(m,r(m.line,m.ch+3))==i+i+i?\\\"skipThree\\\":\\\"skip\\\":\\\"both\\\";if(c){if(c!=p)return e.Pass}else c=p}var x,P,k;var y,S,O;var R=l%2?o.charAt(l-1):i,A=l%2?i:o.charAt(l+1);t.operation(function(){if(\\\"skip\\\"==c)t.execCommand(\\\"goCharRight\\\");else if(\\\"skipThree\\\"==c)for(var n=0;n<3;n++)t.execCommand(\\\"goCharRight\\\");else if(\\\"surround\\\"==c){for(var i=t.getSelections(),n=0;n<i.length;n++)i[n]=R+i[n]+A;t.replaceSelections(i,\\\"around\\\"),i=t.listSelections().slice();for(var n=0;n<i.length;n++)i[n]=(a=i[n],void 0,o=e.cmpPos(a.anchor,a.head)>0,{anchor:new r(a.anchor.line,a.anchor.ch+(o?-1:1)),head:new r(a.head.line,a.head.ch+(o?1:-1))});t.setSelections(i)}else\\\"both\\\"==c?(t.replaceSelection(R+A,null),t.triggerElectric(R+A),t.execCommand(\\\"goCharLeft\\\")):\\\"addFour\\\"==c&&(t.replaceSelection(R+R+R+R,\\\"before\\\"),t.execCommand(\\\"goCharRight\\\"));var a,o})}(i,t)}}function s(e){var t=e.state.closeBrackets;return!t||t.override?t:e.getModeAt(e.getCursor()).closeBrackets||t}function l(e,t){var n=e.getRange(r(t.line,t.ch-1),r(t.line,t.ch+1));return 2==n.length?n:null}a(t.pairs+\\\"`\\\")});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],t):t(CodeMirror)}(function(t){var e=/MSIE \\\\d/.test(navigator.userAgent)&&(null==document.documentMode||document.documentMode<8),n=t.Pos,r={\\\"(\\\":\\\")>\\\",\\\")\\\":\\\"(<\\\",\\\"[\\\":\\\"]>\\\",\\\"]\\\":\\\"[<\\\",\\\"{\\\":\\\"}>\\\",\\\"}\\\":\\\"{<\\\"};function i(t,e,i){var c=t.getLineHandle(e.line),o=e.ch-1,l=i&&i.afterCursor;null==l&&(l=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var h=!l&&o>=0&&r[c.text.charAt(o)]||r[c.text.charAt(++o)];if(!h)return null;var s=\\\">\\\"==h.charAt(1)?1:-1;if(i&&i.strict&&s>0!=(o==e.ch))return null;var u=t.getTokenTypeAt(n(e.line,o+1)),f=a(t,n(e.line,o+(s>0?1:0)),s,u||null,i);return null==f?null:{from:n(e.line,o),to:f&&f.pos,match:f&&f.ch==h.charAt(0),forward:s>0}}function a(t,e,i,a,c){for(var o=c&&c.maxScanLineLength||1e4,l=c&&c.maxScanLines||1e3,h=[],s=c&&c.bracketRegex?c.bracketRegex:/[(){}[\\\\]]/,u=i>0?Math.min(e.line+l,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-l),f=e.line;f!=u;f+=i){var m=t.getLine(f);if(m){var g=i>0?0:m.length-1,d=i>0?m.length:-1;if(!(m.length>o))for(f==e.line&&(g=e.ch-(i<0?1:0));g!=d;g+=i){var k=m.charAt(g);if(s.test(k)&&(void 0===a||t.getTokenTypeAt(n(f,g+1))==a))if(\\\">\\\"==r[k].charAt(1)==i>0)h.push(k);else{if(!h.length)return{pos:n(f,g),ch:k};h.pop()}}}}return f-i!=(i>0?t.lastLine():t.firstLine())&&null}function c(t,r,a){for(var c=t.state.matchBrackets.maxHighlightLineLength||1e3,o=[],l=t.listSelections(),h=0;h<l.length;h++){var s=l[h].empty()&&i(t,l[h].head,a);if(s&&t.getLine(s.from.line).length<=c){var u=s.match?\\\"CodeMirror-matchingbracket\\\":\\\"CodeMirror-nonmatchingbracket\\\";o.push(t.markText(s.from,n(s.from.line,s.from.ch+1),{className:u})),s.to&&t.getLine(s.to.line).length<=c&&o.push(t.markText(s.to,n(s.to.line,s.to.ch+1),{className:u}))}}if(o.length){e&&t.state.focused&&t.focus();var f=function(){t.operation(function(){for(var t=0;t<o.length;t++)o[t].clear()})};if(!r)return f;setTimeout(f,800)}}function o(t){t.operation(function(){t.state.matchBrackets.currentlyHighlighted&&(t.state.matchBrackets.currentlyHighlighted(),t.state.matchBrackets.currentlyHighlighted=null),t.state.matchBrackets.currentlyHighlighted=c(t,!1,t.state.matchBrackets)})}t.defineOption(\\\"matchBrackets\\\",!1,function(e,n,r){r&&r!=t.Init&&(e.off(\\\"cursorActivity\\\",o),e.state.matchBrackets&&e.state.matchBrackets.currentlyHighlighted&&(e.state.matchBrackets.currentlyHighlighted(),e.state.matchBrackets.currentlyHighlighted=null)),n&&(e.state.matchBrackets=\\\"object\\\"==typeof n?n:{},e.on(\\\"cursorActivity\\\",o))}),t.defineExtension(\\\"matchBrackets\\\",function(){c(this,!0)}),t.defineExtension(\\\"findMatchingBracket\\\",function(t,e,n){return(n||\\\"boolean\\\"==typeof e)&&(n?(n.strict=e,e=n):e=e?{strict:!0}:null),i(this,t,e)}),t.defineExtension(\\\"scanForBracket\\\",function(t,e,n,r){return a(this,t,e,n,r)})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-closebrackets/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-closebrackets/readme\",\n \"text\": \"This plugin adds the ability to automatically insert the closing brackets when you type an opening bracket.\\nAlso enables highlighting of matching brackets.\\n\\nIt needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-closetag":{"title":"$:/plugins/tiddlywiki/codemirror-closetag","name":"CodeMirror Close Tag","description":"Close tags automatically for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/codemirror/autoCloseTags\": {\n \"title\": \"$:/config/codemirror/autoCloseTags\",\n \"type\": \"bool\",\n \"text\": \"true\\n\"\n },\n \"$:/language/codemirror/autoCloseTags/hint\": {\n \"title\": \"$:/language/codemirror/autoCloseTags/hint\",\n \"text\": \"Auto-close tags\"\n },\n \"$:/language/codemirror/autoCloseTags/info\": {\n \"title\": \"$:/language/codemirror/autoCloseTags/info\",\n \"text\": \"Whether or not to automatically close tags\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/fold/xml-fold.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";var n=e.Pos;function t(e,n){return e.line-n.line||e.ch-n.ch}var i=\\\"A-Z_a-z\\\\\\\\u00C0-\\\\\\\\u00D6\\\\\\\\u00D8-\\\\\\\\u00F6\\\\\\\\u00F8-\\\\\\\\u02FF\\\\\\\\u0370-\\\\\\\\u037D\\\\\\\\u037F-\\\\\\\\u1FFF\\\\\\\\u200C-\\\\\\\\u200D\\\\\\\\u2070-\\\\\\\\u218F\\\\\\\\u2C00-\\\\\\\\u2FEF\\\\\\\\u3001-\\\\\\\\uD7FF\\\\\\\\uF900-\\\\\\\\uFDCF\\\\\\\\uFDF0-\\\\\\\\uFFFD\\\",r=new RegExp(\\\"<(/?)([\\\"+i+\\\"][A-Z_a-z\\\\\\\\u00C0-\\\\\\\\u00D6\\\\\\\\u00D8-\\\\\\\\u00F6\\\\\\\\u00F8-\\\\\\\\u02FF\\\\\\\\u0370-\\\\\\\\u037D\\\\\\\\u037F-\\\\\\\\u1FFF\\\\\\\\u200C-\\\\\\\\u200D\\\\\\\\u2070-\\\\\\\\u218F\\\\\\\\u2C00-\\\\\\\\u2FEF\\\\\\\\u3001-\\\\\\\\uD7FF\\\\\\\\uF900-\\\\\\\\uFDCF\\\\\\\\uFDF0-\\\\\\\\uFFFD-:.0-9\\\\\\\\u00B7\\\\\\\\u0300-\\\\\\\\u036F\\\\\\\\u203F-\\\\\\\\u2040]*)\\\",\\\"g\\\");function u(e,n,t,i){this.line=n,this.ch=t,this.cm=e,this.text=e.getLine(n),this.min=i?Math.max(i.from,e.firstLine()):e.firstLine(),this.max=i?Math.min(i.to-1,e.lastLine()):e.lastLine()}function f(e,t){var i=e.cm.getTokenTypeAt(n(e.line,t));return i&&/\\\\btag\\\\b/.test(i)}function o(e){if(!(e.line>=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function l(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function c(e){for(;;){var n=e.text.indexOf(\\\">\\\",e.ch);if(-1==n){if(o(e))continue;return}if(f(e,n+1)){var t=e.text.lastIndexOf(\\\"/\\\",n),i=t>-1&&!/\\\\S/.test(e.text.slice(t+1,n));return e.ch=n+1,i?\\\"selfClose\\\":\\\"regular\\\"}e.ch=n+1}}function a(e){for(;;){var n=e.ch?e.text.lastIndexOf(\\\"<\\\",e.ch-1):-1;if(-1==n){if(l(e))continue;return}if(f(e,n+1)){r.lastIndex=n,e.ch=n;var t=r.exec(e.text);if(t&&t.index==n)return t}else e.ch=n}}function s(e){for(;;){r.lastIndex=e.ch;var n=r.exec(e.text);if(!n){if(o(e))continue;return}if(f(e,n.index+1))return e.ch=n.index+n[0].length,n;e.ch=n.index+1}}function h(e){for(;;){var n=e.ch?e.text.lastIndexOf(\\\">\\\",e.ch-1):-1;if(-1==n){if(l(e))continue;return}if(f(e,n+1)){var t=e.text.lastIndexOf(\\\"/\\\",n),i=t>-1&&!/\\\\S/.test(e.text.slice(t+1,n));return e.ch=n+1,i?\\\"selfClose\\\":\\\"regular\\\"}e.ch=n}}function F(e,t){for(var i=[];;){var r,u=s(e),f=e.line,o=e.ch-(u?u[0].length:0);if(!u||!(r=c(e)))return;if(\\\"selfClose\\\"!=r)if(u[1]){for(var l=i.length-1;l>=0;--l)if(i[l]==u[2]){i.length=l;break}if(l<0&&(!t||t==u[2]))return{tag:u[2],from:n(f,o),to:n(e.line,e.ch)}}else i.push(u[2])}}function x(e,t){for(var i=[];;){var r=h(e);if(!r)return;if(\\\"selfClose\\\"!=r){var u=e.line,f=e.ch,o=a(e);if(!o)return;if(o[1])i.push(o[2]);else{for(var l=i.length-1;l>=0;--l)if(i[l]==o[2]){i.length=l;break}if(l<0&&(!t||t==o[2]))return{tag:o[2],from:n(e.line,e.ch),to:n(u,f)}}}else a(e)}}e.registerHelper(\\\"fold\\\",\\\"xml\\\",function(e,i){for(var r=new u(e,i.line,0);;){var f=s(r);if(!f||r.line!=i.line)return;var o=c(r);if(!o)return;if(!f[1]&&\\\"selfClose\\\"!=o){var l=n(r.line,r.ch),a=F(r,f[2]);return a&&t(a.from,l)>0?{from:l,to:a.from}:null}}}),e.findMatchingTag=function(e,i,r){var f=new u(e,i.line,i.ch,r);if(-1!=f.text.indexOf(\\\">\\\")||-1!=f.text.indexOf(\\\"<\\\")){var o=c(f),l=o&&n(f.line,f.ch),s=o&&a(f);if(o&&s&&!(t(f,i)>0)){var h={from:n(f.line,f.ch),to:l,tag:s[2]};return\\\"selfClose\\\"==o?{open:h,close:null,at:\\\"open\\\"}:s[1]?{open:x(f,s[2]),close:h,at:\\\"close\\\"}:{open:h,close:F(f=new u(e,l.line,l.ch,r),s[2]),at:\\\"open\\\"}}}},e.findEnclosingTag=function(e,n,t,i){for(var r=new u(e,n.line,n.ch,t);;){var f=x(r,i);if(!f)break;var o=F(new u(e,n.line,n.ch,t),f.tag);if(o)return{open:f,close:o}}},e.scanForClosingTag=function(e,n,t,i){return F(new u(e,n.line,n.ch,i?{from:0,to:i}:null),t)}});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/fold/xml-fold.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/edit/closetag.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\"),require(\\\"../fold/xml-fold\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"../fold/xml-fold\\\"],e):e(CodeMirror)}(function(e){e.defineOption(\\\"autoCloseTags\\\",!1,function(i,s,l){if(l!=e.Init&&l&&i.removeKeyMap(\\\"autoCloseTags\\\"),s){var d={name:\\\"autoCloseTags\\\"};(\\\"object\\\"!=typeof s||s.whenClosing)&&(d[\\\"'/'\\\"]=function(t){return(n=t).getOption(\\\"disableInput\\\")?e.Pass:o(n,!0);var n}),(\\\"object\\\"!=typeof s||s.whenOpening)&&(d[\\\"'>'\\\"]=function(o){return function(o){if(o.getOption(\\\"disableInput\\\"))return e.Pass;for(var i=o.listSelections(),s=[],l=o.getOption(\\\"autoCloseTags\\\"),d=0;d<i.length;d++){if(!i[d].empty())return e.Pass;var c=i[d].head,f=o.getTokenAt(c),g=e.innerMode(o.getMode(),f.state),u=g.state;if(\\\"xml\\\"!=g.mode.name||!u.tagName)return e.Pass;var m=\\\"html\\\"==g.mode.configuration,h=\\\"object\\\"==typeof l&&l.dontCloseTags||m&&t,p=\\\"object\\\"==typeof l&&l.indentTags||m&&n,v=u.tagName;f.end>c.ch&&(v=v.slice(0,v.length-f.end+c.ch));var b=v.toLowerCase();if(!v||\\\"string\\\"==f.type&&(f.end!=c.ch||!/[\\\\\\\"\\\\']/.test(f.string.charAt(f.string.length-1))||1==f.string.length)||\\\"tag\\\"==f.type&&\\\"closeTag\\\"==u.type||f.string.indexOf(\\\"/\\\")==f.string.length-1||h&&a(h,b)>-1||r(o,v,c,u,!0))return e.Pass;var y=p&&a(p,b)>-1;s[d]={indent:y,text:\\\">\\\"+(y?\\\"\\\\n\\\\n\\\":\\\"\\\")+\\\"</\\\"+v+\\\">\\\",newPos:y?e.Pos(c.line+1,0):e.Pos(c.line,c.ch+1)}}for(var x=\\\"object\\\"==typeof l&&l.dontIndentOnAutoClose,d=i.length-1;d>=0;d--){var P=s[d];o.replaceRange(P.text,i[d].head,i[d].anchor,\\\"+insert\\\");var T=o.listSelections().slice(0);T[d]={head:P.newPos,anchor:P.newPos},o.setSelections(T),!x&&P.indent&&(o.indentLine(P.newPos.line,null,!0),o.indentLine(P.newPos.line+1,null,!0))}}(o)}),i.addKeyMap(d)}});var t=[\\\"area\\\",\\\"base\\\",\\\"br\\\",\\\"col\\\",\\\"command\\\",\\\"embed\\\",\\\"hr\\\",\\\"img\\\",\\\"input\\\",\\\"keygen\\\",\\\"link\\\",\\\"meta\\\",\\\"param\\\",\\\"source\\\",\\\"track\\\",\\\"wbr\\\"],n=[\\\"applet\\\",\\\"blockquote\\\",\\\"body\\\",\\\"button\\\",\\\"div\\\",\\\"dl\\\",\\\"fieldset\\\",\\\"form\\\",\\\"frameset\\\",\\\"h1\\\",\\\"h2\\\",\\\"h3\\\",\\\"h4\\\",\\\"h5\\\",\\\"h6\\\",\\\"head\\\",\\\"html\\\",\\\"iframe\\\",\\\"layer\\\",\\\"legend\\\",\\\"object\\\",\\\"ol\\\",\\\"p\\\",\\\"select\\\",\\\"table\\\",\\\"ul\\\"];function o(t,n){for(var o=t.listSelections(),a=[],i=n?\\\"/\\\":\\\"</\\\",s=t.getOption(\\\"autoCloseTags\\\"),l=\\\"object\\\"==typeof s&&s.dontIndentOnSlash,d=0;d<o.length;d++){if(!o[d].empty())return e.Pass;var c,f=o[d].head,g=t.getTokenAt(f),u=e.innerMode(t.getMode(),g.state),m=u.state;if(n&&(\\\"string\\\"==g.type||\\\"<\\\"!=g.string.charAt(0)||g.start!=f.ch-1))return e.Pass;if(\\\"xml\\\"!=u.mode.name)if(\\\"htmlmixed\\\"==t.getMode().name&&\\\"javascript\\\"==u.mode.name)c=i+\\\"script\\\";else{if(\\\"htmlmixed\\\"!=t.getMode().name||\\\"css\\\"!=u.mode.name)return e.Pass;c=i+\\\"style\\\"}else{if(!m.context||!m.context.tagName||r(t,m.context.tagName,f,m))return e.Pass;c=i+m.context.tagName}\\\">\\\"!=t.getLine(f.line).charAt(g.end)&&(c+=\\\">\\\"),a[d]=c}if(t.replaceSelections(a),o=t.listSelections(),!l)for(d=0;d<o.length;d++)(d==o.length-1||o[d].head.line<o[d+1].head.line)&&t.indentLine(o[d].head.line)}function a(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,o=e.length;n<o;++n)if(e[n]==t)return n;return-1}function r(t,n,o,a,r){if(!e.scanForClosingTag)return!1;var i=Math.min(t.lastLine()+1,o.line+500),s=e.scanForClosingTag(t,o,null,i);if(!s||s.tag!=n)return!1;for(var l=a.context,d=r?1:0;l&&l.tagName==n;l=l.prev)++d;o=s.to;for(var c=1;c<d;c++){var f=e.scanForClosingTag(t,o,null,i);if(!f||f.tag!=n)return!1;o=f.to}return!0}e.commands.closeTag=function(e){return o(e)}});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/edit/closetag.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-closetag/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-closetag/readme\",\n \"text\": \"This plugin adds the ability to ''automatically close Tags''. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\\n\"\n },\n \"$:/core/ui/ControlPanel/Settings/codemirror/autoCloseTags\": {\n \"title\": \"$:/core/ui/ControlPanel/Settings/codemirror/autoCloseTags\",\n \"tags\": \"$:/tags/ControlPanel/Settings/CodeMirror\",\n \"caption\": \"{{$:/language/codemirror/autoCloseTags/hint}}\",\n \"text\": \"\\\\define lingo-base() $:/language/codemirror/autoCloseTags/\\n<<lingo hint>>\\n\\n<$checkbox tiddler=\\\"$:/config/codemirror/autoCloseTags\\\" field=\\\"text\\\" checked=\\\"true\\\" unchecked=\\\"false\\\" default=\\\"true\\\"> <$link to=\\\"$:/config/codemirror/autoCloseTags\\\"><<lingo info>></$link> </$checkbox>\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-fullscreen":{"title":"$:/plugins/tiddlywiki/codemirror-fullscreen","name":"CodeMirror Fullscreen","description":"Fullscreen editing for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/codemirror/fullscreen\": {\n \"title\": \"$:/config/codemirror/fullscreen\",\n \"extend\": \"extraKeys\",\n \"type\": \"json\",\n \"text\": \"{\\n\\t\\\"F11\\\": \\\"togglefullscreen\\\"\\n}\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";e.defineOption(\\\"fullScreen\\\",!1,function(t,l,o){var r,n;(o==e.Init&&(o=!1),!o!=!l)&&(l?(n=(r=t).getWrapperElement(),r.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:n.style.width,height:n.style.height},n.style.width=\\\"\\\",n.style.height=\\\"auto\\\",n.className+=\\\" CodeMirror-fullscreen\\\",document.documentElement.style.overflow=\\\"hidden\\\",r.refresh()):function(e){var t=e.getWrapperElement();t.className=t.className.replace(/\\\\s*CodeMirror-fullscreen\\\\b/,\\\"\\\"),document.documentElement.style.overflow=\\\"\\\";var l=e.state.fullScreenRestore;t.style.width=l.width,t.style.height=l.height,window.scrollTo(l.scrollLeft,l.scrollTop),e.refresh()}(t))}),e.toggleFullscreen=function(e){e.setOption(\\\"fullScreen\\\",!e.getOption(\\\"fullScreen\\\"))},e.commands.togglefullscreen=e.toggleFullscreen});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.css\": {\n \"text\": \".CodeMirror-fullscreen {\\n position: fixed;\\n top: 0; left: 0; right: 0; bottom: 0;\\n height: auto;\\n z-index: 9;\\n}\\n\",\n \"type\": \"text/css\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.css\",\n \"tags\": \"[[$:/tags/Stylesheet]]\"\n },\n \"$:/plugins/tiddlywiki/codemirror-fullscreen/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-fullscreen/readme\",\n \"text\": \"This plugin adds a ''Fullscreen editing Mode'' to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\nPressing ''F11'' with the focus within the editor-textarea will make the editor go fullscreen, pressing ''F11'' again leaves fullscreen-mode\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-keymap-emacs":{"title":"$:/plugins/tiddlywiki/codemirror-keymap-emacs","name":"CodeMirror Keymap Emacs","description":"Keymap compatible with Emacs for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/keymaps/emacs\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/keymaps/emacs\",\n \"module-type\": \"codemirror-keymap\",\n \"text\": \"emacs\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/keymap/emacs.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../lib/codemirror\\\"],t):t(CodeMirror)}(function(t){\\\"use strict\\\";var e=t.Pos;function n(t,e){return t.line==e.line&&t.ch==e.ch}var r=[];function o(t){r.push(t),r.length>50&&r.shift()}function i(t){return r[r.length-(t?Math.min(t,1):1)]||\\\"\\\"}var l=null;function a(t,e,i,a,c){null==c&&(c=t.getRange(e,i)),\\\"grow\\\"==a&&l&&l.cm==t&&n(e,l.pos)&&t.isClean(l.gen)?function(t){if(!r.length)return o(t);r[r.length-1]+=t}(c):!1!==a&&o(c),t.replaceRange(\\\"\\\",e,i,\\\"+delete\\\"),l=\\\"grow\\\"==a?{cm:t,pos:e,gen:t.changeGeneration()}:null}function c(t,e,n){return t.findPosH(e,n,\\\"char\\\",!0)}function u(t,e,n){return t.findPosH(e,n,\\\"word\\\",!0)}function f(t,e,n){return t.findPosV(e,n,\\\"line\\\",t.doc.sel.goalColumn)}function s(t,e,n){return t.findPosV(e,n,\\\"page\\\",t.doc.sel.goalColumn)}function g(t,n,r){for(var o=n.line,i=t.getLine(o),l=/\\\\S/.test(r<0?i.slice(0,n.ch):i.slice(n.ch)),a=t.firstLine(),c=t.lastLine();;){if((o+=r)<a||o>c)return t.clipPos(e(o-r,r<0?0:null));if(i=t.getLine(o),/\\\\S/.test(i))l=!0;else if(l)return e(o,0)}}function C(t,n,r){for(var o=n.line,i=n.ch,l=t.getLine(n.line),a=!1;;){var c=l.charAt(i+(r<0?-1:0));if(c){if(a&&/[!?.]/.test(c))return e(o,i+(r>0?1:0));a||(a=/\\\\w/.test(c)),i+=r}else{if(o==(r<0?t.firstLine():t.lastLine()))return e(o,i);if(l=t.getLine(o+r),!/\\\\S/.test(l))return e(o,i);o+=r,i=r<0?l.length:0}}}function d(t,r,o){var i;if(t.findMatchingBracket&&(i=t.findMatchingBracket(r,{strict:!0}))&&i.match&&(i.forward?1:-1)==o)return o>0?e(i.to.line,i.to.ch+1):i.to;for(var l=!0;;l=!1){var a=t.getTokenAt(r),c=e(r.line,o<0?a.start:a.end);if(!(l&&o>0&&a.end==r.ch)&&/\\\\w/.test(a.string))return c;var u=t.findPosH(c,o,\\\"char\\\");if(n(c,u))return r;r=u}}function p(t,e){var n=t.state.emacsPrefix;return n?(L(t),\\\"-\\\"==n?-1:Number(n)):e?null:1}function h(t){var e=\\\"string\\\"==typeof t?function(e){e.execCommand(t)}:t;return function(t){var n=p(t);e(t);for(var r=1;r<n;++r)e(t)}}function v(t,e,r,o){var i=p(t);i<0&&(o=-o,i=-i);for(var l=0;l<i;++l){var a=r(t,e,o);if(n(a,e))break;e=a}return e}function m(t,e){var n=function(n){n.extendSelection(v(n,n.getCursor(),t,e))};return n.motion=!0,n}function A(t,e,n,r){for(var o,i=t.listSelections(),l=i.length;l--;)a(t,o=i[l].head,v(t,o,e,n),r)}function S(t,e){if(t.somethingSelected()){for(var n,r=t.listSelections(),o=r.length;o--;)a(t,(n=r[o]).anchor,n.head,e);return!0}}function P(t,e){t.state.emacsPrefix?\\\"-\\\"!=e&&(t.state.emacsPrefix+=e):(t.state.emacsPrefix=e,t.on(\\\"keyHandled\\\",x),t.on(\\\"inputRead\\\",R))}var w={\\\"Alt-G\\\":!0,\\\"Ctrl-X\\\":!0,\\\"Ctrl-Q\\\":!0,\\\"Ctrl-U\\\":!0};function x(t,e){t.state.emacsPrefixMap||w.hasOwnProperty(e)||L(t)}function L(t){t.state.emacsPrefix=null,t.off(\\\"keyHandled\\\",x),t.off(\\\"inputRead\\\",R)}function R(t,e){var n=p(t);if(n>1&&\\\"+input\\\"==e.origin){for(var r=e.text.join(\\\"\\\\n\\\"),o=\\\"\\\",i=1;i<n;++i)o+=r;t.replaceSelection(o)}}function y(t,e){(\\\"string\\\"!=typeof e||!/^\\\\d$/.test(e)&&\\\"Ctrl-U\\\"!=e)&&(t.removeKeyMap(D),t.state.emacsPrefixMap=!1,t.off(\\\"keyHandled\\\",y),t.off(\\\"inputRead\\\",y))}function k(t){t.setCursor(t.getCursor()),t.setExtending(!t.getExtending()),t.on(\\\"change\\\",function(){t.setExtending(!1)})}function b(t){t.setExtending(!1),t.setCursor(t.getCursor())}function U(t,e){var n=t.getCursor(),r=t.findPosH(n,1,\\\"word\\\");t.replaceRange(e(t.getRange(n,r)),n,r),t.setCursor(r)}t.emacs={kill:a,killRegion:S,repeated:h};var X=t.keyMap.emacs=t.normalizeKeyMap({\\\"Ctrl-W\\\":function(t){a(t,t.getCursor(\\\"start\\\"),t.getCursor(\\\"end\\\"),!0)},\\\"Ctrl-K\\\":h(function(t){var n=t.getCursor(),r=t.clipPos(e(n.line)),o=t.getRange(n,r);/\\\\S/.test(o)||(o+=\\\"\\\\n\\\",r=e(n.line+1,0)),a(t,n,r,\\\"grow\\\",o)}),\\\"Alt-W\\\":function(t){o(t.getSelection()),b(t)},\\\"Ctrl-Y\\\":function(t){var e=t.getCursor();t.replaceRange(i(p(t)),e,e,\\\"paste\\\"),t.setSelection(e,t.getCursor())},\\\"Alt-Y\\\":function(t){t.replaceSelection((r.length>1&&r.pop(),i()),\\\"around\\\",\\\"paste\\\")},\\\"Ctrl-Space\\\":k,\\\"Ctrl-Shift-2\\\":k,\\\"Ctrl-F\\\":m(c,1),\\\"Ctrl-B\\\":m(c,-1),Right:m(c,1),Left:m(c,-1),\\\"Ctrl-D\\\":function(t){A(t,c,1,!1)},Delete:function(t){S(t,!1)||A(t,c,1,!1)},\\\"Ctrl-H\\\":function(t){A(t,c,-1,!1)},Backspace:function(t){S(t,!1)||A(t,c,-1,!1)},\\\"Alt-F\\\":m(u,1),\\\"Alt-B\\\":m(u,-1),\\\"Alt-D\\\":function(t){A(t,u,1,\\\"grow\\\")},\\\"Alt-Backspace\\\":function(t){A(t,u,-1,\\\"grow\\\")},\\\"Ctrl-N\\\":m(f,1),\\\"Ctrl-P\\\":m(f,-1),Down:m(f,1),Up:m(f,-1),\\\"Ctrl-A\\\":\\\"goLineStart\\\",\\\"Ctrl-E\\\":\\\"goLineEnd\\\",End:\\\"goLineEnd\\\",Home:\\\"goLineStart\\\",\\\"Alt-V\\\":m(s,-1),\\\"Ctrl-V\\\":m(s,1),PageUp:m(s,-1),PageDown:m(s,1),\\\"Ctrl-Up\\\":m(g,-1),\\\"Ctrl-Down\\\":m(g,1),\\\"Alt-A\\\":m(C,-1),\\\"Alt-E\\\":m(C,1),\\\"Alt-K\\\":function(t){A(t,C,1,\\\"grow\\\")},\\\"Ctrl-Alt-K\\\":function(t){A(t,d,1,\\\"grow\\\")},\\\"Ctrl-Alt-Backspace\\\":function(t){A(t,d,-1,\\\"grow\\\")},\\\"Ctrl-Alt-F\\\":m(d,1),\\\"Ctrl-Alt-B\\\":m(d,-1),\\\"Shift-Ctrl-Alt-2\\\":function(t){var e=t.getCursor();t.setSelection(v(t,e,d,1),e)},\\\"Ctrl-Alt-T\\\":function(t){var e=d(t,t.getCursor(),-1),n=d(t,e,1),r=d(t,n,1),o=d(t,r,-1);t.replaceRange(t.getRange(o,r)+t.getRange(n,o)+t.getRange(e,n),e,r)},\\\"Ctrl-Alt-U\\\":h(function(t){for(var n=t.getCursor(),r=n.line,o=n.ch,i=[];r>=t.firstLine();){for(var l=t.getLine(r),a=null==o?l.length:o;a>0;)if(\\\")\\\"==(o=l.charAt(--a)))i.push(\\\"(\\\");else if(\\\"]\\\"==o)i.push(\\\"[\\\");else if(\\\"}\\\"==o)i.push(\\\"{\\\");else if(/[\\\\(\\\\{\\\\[]/.test(o)&&(!i.length||i.pop()!=o))return t.extendSelection(e(r,a));--r,o=null}}),\\\"Alt-Space\\\":function(t){for(var n=t.getCursor(),r=n.ch,o=n.ch,i=t.getLine(n.line);r&&/\\\\s/.test(i.charAt(r-1));)--r;for(;o<i.length&&/\\\\s/.test(i.charAt(o));)++o;t.replaceRange(\\\" \\\",e(n.line,r),e(n.line,o))},\\\"Ctrl-O\\\":h(function(t){t.replaceSelection(\\\"\\\\n\\\",\\\"start\\\")}),\\\"Ctrl-T\\\":h(function(t){t.execCommand(\\\"transposeChars\\\")}),\\\"Alt-C\\\":h(function(t){U(t,function(t){var e=t.search(/\\\\w/);return-1==e?t:t.slice(0,e)+t.charAt(e).toUpperCase()+t.slice(e+1).toLowerCase()})}),\\\"Alt-U\\\":h(function(t){U(t,function(t){return t.toUpperCase()})}),\\\"Alt-L\\\":h(function(t){U(t,function(t){return t.toLowerCase()})}),\\\"Alt-;\\\":\\\"toggleComment\\\",\\\"Ctrl-/\\\":h(\\\"undo\\\"),\\\"Shift-Ctrl--\\\":h(\\\"undo\\\"),\\\"Ctrl-Z\\\":h(\\\"undo\\\"),\\\"Cmd-Z\\\":h(\\\"undo\\\"),\\\"Shift-Alt-,\\\":\\\"goDocStart\\\",\\\"Shift-Alt-.\\\":\\\"goDocEnd\\\",\\\"Ctrl-S\\\":\\\"findPersistentNext\\\",\\\"Ctrl-R\\\":\\\"findPersistentPrev\\\",\\\"Ctrl-G\\\":function(t){t.execCommand(\\\"clearSearch\\\"),b(t)},\\\"Shift-Alt-5\\\":\\\"replace\\\",\\\"Alt-/\\\":\\\"autocomplete\\\",Enter:\\\"newlineAndIndent\\\",\\\"Ctrl-J\\\":h(function(t){t.replaceSelection(\\\"\\\\n\\\",\\\"end\\\")}),Tab:\\\"indentAuto\\\",\\\"Alt-G G\\\":function(t){var e,n,r,o=p(t,!0);if(null!=o&&o>0)return t.setCursor(o-1);n=\\\"Goto line\\\",r=function(e){var n;e&&!isNaN(n=Number(e))&&n==(0|n)&&n>0&&t.setCursor(n-1)},(e=t).openDialog?e.openDialog(n+': <input type=\\\"text\\\" style=\\\"width: 10em\\\"/>',r,{bottom:!0}):r(prompt(n,\\\"\\\"))},\\\"Ctrl-X Tab\\\":function(t){t.indentSelection(p(t,!0)||t.getOption(\\\"indentUnit\\\"))},\\\"Ctrl-X Ctrl-X\\\":function(t){t.setSelection(t.getCursor(\\\"head\\\"),t.getCursor(\\\"anchor\\\"))},\\\"Ctrl-X Ctrl-S\\\":\\\"save\\\",\\\"Ctrl-X Ctrl-W\\\":\\\"save\\\",\\\"Ctrl-X S\\\":\\\"saveAll\\\",\\\"Ctrl-X F\\\":\\\"open\\\",\\\"Ctrl-X U\\\":h(\\\"undo\\\"),\\\"Ctrl-X K\\\":\\\"close\\\",\\\"Ctrl-X Delete\\\":function(t){a(t,t.getCursor(),C(t,t.getCursor(),1),\\\"grow\\\")},\\\"Ctrl-X H\\\":\\\"selectAll\\\",\\\"Ctrl-Q Tab\\\":h(\\\"insertTab\\\"),\\\"Ctrl-U\\\":function(t){t.state.emacsPrefixMap=!0,t.addKeyMap(D),t.on(\\\"keyHandled\\\",y),t.on(\\\"inputRead\\\",y)}}),D={\\\"Ctrl-G\\\":L};function E(t){D[t]=function(e){P(e,t)},X[\\\"Ctrl-\\\"+t]=function(e){P(e,t)},w[\\\"Ctrl-\\\"+t]=!0}for(var H=0;H<10;++H)E(String(H));E(\\\"-\\\")});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/keymap/emacs.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-keymap-emacs/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-keymap-emacs/readme\",\n \"text\": \"This plugin adds a ''Keymap'' with some of the most important ''Emacs'' keyboard shortcuts\\n\\nFor more information about available ''keyboard shortcuts'' see the [ext[CodeMirror emacs demo|https://codemirror.net/demo/emacs.html]]\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-keymap-sublime-text":{"title":"$:/plugins/tiddlywiki/codemirror-keymap-sublime-text","name":"CodeMirror Keymap Sublime Text","description":"Keymap compatible with Sublime Text for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-search-replace $:/plugins/tiddlywiki/codemirror-closebrackets","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/codemirror/extraKeysTW\": {\n \"title\": \"$:/config/codemirror/extraKeysTW\",\n \"extend\": \"extraKeys\",\n \"type\": \"json\",\n \"text\": \"{\\n\\t\\\"Ctrl-M\\\": \\\"\\\",\\n\\t\\\"Alt-M\\\": \\\"goToBracket\\\",\\n\\t\\\"Ctrl-Enter\\\": \\\"\\\",\\n\\t\\\"Shift-Enter\\\": \\\"insertLineAfter\\\",\\n\\t\\\"Esc\\\": \\\"\\\",\\n\\t\\\"Ctrl-Esc\\\": \\\"singleSelectionTop\\\",\\n\\t\\\"Ctrl-L\\\": \\\"\\\",\\n\\t\\\"Shift-Ctrl-L\\\": \\\"\\\",\\n\\t\\\"Alt-L\\\": \\\"selectLine\\\",\\n\\t\\\"Shift-Alt-L\\\": \\\"splitSelectionByLine\\\",\\n\\t\\\"Ctrl-T\\\": \\\"\\\",\\n\\t\\\"Alt-T\\\": \\\"transposeChars\\\",\\n\\t\\\"Ctrl-K Ctrl-U\\\": \\\"\\\",\\n\\t\\\"Ctrl-K Ctrl-L\\\": \\\"\\\",\\n\\t\\\"Ctrl-K Ctrl-W\\\": \\\"\\\",\\n\\t\\\"Ctrl-K Alt-U\\\": \\\"upcaseAtCursor\\\",\\n\\t\\\"Ctrl-K Alt-L\\\": \\\"downcaseAtCursor\\\",\\n\\t\\\"Ctrl-K Alt-D\\\": \\\"deleteToSublimeMark\\\"\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/keymaps/sublime\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/keymaps/sublime\",\n \"module-type\": \"codemirror-keymap\",\n \"text\": \"sublime\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/keymap/sublime.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../lib/codemirror\\\"),require(\\\"../addon/search/searchcursor\\\"),require(\\\"../addon/edit/matchbrackets\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../lib/codemirror\\\",\\\"../addon/search/searchcursor\\\",\\\"../addon/edit/matchbrackets\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";var t=e.commands,n=e.Pos;function r(t,r){t.extendSelectionsBy(function(o){return t.display.shift||t.doc.extend||o.empty()?function(t,r,o){if(o<0&&0==r.ch)return t.clipPos(n(r.line-1));var i=t.getLine(r.line);if(o>0&&r.ch>=i.length)return t.clipPos(n(r.line+1,0));for(var l,a=\\\"start\\\",s=r.ch,c=o<0?0:i.length,f=0;s!=c;s+=o,f++){var u=i.charAt(o<0?s-1:s),d=\\\"_\\\"!=u&&e.isWordChar(u)?\\\"w\\\":\\\"o\\\";if(\\\"w\\\"==d&&u.toUpperCase()==u&&(d=\\\"W\\\"),\\\"start\\\"==a)\\\"o\\\"!=d&&(a=\\\"in\\\",l=d);else if(\\\"in\\\"==a&&l!=d){if(\\\"w\\\"==l&&\\\"W\\\"==d&&o<0&&s--,\\\"W\\\"==l&&\\\"w\\\"==d&&o>0){l=\\\"w\\\";continue}break}}return n(r.line,s)}(t.doc,o.head,r):r<0?o.from():o.to()})}function o(t,r){if(t.isReadOnly())return e.Pass;t.operation(function(){for(var e=t.listSelections().length,o=[],i=-1,l=0;l<e;l++){var a=t.listSelections()[l].head;if(!(a.line<=i)){var s=n(a.line+(r?0:1),0);t.replaceRange(\\\"\\\\n\\\",s,null,\\\"+insertLine\\\"),t.indentLine(s.line,null,!0),o.push({head:s,anchor:s}),i=a.line+1}}t.setSelections(o)}),t.execCommand(\\\"indentAuto\\\")}function i(t,r){for(var o=r.ch,i=o,l=t.getLine(r.line);o&&e.isWordChar(l.charAt(o-1));)--o;for(;i<l.length&&e.isWordChar(l.charAt(i));)++i;return{from:n(r.line,o),to:n(r.line,i),word:l.slice(o,i)}}function l(e,t){for(var n=e.listSelections(),r=[],o=0;o<n.length;o++){var i=n[o],l=e.findPosV(i.anchor,t,\\\"line\\\",i.anchor.goalColumn),a=e.findPosV(i.head,t,\\\"line\\\",i.head.goalColumn);l.goalColumn=null!=i.anchor.goalColumn?i.anchor.goalColumn:e.cursorCoords(i.anchor,\\\"div\\\").left,a.goalColumn=null!=i.head.goalColumn?i.head.goalColumn:e.cursorCoords(i.head,\\\"div\\\").left;var s={anchor:l,head:a};r.push(i),r.push(s)}e.setSelections(r)}t.goSubwordLeft=function(e){r(e,-1)},t.goSubwordRight=function(e){r(e,1)},t.scrollLineUp=function(e){var t=e.getScrollInfo();if(!e.somethingSelected()){var n=e.lineAtHeight(t.top+t.clientHeight,\\\"local\\\");e.getCursor().line>=n&&e.execCommand(\\\"goLineUp\\\")}e.scrollTo(null,t.top-e.defaultTextHeight())},t.scrollLineDown=function(e){var t=e.getScrollInfo();if(!e.somethingSelected()){var n=e.lineAtHeight(t.top,\\\"local\\\")+1;e.getCursor().line<=n&&e.execCommand(\\\"goLineDown\\\")}e.scrollTo(null,t.top+e.defaultTextHeight())},t.splitSelectionByLine=function(e){for(var t=e.listSelections(),r=[],o=0;o<t.length;o++)for(var i=t[o].from(),l=t[o].to(),a=i.line;a<=l.line;++a)l.line>i.line&&a==l.line&&0==l.ch||r.push({anchor:a==i.line?i:n(a,0),head:a==l.line?l:n(a)});e.setSelections(r,0)},t.singleSelectionTop=function(e){var t=e.listSelections()[0];e.setSelection(t.anchor,t.head,{scroll:!1})},t.selectLine=function(e){for(var t=e.listSelections(),r=[],o=0;o<t.length;o++){var i=t[o];r.push({anchor:n(i.from().line,0),head:n(i.to().line+1,0)})}e.setSelections(r)},t.insertLineAfter=function(e){return o(e,!1)},t.insertLineBefore=function(e){return o(e,!0)},t.selectNextOccurrence=function(t){var r=t.getCursor(\\\"from\\\"),o=t.getCursor(\\\"to\\\"),l=t.state.sublimeFindFullWord==t.doc.sel;if(0==e.cmpPos(r,o)){var a=i(t,r);if(!a.word)return;t.setSelection(a.from,a.to),l=!0}else{var s=t.getRange(r,o),c=l?new RegExp(\\\"\\\\\\\\b\\\"+s+\\\"\\\\\\\\b\\\"):s,f=t.getSearchCursor(c,o),u=f.findNext();if(u||(u=(f=t.getSearchCursor(c,n(t.firstLine(),0))).findNext()),!u||function(e,t,n){for(var r=0;r<e.length;r++)if(e[r].from()==t&&e[r].to()==n)return!0;return!1}(t.listSelections(),f.from(),f.to()))return e.Pass;t.addSelection(f.from(),f.to())}l&&(t.state.sublimeFindFullWord=t.doc.sel)},t.addCursorToPrevLine=function(e){l(e,-1)},t.addCursorToNextLine=function(e){l(e,1)};var a=\\\"(){}[]\\\";function s(t){for(var r=t.listSelections(),o=[],i=0;i<r.length;i++){var l=r[i],s=l.head,c=t.scanForBracket(s,-1);if(!c)return!1;for(;;){var f=t.scanForBracket(s,1);if(!f)return!1;if(f.ch==a.charAt(a.indexOf(c.ch)+1)){var u=n(c.pos.line,c.pos.ch+1);if(0!=e.cmpPos(u,l.from())||0!=e.cmpPos(f.pos,l.to())){o.push({anchor:u,head:f.pos});break}if(!(c=t.scanForBracket(c.pos,-1)))return!1}s=n(f.pos.line,f.pos.ch+1)}}return t.setSelections(o),!0}function c(t,r){if(t.isReadOnly())return e.Pass;for(var o,i=t.listSelections(),l=[],a=0;a<i.length;a++){var s=i[a];if(!s.empty()){for(var c=s.from().line,f=s.to().line;a<i.length-1&&i[a+1].from().line==f;)f=i[++a].to().line;i[a].to().ch||f--,l.push(c,f)}}l.length?o=!0:l.push(t.firstLine(),t.lastLine()),t.operation(function(){for(var e=[],i=0;i<l.length;i+=2){var a=l[i],s=l[i+1],c=n(a,0),f=n(s),u=t.getRange(c,f,!1);r?u.sort():u.sort(function(e,t){var n=e.toUpperCase(),r=t.toUpperCase();return n!=r&&(e=n,t=r),e<t?-1:e==t?0:1}),t.replaceRange(u,c,f),o&&e.push({anchor:c,head:n(s+1,0)})}o&&t.setSelections(e,0)})}function f(t,n){t.operation(function(){for(var r=t.listSelections(),o=[],l=[],a=0;a<r.length;a++){(c=r[a]).empty()?(o.push(a),l.push(\\\"\\\")):l.push(n(t.getRange(c.from(),c.to())))}t.replaceSelections(l,\\\"around\\\",\\\"case\\\");var s;for(a=o.length-1;a>=0;a--){var c=r[o[a]];if(!(s&&e.cmpPos(c.head,s)>0)){var f=i(t,c.head);s=f.from,t.replaceRange(n(f.word),f.from,f.to)}}})}function u(t){var n=t.getCursor(\\\"from\\\"),r=t.getCursor(\\\"to\\\");if(0==e.cmpPos(n,r)){var o=i(t,n);if(!o.word)return;n=o.from,r=o.to}return{from:n,to:r,query:t.getRange(n,r),word:o}}function d(e,t){var r=u(e);if(r){var o=r.query,i=e.getSearchCursor(o,t?r.to:r.from);(t?i.findNext():i.findPrevious())?e.setSelection(i.from(),i.to()):(i=e.getSearchCursor(o,t?n(e.firstLine(),0):e.clipPos(n(e.lastLine()))),(t?i.findNext():i.findPrevious())?e.setSelection(i.from(),i.to()):r.word&&e.setSelection(r.from,r.to))}}t.selectScope=function(e){s(e)||e.execCommand(\\\"selectAll\\\")},t.selectBetweenBrackets=function(t){if(!s(t))return e.Pass},t.goToBracket=function(t){t.extendSelectionsBy(function(r){var o=t.scanForBracket(r.head,1);if(o&&0!=e.cmpPos(o.pos,r.head))return o.pos;var i=t.scanForBracket(r.head,-1);return i&&n(i.pos.line,i.pos.ch+1)||r.head})},t.swapLineUp=function(t){if(t.isReadOnly())return e.Pass;for(var r=t.listSelections(),o=[],i=t.firstLine()-1,l=[],a=0;a<r.length;a++){var s=r[a],c=s.from().line-1,f=s.to().line;l.push({anchor:n(s.anchor.line-1,s.anchor.ch),head:n(s.head.line-1,s.head.ch)}),0!=s.to().ch||s.empty()||--f,c>i?o.push(c,f):o.length&&(o[o.length-1]=f),i=f}t.operation(function(){for(var e=0;e<o.length;e+=2){var r=o[e],i=o[e+1],a=t.getLine(r);t.replaceRange(\\\"\\\",n(r,0),n(r+1,0),\\\"+swapLine\\\"),i>t.lastLine()?t.replaceRange(\\\"\\\\n\\\"+a,n(t.lastLine()),null,\\\"+swapLine\\\"):t.replaceRange(a+\\\"\\\\n\\\",n(i,0),null,\\\"+swapLine\\\")}t.setSelections(l),t.scrollIntoView()})},t.swapLineDown=function(t){if(t.isReadOnly())return e.Pass;for(var r=t.listSelections(),o=[],i=t.lastLine()+1,l=r.length-1;l>=0;l--){var a=r[l],s=a.to().line+1,c=a.from().line;0!=a.to().ch||a.empty()||s--,s<i?o.push(s,c):o.length&&(o[o.length-1]=c),i=c}t.operation(function(){for(var e=o.length-2;e>=0;e-=2){var r=o[e],i=o[e+1],l=t.getLine(r);r==t.lastLine()?t.replaceRange(\\\"\\\",n(r-1),n(r),\\\"+swapLine\\\"):t.replaceRange(\\\"\\\",n(r,0),n(r+1,0),\\\"+swapLine\\\"),t.replaceRange(l+\\\"\\\\n\\\",n(i,0),null,\\\"+swapLine\\\")}t.scrollIntoView()})},t.toggleCommentIndented=function(e){e.toggleComment({indent:!0})},t.joinLines=function(e){for(var t=e.listSelections(),r=[],o=0;o<t.length;o++){for(var i=t[o],l=i.from(),a=l.line,s=i.to().line;o<t.length-1&&t[o+1].from().line==s;)s=t[++o].to().line;r.push({start:a,end:s,anchor:!i.empty()&&l})}e.operation(function(){for(var t=0,o=[],i=0;i<r.length;i++){for(var l,a=r[i],s=a.anchor&&n(a.anchor.line-t,a.anchor.ch),c=a.start;c<=a.end;c++){var f=c-t;c==a.end&&(l=n(f,e.getLine(f).length+1)),f<e.lastLine()&&(e.replaceRange(\\\" \\\",n(f),n(f+1,/^\\\\s*/.exec(e.getLine(f+1))[0].length)),++t)}o.push({anchor:s||l,head:l})}e.setSelections(o,0)})},t.duplicateLine=function(e){e.operation(function(){for(var t=e.listSelections().length,r=0;r<t;r++){var o=e.listSelections()[r];o.empty()?e.replaceRange(e.getLine(o.head.line)+\\\"\\\\n\\\",n(o.head.line,0)):e.replaceRange(e.getRange(o.from(),o.to()),o.from())}e.scrollIntoView()})},t.sortLines=function(e){c(e,!0)},t.sortLinesInsensitive=function(e){c(e,!1)},t.nextBookmark=function(e){var t=e.state.sublimeBookmarks;if(t)for(;t.length;){var n=t.shift(),r=n.find();if(r)return t.push(n),e.setSelection(r.from,r.to)}},t.prevBookmark=function(e){var t=e.state.sublimeBookmarks;if(t)for(;t.length;){t.unshift(t.pop());var n=t[t.length-1].find();if(n)return e.setSelection(n.from,n.to);t.pop()}},t.toggleBookmark=function(e){for(var t=e.listSelections(),n=e.state.sublimeBookmarks||(e.state.sublimeBookmarks=[]),r=0;r<t.length;r++){for(var o=t[r].from(),i=t[r].to(),l=t[r].empty()?e.findMarksAt(o):e.findMarks(o,i),a=0;a<l.length;a++)if(l[a].sublimeBookmark){l[a].clear();for(var s=0;s<n.length;s++)n[s]==l[a]&&n.splice(s--,1);break}a==l.length&&n.push(e.markText(o,i,{sublimeBookmark:!0,clearWhenEmpty:!1}))}},t.clearBookmarks=function(e){var t=e.state.sublimeBookmarks;if(t)for(var n=0;n<t.length;n++)t[n].clear();t.length=0},t.selectBookmarks=function(e){var t=e.state.sublimeBookmarks,n=[];if(t)for(var r=0;r<t.length;r++){var o=t[r].find();o?n.push({anchor:o.from,head:o.to}):t.splice(r--,0)}n.length&&e.setSelections(n,0)},t.smartBackspace=function(t){if(t.somethingSelected())return e.Pass;t.operation(function(){for(var r=t.listSelections(),o=t.getOption(\\\"indentUnit\\\"),i=r.length-1;i>=0;i--){var l=r[i].head,a=t.getRange({line:l.line,ch:0},l),s=e.countColumn(a,null,t.getOption(\\\"tabSize\\\")),c=t.findPosH(l,-1,\\\"char\\\",!1);if(a&&!/\\\\S/.test(a)&&s%o==0){var f=new n(l.line,e.findColumn(a,s-o,o));f.ch!=l.ch&&(c=f)}t.replaceRange(\\\"\\\",c,l,\\\"+delete\\\")}})},t.delLineRight=function(e){e.operation(function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(\\\"\\\",t[r].anchor,n(t[r].to().line),\\\"+delete\\\");e.scrollIntoView()})},t.upcaseAtCursor=function(e){f(e,function(e){return e.toUpperCase()})},t.downcaseAtCursor=function(e){f(e,function(e){return e.toLowerCase()})},t.setSublimeMark=function(e){e.state.sublimeMark&&e.state.sublimeMark.clear(),e.state.sublimeMark=e.setBookmark(e.getCursor())},t.selectToSublimeMark=function(e){var t=e.state.sublimeMark&&e.state.sublimeMark.find();t&&e.setSelection(e.getCursor(),t)},t.deleteToSublimeMark=function(t){var n=t.state.sublimeMark&&t.state.sublimeMark.find();if(n){var r=t.getCursor(),o=n;if(e.cmpPos(r,o)>0){var i=o;o=r,r=i}t.state.sublimeKilled=t.getRange(r,o),t.replaceRange(\\\"\\\",r,o)}},t.swapWithSublimeMark=function(e){var t=e.state.sublimeMark&&e.state.sublimeMark.find();t&&(e.state.sublimeMark.clear(),e.state.sublimeMark=e.setBookmark(e.getCursor()),e.setCursor(t))},t.sublimeYank=function(e){null!=e.state.sublimeKilled&&e.replaceSelection(e.state.sublimeKilled,null,\\\"paste\\\")},t.showInCenter=function(e){var t=e.cursorCoords(null,\\\"local\\\");e.scrollTo(null,(t.top+t.bottom)/2-e.getScrollInfo().clientHeight/2)},t.findUnder=function(e){d(e,!0)},t.findUnderPrevious=function(e){d(e,!1)},t.findAllUnder=function(e){var t=u(e);if(t){for(var n=e.getSearchCursor(t.query),r=[],o=-1;n.findNext();)r.push({anchor:n.from(),head:n.to()}),n.from().line<=t.from.line&&n.from().ch<=t.from.ch&&o++;e.setSelections(r,o)}};var m=e.keyMap;m.macSublime={\\\"Cmd-Left\\\":\\\"goLineStartSmart\\\",\\\"Shift-Tab\\\":\\\"indentLess\\\",\\\"Shift-Ctrl-K\\\":\\\"deleteLine\\\",\\\"Alt-Q\\\":\\\"wrapLines\\\",\\\"Ctrl-Left\\\":\\\"goSubwordLeft\\\",\\\"Ctrl-Right\\\":\\\"goSubwordRight\\\",\\\"Ctrl-Alt-Up\\\":\\\"scrollLineUp\\\",\\\"Ctrl-Alt-Down\\\":\\\"scrollLineDown\\\",\\\"Cmd-L\\\":\\\"selectLine\\\",\\\"Shift-Cmd-L\\\":\\\"splitSelectionByLine\\\",Esc:\\\"singleSelectionTop\\\",\\\"Cmd-Enter\\\":\\\"insertLineAfter\\\",\\\"Shift-Cmd-Enter\\\":\\\"insertLineBefore\\\",\\\"Cmd-D\\\":\\\"selectNextOccurrence\\\",\\\"Shift-Cmd-Space\\\":\\\"selectScope\\\",\\\"Shift-Cmd-M\\\":\\\"selectBetweenBrackets\\\",\\\"Cmd-M\\\":\\\"goToBracket\\\",\\\"Cmd-Ctrl-Up\\\":\\\"swapLineUp\\\",\\\"Cmd-Ctrl-Down\\\":\\\"swapLineDown\\\",\\\"Cmd-/\\\":\\\"toggleCommentIndented\\\",\\\"Cmd-J\\\":\\\"joinLines\\\",\\\"Shift-Cmd-D\\\":\\\"duplicateLine\\\",F9:\\\"sortLines\\\",\\\"Cmd-F9\\\":\\\"sortLinesInsensitive\\\",F2:\\\"nextBookmark\\\",\\\"Shift-F2\\\":\\\"prevBookmark\\\",\\\"Cmd-F2\\\":\\\"toggleBookmark\\\",\\\"Shift-Cmd-F2\\\":\\\"clearBookmarks\\\",\\\"Alt-F2\\\":\\\"selectBookmarks\\\",Backspace:\\\"smartBackspace\\\",\\\"Cmd-K Cmd-K\\\":\\\"delLineRight\\\",\\\"Cmd-K Cmd-U\\\":\\\"upcaseAtCursor\\\",\\\"Cmd-K Cmd-L\\\":\\\"downcaseAtCursor\\\",\\\"Cmd-K Cmd-Space\\\":\\\"setSublimeMark\\\",\\\"Cmd-K Cmd-A\\\":\\\"selectToSublimeMark\\\",\\\"Cmd-K Cmd-W\\\":\\\"deleteToSublimeMark\\\",\\\"Cmd-K Cmd-X\\\":\\\"swapWithSublimeMark\\\",\\\"Cmd-K Cmd-Y\\\":\\\"sublimeYank\\\",\\\"Cmd-K Cmd-C\\\":\\\"showInCenter\\\",\\\"Cmd-K Cmd-G\\\":\\\"clearBookmarks\\\",\\\"Cmd-K Cmd-Backspace\\\":\\\"delLineLeft\\\",\\\"Cmd-K Cmd-0\\\":\\\"unfoldAll\\\",\\\"Cmd-K Cmd-J\\\":\\\"unfoldAll\\\",\\\"Ctrl-Shift-Up\\\":\\\"addCursorToPrevLine\\\",\\\"Ctrl-Shift-Down\\\":\\\"addCursorToNextLine\\\",\\\"Cmd-F3\\\":\\\"findUnder\\\",\\\"Shift-Cmd-F3\\\":\\\"findUnderPrevious\\\",\\\"Alt-F3\\\":\\\"findAllUnder\\\",\\\"Shift-Cmd-[\\\":\\\"fold\\\",\\\"Shift-Cmd-]\\\":\\\"unfold\\\",\\\"Cmd-I\\\":\\\"findIncremental\\\",\\\"Shift-Cmd-I\\\":\\\"findIncrementalReverse\\\",\\\"Cmd-H\\\":\\\"replace\\\",F3:\\\"findNext\\\",\\\"Shift-F3\\\":\\\"findPrev\\\",fallthrough:\\\"macDefault\\\"},e.normalizeKeyMap(m.macSublime),m.pcSublime={\\\"Shift-Tab\\\":\\\"indentLess\\\",\\\"Shift-Ctrl-K\\\":\\\"deleteLine\\\",\\\"Alt-Q\\\":\\\"wrapLines\\\",\\\"Ctrl-T\\\":\\\"transposeChars\\\",\\\"Alt-Left\\\":\\\"goSubwordLeft\\\",\\\"Alt-Right\\\":\\\"goSubwordRight\\\",\\\"Ctrl-Up\\\":\\\"scrollLineUp\\\",\\\"Ctrl-Down\\\":\\\"scrollLineDown\\\",\\\"Ctrl-L\\\":\\\"selectLine\\\",\\\"Shift-Ctrl-L\\\":\\\"splitSelectionByLine\\\",Esc:\\\"singleSelectionTop\\\",\\\"Ctrl-Enter\\\":\\\"insertLineAfter\\\",\\\"Shift-Ctrl-Enter\\\":\\\"insertLineBefore\\\",\\\"Ctrl-D\\\":\\\"selectNextOccurrence\\\",\\\"Shift-Ctrl-Space\\\":\\\"selectScope\\\",\\\"Shift-Ctrl-M\\\":\\\"selectBetweenBrackets\\\",\\\"Ctrl-M\\\":\\\"goToBracket\\\",\\\"Shift-Ctrl-Up\\\":\\\"swapLineUp\\\",\\\"Shift-Ctrl-Down\\\":\\\"swapLineDown\\\",\\\"Ctrl-/\\\":\\\"toggleCommentIndented\\\",\\\"Ctrl-J\\\":\\\"joinLines\\\",\\\"Shift-Ctrl-D\\\":\\\"duplicateLine\\\",F9:\\\"sortLines\\\",\\\"Ctrl-F9\\\":\\\"sortLinesInsensitive\\\",F2:\\\"nextBookmark\\\",\\\"Shift-F2\\\":\\\"prevBookmark\\\",\\\"Ctrl-F2\\\":\\\"toggleBookmark\\\",\\\"Shift-Ctrl-F2\\\":\\\"clearBookmarks\\\",\\\"Alt-F2\\\":\\\"selectBookmarks\\\",Backspace:\\\"smartBackspace\\\",\\\"Ctrl-K Ctrl-K\\\":\\\"delLineRight\\\",\\\"Ctrl-K Ctrl-U\\\":\\\"upcaseAtCursor\\\",\\\"Ctrl-K Ctrl-L\\\":\\\"downcaseAtCursor\\\",\\\"Ctrl-K Ctrl-Space\\\":\\\"setSublimeMark\\\",\\\"Ctrl-K Ctrl-A\\\":\\\"selectToSublimeMark\\\",\\\"Ctrl-K Ctrl-W\\\":\\\"deleteToSublimeMark\\\",\\\"Ctrl-K Ctrl-X\\\":\\\"swapWithSublimeMark\\\",\\\"Ctrl-K Ctrl-Y\\\":\\\"sublimeYank\\\",\\\"Ctrl-K Ctrl-C\\\":\\\"showInCenter\\\",\\\"Ctrl-K Ctrl-G\\\":\\\"clearBookmarks\\\",\\\"Ctrl-K Ctrl-Backspace\\\":\\\"delLineLeft\\\",\\\"Ctrl-K Ctrl-0\\\":\\\"unfoldAll\\\",\\\"Ctrl-K Ctrl-J\\\":\\\"unfoldAll\\\",\\\"Ctrl-Alt-Up\\\":\\\"addCursorToPrevLine\\\",\\\"Ctrl-Alt-Down\\\":\\\"addCursorToNextLine\\\",\\\"Ctrl-F3\\\":\\\"findUnder\\\",\\\"Shift-Ctrl-F3\\\":\\\"findUnderPrevious\\\",\\\"Alt-F3\\\":\\\"findAllUnder\\\",\\\"Shift-Ctrl-[\\\":\\\"fold\\\",\\\"Shift-Ctrl-]\\\":\\\"unfold\\\",\\\"Ctrl-I\\\":\\\"findIncremental\\\",\\\"Shift-Ctrl-I\\\":\\\"findIncrementalReverse\\\",\\\"Ctrl-H\\\":\\\"replace\\\",F3:\\\"findNext\\\",\\\"Shift-F3\\\":\\\"findPrev\\\",fallthrough:\\\"pcDefault\\\"},e.normalizeKeyMap(m.pcSublime);var h=m.default==m.macDefault;m.sublime=h?m.macSublime:m.pcSublime});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/keymap/sublime.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addons/comment/comment.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";var y={},E=/[^\\\\s\\\\u00a0]/,M=e.Pos;function s(e){var n=e.search(E);return-1==n?0:n}function S(e,n){var t=e.getMode();return!1!==t.useInnerComments&&t.innerMode?e.getModeAt(n):t}e.commands.toggleComment=function(e){e.toggleComment()},e.defineExtension(\\\"toggleComment\\\",function(e){e=e||y;for(var n=this,t=1/0,i=this.listSelections(),l=null,o=i.length-1;0<=o;o--){var r=i[o].from(),m=i[o].to();r.line>=t||(m.line>=t&&(m=M(t,0)),t=r.line,null==l?l=n.uncomment(r,m,e)?\\\"un\\\":(n.lineComment(r,m,e),\\\"line\\\"):\\\"un\\\"==l?n.uncomment(r,m,e):n.lineComment(r,m,e))}}),e.defineExtension(\\\"lineComment\\\",function(o,e,r){r=r||y;var n,t,m,a,c,g,f=this,i=S(f,o),l=f.getLine(o.line);null!=l&&(n=o,t=l,!/\\\\bstring\\\\b/.test(f.getTokenTypeAt(M(n.line,0)))||/^[\\\\'\\\\\\\"\\\\`]/.test(t))&&((m=r.lineComment||i.lineComment)?(a=Math.min(0!=e.ch||e.line==o.line?e.line+1:e.line,f.lastLine()+1),c=null==r.padding?\\\" \\\":r.padding,g=r.commentBlankLines||o.line==e.line,f.operation(function(){if(r.indent){for(var e=null,n=o.line;n<a;++n){var t=(i=f.getLine(n)).slice(0,s(i));(null==e||e.length>t.length)&&(e=t)}for(n=o.line;n<a;++n){var i=f.getLine(n),l=e.length;(g||E.test(i))&&(i.slice(0,l)!=e&&(l=s(i)),f.replaceRange(e+m+c,M(n,0),M(n,l)))}}else for(n=o.line;n<a;++n)(g||E.test(f.getLine(n)))&&f.replaceRange(m+c,M(n,0))})):(r.blockCommentStart||i.blockCommentStart)&&(r.fullLines=!0,f.blockComment(o,e,r)))}),e.defineExtension(\\\"blockComment\\\",function(i,l,o){o=o||y;var r,m,a=this,c=S(a,i),g=o.blockCommentStart||c.blockCommentStart,f=o.blockCommentEnd||c.blockCommentEnd;g&&f?/\\\\bcomment\\\\b/.test(a.getTokenTypeAt(M(i.line,0)))||((r=Math.min(l.line,a.lastLine()))!=i.line&&0==l.ch&&E.test(a.getLine(r))&&--r,m=null==o.padding?\\\" \\\":o.padding,i.line>r||a.operation(function(){if(0!=o.fullLines){var e=E.test(a.getLine(r));a.replaceRange(m+f,M(r)),a.replaceRange(g+m,M(i.line,0));var n=o.blockCommentLead||c.blockCommentLead;if(null!=n)for(var t=i.line+1;t<=r;++t)t==r&&!e||a.replaceRange(n+m,M(t,0))}else a.replaceRange(f,l),a.replaceRange(g,i)})):(o.lineComment||c.lineComment)&&0!=o.fullLines&&a.lineComment(i,l,o)}),e.defineExtension(\\\"uncomment\\\",function(e,n,t){t=t||y;var l,o=this,i=S(o,e),r=Math.min(0!=n.ch||n.line==e.line?n.line:n.line-1,o.lastLine()),m=Math.min(e.line,r),a=t.lineComment||i.lineComment,c=[],g=null==t.padding?\\\" \\\":t.padding;e:if(a){for(var f=m;f<=r;++f){var s=o.getLine(f),d=s.indexOf(a);if(-1<d&&!/comment/.test(o.getTokenTypeAt(M(f,d+1)))&&(d=-1),-1==d&&E.test(s))break e;if(-1<d&&E.test(s.slice(0,d)))break e;c.push(s)}if(o.operation(function(){for(var e=m;e<=r;++e){var n=c[e-m],t=n.indexOf(a),i=t+a.length;t<0||(n.slice(i,i+g.length)==g&&(i+=g.length),l=!0,o.replaceRange(\\\"\\\",M(e,t),M(e,i)))}}),l)return!0}var u=t.blockCommentStart||i.blockCommentStart,h=t.blockCommentEnd||i.blockCommentEnd;if(!u||!h)return!1;var p=t.blockCommentLead||i.blockCommentLead,C=o.getLine(m),b=C.indexOf(u);if(-1==b)return!1;var v=r==m?C:o.getLine(r),k=v.indexOf(h,r==m?b+u.length:0),L=M(m,b+1),x=M(r,k+1);if(-1==k||!/comment/.test(o.getTokenTypeAt(L))||!/comment/.test(o.getTokenTypeAt(x))||-1<o.getRange(L,x,\\\"\\\\n\\\").indexOf(h))return!1;var R=-1==(T=C.lastIndexOf(u,e.ch))?-1:C.slice(0,e.ch).indexOf(h,T+u.length);if(-1!=T&&-1!=R&&R+h.length!=e.ch)return!1;R=v.indexOf(h,n.ch);var O=v.slice(n.ch).lastIndexOf(u,R-n.ch),T=-1==R||-1==O?-1:n.ch+O;return(-1==R||-1==T||T==n.ch)&&(o.operation(function(){o.replaceRange(\\\"\\\",M(r,k-(g&&v.slice(k-g.length,k)==g?g.length:0)),M(r,k+h.length));var e=b+u.length;if(g&&C.slice(e,e+g.length)==g&&(e+=g.length),o.replaceRange(\\\"\\\",M(m,b),M(m,e)),p)for(var n=m+1;n<=r;++n){var t,i=o.getLine(n),l=i.indexOf(p);-1==l||E.test(i.slice(0,l))||(t=l+p.length,g&&i.slice(t,t+g.length)==g&&(t+=g.length),o.replaceRange(\\\"\\\",M(n,l),M(n,t)))}}),!0)})});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addons/comment/comment.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-keymap-sublime-text/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-keymap-sublime-text/readme\",\n \"text\": \"This plugin adds a ''Keymap'' with the most important ''Sublime Text'' keyboard shortcuts\\n\\nShortcuts that interfere with ~TiddlyWiki shortcuts differ from the original sublime shortcuts to preserve functionality\\n\\n\\n|Shortcut |Function |h\\n|Shift-Tab |indentLess |\\n|Shift-Ctrl-K |deleteLine |\\n|Alt-Q |wrapLines |\\n|Alt-T |transposeChars |\\n|Alt-Left |goSubwordLeft |\\n|Alt-Right |goSubwordRight |\\n|Ctrl-Up |scrollLineUp |\\n|Ctrl-Down |scrollLineDown |\\n|Alt-L |selectLine |\\n|Shift-Alt-L |splitSelectionByLine |\\n|Ctrl-Esc |singleSelectionTop |\\n|Shift-Enter |insertLineAfter |\\n|Shift-Ctrl-Enter |insertLineBefore |\\n|Ctrl-D |selectNextOccurrence |\\n|Shift-Ctrl-Space |selectScope |\\n|Shift-Ctrl-M |selectBetweenBrackets |\\n|Alt-M |goToBracket |\\n|Shift-Ctrl-Up |swapLineUp |\\n|Shift-Ctrl-Down |swapLineDown |\\n|Ctrl-/ |toggleCommentIndented |\\n|Ctrl-J |joinLines |\\n|Shift-Ctrl-D |duplicateLine |\\n|F9 |sortLines |\\n|Ctrl-F9 |sortLinesInsensitive |\\n|F2 |nextBookmark |\\n|Shift-F2 |prevBookmark |\\n|Ctrl-F2 |toggleBookmark |\\n|Shift-Ctrl-F2 |clearBookmarks |\\n|Alt-F2 |selectBookmarks |\\n|Backspace |smartBackspace |\\n|Ctrl-K Ctrl-K |delLineRight |\\n|Ctrl-K Alt-U |upcaseAtCursor |\\n|Ctrl-K Alt-L |downcaseAtCursor |\\n|Ctrl-K Ctrl-Space |setSublimeMark |\\n|Ctrl-K Ctrl-A |selectToSublimeMark |\\n|Ctrl-K Alt-D |deleteToSublimeMark |\\n|Ctrl-K Ctrl-X |swapWithSublimeMark |\\n|Ctrl-K Ctrl-Y |sublimeYank |\\n|Ctrl-K Ctrl-C |showInCenter |\\n|Ctrl-K Ctrl-G |clearBookmarks |\\n|Ctrl-K Ctrl-Backspace |delLineLeft |\\n|Ctrl-K Ctrl-0 |unfoldAll |\\n|Ctrl-K Ctrl-J |unfoldAll |\\n|Ctrl-Alt-Up |addCursorToPrevLine |\\n|Ctrl-Alt-Down |addCursorToNextLine |\\n|Ctrl-F3 |findUnder |\\n|Shift-Ctrl-F3 |findUnderPrevious |\\n|Shift-Ctrl-[ |fold |\\n|Shift-Ctrl-] |unfold |\\n|Ctrl-H |replace |\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-keymap-vim":{"title":"$:/plugins/tiddlywiki/codemirror-keymap-vim","name":"CodeMirror Keymap Vim","description":"Keymap compatible with Vim for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-search-replace $:/plugins/tiddlywiki/codemirror-closebrackets","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/keymaps/vim\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror/keymaps/vim\",\n \"module-type\": \"codemirror-keymap\",\n \"text\": \"vim\\n\"\n },\n \"$:/plugins/tiddlywiki/codemirror/keymap/vim.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../lib/codemirror\\\"),require(\\\"../addon/search/searchcursor\\\"),require(\\\"../addon/dialog/dialog\\\"),require(\\\"../addon/edit/matchbrackets.js\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../lib/codemirror\\\",\\\"../addon/search/searchcursor\\\",\\\"../addon/dialog/dialog\\\",\\\"../addon/edit/matchbrackets\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";var t=[{keys:\\\"<Left>\\\",type:\\\"keyToKey\\\",toKeys:\\\"h\\\"},{keys:\\\"<Right>\\\",type:\\\"keyToKey\\\",toKeys:\\\"l\\\"},{keys:\\\"<Up>\\\",type:\\\"keyToKey\\\",toKeys:\\\"k\\\"},{keys:\\\"<Down>\\\",type:\\\"keyToKey\\\",toKeys:\\\"j\\\"},{keys:\\\"<Space>\\\",type:\\\"keyToKey\\\",toKeys:\\\"l\\\"},{keys:\\\"<BS>\\\",type:\\\"keyToKey\\\",toKeys:\\\"h\\\",context:\\\"normal\\\"},{keys:\\\"<C-Space>\\\",type:\\\"keyToKey\\\",toKeys:\\\"W\\\"},{keys:\\\"<C-BS>\\\",type:\\\"keyToKey\\\",toKeys:\\\"B\\\",context:\\\"normal\\\"},{keys:\\\"<S-Space>\\\",type:\\\"keyToKey\\\",toKeys:\\\"w\\\"},{keys:\\\"<S-BS>\\\",type:\\\"keyToKey\\\",toKeys:\\\"b\\\",context:\\\"normal\\\"},{keys:\\\"<C-n>\\\",type:\\\"keyToKey\\\",toKeys:\\\"j\\\"},{keys:\\\"<C-p>\\\",type:\\\"keyToKey\\\",toKeys:\\\"k\\\"},{keys:\\\"<C-[>\\\",type:\\\"keyToKey\\\",toKeys:\\\"<Esc>\\\"},{keys:\\\"<C-c>\\\",type:\\\"keyToKey\\\",toKeys:\\\"<Esc>\\\"},{keys:\\\"<C-[>\\\",type:\\\"keyToKey\\\",toKeys:\\\"<Esc>\\\",context:\\\"insert\\\"},{keys:\\\"<C-c>\\\",type:\\\"keyToKey\\\",toKeys:\\\"<Esc>\\\",context:\\\"insert\\\"},{keys:\\\"s\\\",type:\\\"keyToKey\\\",toKeys:\\\"cl\\\",context:\\\"normal\\\"},{keys:\\\"s\\\",type:\\\"keyToKey\\\",toKeys:\\\"c\\\",context:\\\"visual\\\"},{keys:\\\"S\\\",type:\\\"keyToKey\\\",toKeys:\\\"cc\\\",context:\\\"normal\\\"},{keys:\\\"S\\\",type:\\\"keyToKey\\\",toKeys:\\\"VdO\\\",context:\\\"visual\\\"},{keys:\\\"<Home>\\\",type:\\\"keyToKey\\\",toKeys:\\\"0\\\"},{keys:\\\"<End>\\\",type:\\\"keyToKey\\\",toKeys:\\\"$\\\"},{keys:\\\"<PageUp>\\\",type:\\\"keyToKey\\\",toKeys:\\\"<C-b>\\\"},{keys:\\\"<PageDown>\\\",type:\\\"keyToKey\\\",toKeys:\\\"<C-f>\\\"},{keys:\\\"<CR>\\\",type:\\\"keyToKey\\\",toKeys:\\\"j^\\\",context:\\\"normal\\\"},{keys:\\\"<Ins>\\\",type:\\\"action\\\",action:\\\"toggleOverwrite\\\",context:\\\"insert\\\"},{keys:\\\"H\\\",type:\\\"motion\\\",motion:\\\"moveToTopLine\\\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\"M\\\",type:\\\"motion\\\",motion:\\\"moveToMiddleLine\\\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\"L\\\",type:\\\"motion\\\",motion:\\\"moveToBottomLine\\\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\"h\\\",type:\\\"motion\\\",motion:\\\"moveByCharacters\\\",motionArgs:{forward:!1}},{keys:\\\"l\\\",type:\\\"motion\\\",motion:\\\"moveByCharacters\\\",motionArgs:{forward:!0}},{keys:\\\"j\\\",type:\\\"motion\\\",motion:\\\"moveByLines\\\",motionArgs:{forward:!0,linewise:!0}},{keys:\\\"k\\\",type:\\\"motion\\\",motion:\\\"moveByLines\\\",motionArgs:{forward:!1,linewise:!0}},{keys:\\\"gj\\\",type:\\\"motion\\\",motion:\\\"moveByDisplayLines\\\",motionArgs:{forward:!0}},{keys:\\\"gk\\\",type:\\\"motion\\\",motion:\\\"moveByDisplayLines\\\",motionArgs:{forward:!1}},{keys:\\\"w\\\",type:\\\"motion\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!0,wordEnd:!1}},{keys:\\\"W\\\",type:\\\"motion\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!0,wordEnd:!1,bigWord:!0}},{keys:\\\"e\\\",type:\\\"motion\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!0,wordEnd:!0,inclusive:!0}},{keys:\\\"E\\\",type:\\\"motion\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!0,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\\\"b\\\",type:\\\"motion\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!1,wordEnd:!1}},{keys:\\\"B\\\",type:\\\"motion\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!1,wordEnd:!1,bigWord:!0}},{keys:\\\"ge\\\",type:\\\"motion\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!1,wordEnd:!0,inclusive:!0}},{keys:\\\"gE\\\",type:\\\"motion\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!1,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\\\"{\\\",type:\\\"motion\\\",motion:\\\"moveByParagraph\\\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\\\"}\\\",type:\\\"motion\\\",motion:\\\"moveByParagraph\\\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\\\"(\\\",type:\\\"motion\\\",motion:\\\"moveBySentence\\\",motionArgs:{forward:!1}},{keys:\\\")\\\",type:\\\"motion\\\",motion:\\\"moveBySentence\\\",motionArgs:{forward:!0}},{keys:\\\"<C-f>\\\",type:\\\"motion\\\",motion:\\\"moveByPage\\\",motionArgs:{forward:!0}},{keys:\\\"<C-b>\\\",type:\\\"motion\\\",motion:\\\"moveByPage\\\",motionArgs:{forward:!1}},{keys:\\\"<C-d>\\\",type:\\\"motion\\\",motion:\\\"moveByScroll\\\",motionArgs:{forward:!0,explicitRepeat:!0}},{keys:\\\"<C-u>\\\",type:\\\"motion\\\",motion:\\\"moveByScroll\\\",motionArgs:{forward:!1,explicitRepeat:!0}},{keys:\\\"gg\\\",type:\\\"motion\\\",motion:\\\"moveToLineOrEdgeOfDocument\\\",motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\\\"G\\\",type:\\\"motion\\\",motion:\\\"moveToLineOrEdgeOfDocument\\\",motionArgs:{forward:!0,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\\\"0\\\",type:\\\"motion\\\",motion:\\\"moveToStartOfLine\\\"},{keys:\\\"^\\\",type:\\\"motion\\\",motion:\\\"moveToFirstNonWhiteSpaceCharacter\\\"},{keys:\\\"+\\\",type:\\\"motion\\\",motion:\\\"moveByLines\\\",motionArgs:{forward:!0,toFirstChar:!0}},{keys:\\\"-\\\",type:\\\"motion\\\",motion:\\\"moveByLines\\\",motionArgs:{forward:!1,toFirstChar:!0}},{keys:\\\"_\\\",type:\\\"motion\\\",motion:\\\"moveByLines\\\",motionArgs:{forward:!0,toFirstChar:!0,repeatOffset:-1}},{keys:\\\"$\\\",type:\\\"motion\\\",motion:\\\"moveToEol\\\",motionArgs:{inclusive:!0}},{keys:\\\"%\\\",type:\\\"motion\\\",motion:\\\"moveToMatchedSymbol\\\",motionArgs:{inclusive:!0,toJumplist:!0}},{keys:\\\"f<character>\\\",type:\\\"motion\\\",motion:\\\"moveToCharacter\\\",motionArgs:{forward:!0,inclusive:!0}},{keys:\\\"F<character>\\\",type:\\\"motion\\\",motion:\\\"moveToCharacter\\\",motionArgs:{forward:!1}},{keys:\\\"t<character>\\\",type:\\\"motion\\\",motion:\\\"moveTillCharacter\\\",motionArgs:{forward:!0,inclusive:!0}},{keys:\\\"T<character>\\\",type:\\\"motion\\\",motion:\\\"moveTillCharacter\\\",motionArgs:{forward:!1}},{keys:\\\";\\\",type:\\\"motion\\\",motion:\\\"repeatLastCharacterSearch\\\",motionArgs:{forward:!0}},{keys:\\\",\\\",type:\\\"motion\\\",motion:\\\"repeatLastCharacterSearch\\\",motionArgs:{forward:!1}},{keys:\\\"'<character>\\\",type:\\\"motion\\\",motion:\\\"goToMark\\\",motionArgs:{toJumplist:!0,linewise:!0}},{keys:\\\"`<character>\\\",type:\\\"motion\\\",motion:\\\"goToMark\\\",motionArgs:{toJumplist:!0}},{keys:\\\"]`\\\",type:\\\"motion\\\",motion:\\\"jumpToMark\\\",motionArgs:{forward:!0}},{keys:\\\"[`\\\",type:\\\"motion\\\",motion:\\\"jumpToMark\\\",motionArgs:{forward:!1}},{keys:\\\"]'\\\",type:\\\"motion\\\",motion:\\\"jumpToMark\\\",motionArgs:{forward:!0,linewise:!0}},{keys:\\\"['\\\",type:\\\"motion\\\",motion:\\\"jumpToMark\\\",motionArgs:{forward:!1,linewise:!0}},{keys:\\\"]p\\\",type:\\\"action\\\",action:\\\"paste\\\",isEdit:!0,actionArgs:{after:!0,isEdit:!0,matchIndent:!0}},{keys:\\\"[p\\\",type:\\\"action\\\",action:\\\"paste\\\",isEdit:!0,actionArgs:{after:!1,isEdit:!0,matchIndent:!0}},{keys:\\\"]<character>\\\",type:\\\"motion\\\",motion:\\\"moveToSymbol\\\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\\\"[<character>\\\",type:\\\"motion\\\",motion:\\\"moveToSymbol\\\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\\\"|\\\",type:\\\"motion\\\",motion:\\\"moveToColumn\\\"},{keys:\\\"o\\\",type:\\\"motion\\\",motion:\\\"moveToOtherHighlightedEnd\\\",context:\\\"visual\\\"},{keys:\\\"O\\\",type:\\\"motion\\\",motion:\\\"moveToOtherHighlightedEnd\\\",motionArgs:{sameLine:!0},context:\\\"visual\\\"},{keys:\\\"d\\\",type:\\\"operator\\\",operator:\\\"delete\\\"},{keys:\\\"y\\\",type:\\\"operator\\\",operator:\\\"yank\\\"},{keys:\\\"c\\\",type:\\\"operator\\\",operator:\\\"change\\\"},{keys:\\\">\\\",type:\\\"operator\\\",operator:\\\"indent\\\",operatorArgs:{indentRight:!0}},{keys:\\\"<\\\",type:\\\"operator\\\",operator:\\\"indent\\\",operatorArgs:{indentRight:!1}},{keys:\\\"g~\\\",type:\\\"operator\\\",operator:\\\"changeCase\\\"},{keys:\\\"gu\\\",type:\\\"operator\\\",operator:\\\"changeCase\\\",operatorArgs:{toLower:!0},isEdit:!0},{keys:\\\"gU\\\",type:\\\"operator\\\",operator:\\\"changeCase\\\",operatorArgs:{toLower:!1},isEdit:!0},{keys:\\\"n\\\",type:\\\"motion\\\",motion:\\\"findNext\\\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\\\"N\\\",type:\\\"motion\\\",motion:\\\"findNext\\\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\\\"x\\\",type:\\\"operatorMotion\\\",operator:\\\"delete\\\",motion:\\\"moveByCharacters\\\",motionArgs:{forward:!0},operatorMotionArgs:{visualLine:!1}},{keys:\\\"X\\\",type:\\\"operatorMotion\\\",operator:\\\"delete\\\",motion:\\\"moveByCharacters\\\",motionArgs:{forward:!1},operatorMotionArgs:{visualLine:!0}},{keys:\\\"D\\\",type:\\\"operatorMotion\\\",operator:\\\"delete\\\",motion:\\\"moveToEol\\\",motionArgs:{inclusive:!0},context:\\\"normal\\\"},{keys:\\\"D\\\",type:\\\"operator\\\",operator:\\\"delete\\\",operatorArgs:{linewise:!0},context:\\\"visual\\\"},{keys:\\\"Y\\\",type:\\\"operatorMotion\\\",operator:\\\"yank\\\",motion:\\\"expandToLine\\\",motionArgs:{linewise:!0},context:\\\"normal\\\"},{keys:\\\"Y\\\",type:\\\"operator\\\",operator:\\\"yank\\\",operatorArgs:{linewise:!0},context:\\\"visual\\\"},{keys:\\\"C\\\",type:\\\"operatorMotion\\\",operator:\\\"change\\\",motion:\\\"moveToEol\\\",motionArgs:{inclusive:!0},context:\\\"normal\\\"},{keys:\\\"C\\\",type:\\\"operator\\\",operator:\\\"change\\\",operatorArgs:{linewise:!0},context:\\\"visual\\\"},{keys:\\\"~\\\",type:\\\"operatorMotion\\\",operator:\\\"changeCase\\\",motion:\\\"moveByCharacters\\\",motionArgs:{forward:!0},operatorArgs:{shouldMoveCursor:!0},context:\\\"normal\\\"},{keys:\\\"~\\\",type:\\\"operator\\\",operator:\\\"changeCase\\\",context:\\\"visual\\\"},{keys:\\\"<C-w>\\\",type:\\\"operatorMotion\\\",operator:\\\"delete\\\",motion:\\\"moveByWords\\\",motionArgs:{forward:!1,wordEnd:!1},context:\\\"insert\\\"},{keys:\\\"<C-i>\\\",type:\\\"action\\\",action:\\\"jumpListWalk\\\",actionArgs:{forward:!0}},{keys:\\\"<C-o>\\\",type:\\\"action\\\",action:\\\"jumpListWalk\\\",actionArgs:{forward:!1}},{keys:\\\"<C-e>\\\",type:\\\"action\\\",action:\\\"scroll\\\",actionArgs:{forward:!0,linewise:!0}},{keys:\\\"<C-y>\\\",type:\\\"action\\\",action:\\\"scroll\\\",actionArgs:{forward:!1,linewise:!0}},{keys:\\\"a\\\",type:\\\"action\\\",action:\\\"enterInsertMode\\\",isEdit:!0,actionArgs:{insertAt:\\\"charAfter\\\"},context:\\\"normal\\\"},{keys:\\\"A\\\",type:\\\"action\\\",action:\\\"enterInsertMode\\\",isEdit:!0,actionArgs:{insertAt:\\\"eol\\\"},context:\\\"normal\\\"},{keys:\\\"A\\\",type:\\\"action\\\",action:\\\"enterInsertMode\\\",isEdit:!0,actionArgs:{insertAt:\\\"endOfSelectedArea\\\"},context:\\\"visual\\\"},{keys:\\\"i\\\",type:\\\"action\\\",action:\\\"enterInsertMode\\\",isEdit:!0,actionArgs:{insertAt:\\\"inplace\\\"},context:\\\"normal\\\"},{keys:\\\"I\\\",type:\\\"action\\\",action:\\\"enterInsertMode\\\",isEdit:!0,actionArgs:{insertAt:\\\"firstNonBlank\\\"},context:\\\"normal\\\"},{keys:\\\"I\\\",type:\\\"action\\\",action:\\\"enterInsertMode\\\",isEdit:!0,actionArgs:{insertAt:\\\"startOfSelectedArea\\\"},context:\\\"visual\\\"},{keys:\\\"o\\\",type:\\\"action\\\",action:\\\"newLineAndEnterInsertMode\\\",isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!0},context:\\\"normal\\\"},{keys:\\\"O\\\",type:\\\"action\\\",action:\\\"newLineAndEnterInsertMode\\\",isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!1},context:\\\"normal\\\"},{keys:\\\"v\\\",type:\\\"action\\\",action:\\\"toggleVisualMode\\\"},{keys:\\\"V\\\",type:\\\"action\\\",action:\\\"toggleVisualMode\\\",actionArgs:{linewise:!0}},{keys:\\\"<C-v>\\\",type:\\\"action\\\",action:\\\"toggleVisualMode\\\",actionArgs:{blockwise:!0}},{keys:\\\"<C-q>\\\",type:\\\"action\\\",action:\\\"toggleVisualMode\\\",actionArgs:{blockwise:!0}},{keys:\\\"gv\\\",type:\\\"action\\\",action:\\\"reselectLastSelection\\\"},{keys:\\\"J\\\",type:\\\"action\\\",action:\\\"joinLines\\\",isEdit:!0},{keys:\\\"p\\\",type:\\\"action\\\",action:\\\"paste\\\",isEdit:!0,actionArgs:{after:!0,isEdit:!0}},{keys:\\\"P\\\",type:\\\"action\\\",action:\\\"paste\\\",isEdit:!0,actionArgs:{after:!1,isEdit:!0}},{keys:\\\"r<character>\\\",type:\\\"action\\\",action:\\\"replace\\\",isEdit:!0},{keys:\\\"@<character>\\\",type:\\\"action\\\",action:\\\"replayMacro\\\"},{keys:\\\"q<character>\\\",type:\\\"action\\\",action:\\\"enterMacroRecordMode\\\"},{keys:\\\"R\\\",type:\\\"action\\\",action:\\\"enterInsertMode\\\",isEdit:!0,actionArgs:{replace:!0}},{keys:\\\"u\\\",type:\\\"action\\\",action:\\\"undo\\\",context:\\\"normal\\\"},{keys:\\\"u\\\",type:\\\"operator\\\",operator:\\\"changeCase\\\",operatorArgs:{toLower:!0},context:\\\"visual\\\",isEdit:!0},{keys:\\\"U\\\",type:\\\"operator\\\",operator:\\\"changeCase\\\",operatorArgs:{toLower:!1},context:\\\"visual\\\",isEdit:!0},{keys:\\\"<C-r>\\\",type:\\\"action\\\",action:\\\"redo\\\"},{keys:\\\"m<character>\\\",type:\\\"action\\\",action:\\\"setMark\\\"},{keys:'\\\"<character>',type:\\\"action\\\",action:\\\"setRegister\\\"},{keys:\\\"zz\\\",type:\\\"action\\\",action:\\\"scrollToCursor\\\",actionArgs:{position:\\\"center\\\"}},{keys:\\\"z.\\\",type:\\\"action\\\",action:\\\"scrollToCursor\\\",actionArgs:{position:\\\"center\\\"},motion:\\\"moveToFirstNonWhiteSpaceCharacter\\\"},{keys:\\\"zt\\\",type:\\\"action\\\",action:\\\"scrollToCursor\\\",actionArgs:{position:\\\"top\\\"}},{keys:\\\"z<CR>\\\",type:\\\"action\\\",action:\\\"scrollToCursor\\\",actionArgs:{position:\\\"top\\\"},motion:\\\"moveToFirstNonWhiteSpaceCharacter\\\"},{keys:\\\"z-\\\",type:\\\"action\\\",action:\\\"scrollToCursor\\\",actionArgs:{position:\\\"bottom\\\"}},{keys:\\\"zb\\\",type:\\\"action\\\",action:\\\"scrollToCursor\\\",actionArgs:{position:\\\"bottom\\\"},motion:\\\"moveToFirstNonWhiteSpaceCharacter\\\"},{keys:\\\".\\\",type:\\\"action\\\",action:\\\"repeatLastEdit\\\"},{keys:\\\"<C-a>\\\",type:\\\"action\\\",action:\\\"incrementNumberToken\\\",isEdit:!0,actionArgs:{increase:!0,backtrack:!1}},{keys:\\\"<C-x>\\\",type:\\\"action\\\",action:\\\"incrementNumberToken\\\",isEdit:!0,actionArgs:{increase:!1,backtrack:!1}},{keys:\\\"<C-t>\\\",type:\\\"action\\\",action:\\\"indent\\\",actionArgs:{indentRight:!0},context:\\\"insert\\\"},{keys:\\\"<C-d>\\\",type:\\\"action\\\",action:\\\"indent\\\",actionArgs:{indentRight:!1},context:\\\"insert\\\"},{keys:\\\"a<character>\\\",type:\\\"motion\\\",motion:\\\"textObjectManipulation\\\"},{keys:\\\"i<character>\\\",type:\\\"motion\\\",motion:\\\"textObjectManipulation\\\",motionArgs:{textObjectInner:!0}},{keys:\\\"/\\\",type:\\\"search\\\",searchArgs:{forward:!0,querySrc:\\\"prompt\\\",toJumplist:!0}},{keys:\\\"?\\\",type:\\\"search\\\",searchArgs:{forward:!1,querySrc:\\\"prompt\\\",toJumplist:!0}},{keys:\\\"*\\\",type:\\\"search\\\",searchArgs:{forward:!0,querySrc:\\\"wordUnderCursor\\\",wholeWordOnly:!0,toJumplist:!0}},{keys:\\\"#\\\",type:\\\"search\\\",searchArgs:{forward:!1,querySrc:\\\"wordUnderCursor\\\",wholeWordOnly:!0,toJumplist:!0}},{keys:\\\"g*\\\",type:\\\"search\\\",searchArgs:{forward:!0,querySrc:\\\"wordUnderCursor\\\",toJumplist:!0}},{keys:\\\"g#\\\",type:\\\"search\\\",searchArgs:{forward:!1,querySrc:\\\"wordUnderCursor\\\",toJumplist:!0}},{keys:\\\":\\\",type:\\\"ex\\\"}],r=[{name:\\\"colorscheme\\\",shortName:\\\"colo\\\"},{name:\\\"map\\\"},{name:\\\"imap\\\",shortName:\\\"im\\\"},{name:\\\"nmap\\\",shortName:\\\"nm\\\"},{name:\\\"vmap\\\",shortName:\\\"vm\\\"},{name:\\\"unmap\\\"},{name:\\\"write\\\",shortName:\\\"w\\\"},{name:\\\"undo\\\",shortName:\\\"u\\\"},{name:\\\"redo\\\",shortName:\\\"red\\\"},{name:\\\"set\\\",shortName:\\\"se\\\"},{name:\\\"set\\\",shortName:\\\"se\\\"},{name:\\\"setlocal\\\",shortName:\\\"setl\\\"},{name:\\\"setglobal\\\",shortName:\\\"setg\\\"},{name:\\\"sort\\\",shortName:\\\"sor\\\"},{name:\\\"substitute\\\",shortName:\\\"s\\\",possiblyAsync:!0},{name:\\\"nohlsearch\\\",shortName:\\\"noh\\\"},{name:\\\"yank\\\",shortName:\\\"y\\\"},{name:\\\"delmarks\\\",shortName:\\\"delm\\\"},{name:\\\"registers\\\",shortName:\\\"reg\\\",excludeFromCommandHistory:!0},{name:\\\"global\\\",shortName:\\\"g\\\"}],n=e.Pos;e.Vim=function(){function o(t,r){var n;this==e.keyMap.vim&&(e.rmClass(t.getWrapperElement(),\\\"cm-fat-cursor\\\"),\\\"contenteditable\\\"==t.getOption(\\\"inputStyle\\\")&&null!=document.body.style.caretColor&&(function(e){var t=e.state.fatCursorMarks;if(t)for(var r=0;r<t.length;r++)t[r].clear();e.state.fatCursorMarks=null,e.off(\\\"cursorActivity\\\",s)}(t),t.getInputField().style.caretColor=\\\"\\\")),r&&r.attach==i||((n=t).setOption(\\\"disableInput\\\",!1),n.off(\\\"cursorActivity\\\",qe),e.off(n.getInputField(),\\\"paste\\\",h(n)),n.state.vim=null)}function i(t,r){var n,o;this==e.keyMap.vim&&(e.addClass(t.getWrapperElement(),\\\"cm-fat-cursor\\\"),\\\"contenteditable\\\"==t.getOption(\\\"inputStyle\\\")&&null!=document.body.style.caretColor&&((n=t).state.fatCursorMarks=a(n),n.on(\\\"cursorActivity\\\",s),t.getInputField().style.caretColor=\\\"transparent\\\")),r&&r.attach==i||((o=t).setOption(\\\"disableInput\\\",!0),o.setOption(\\\"showCursorWhenSelecting\\\",!1),e.signal(o,\\\"vim-mode-change\\\",{mode:\\\"normal\\\"}),o.on(\\\"cursorActivity\\\",qe),P(o),e.on(o.getInputField(),\\\"paste\\\",h(o)))}function a(e){for(var t=e.listSelections(),r=[],o=0;o<t.length;o++){var i=t[o];if(i.empty())if(i.anchor.ch<e.getLine(i.anchor.line).length)r.push(e.markText(i.anchor,n(i.anchor.line,i.anchor.ch+1),{className:\\\"cm-fat-cursor-mark\\\"}));else{var a=document.createElement(\\\"span\\\");a.textContent=\\\" \\\",a.className=\\\"cm-fat-cursor-mark\\\",r.push(e.setBookmark(i.anchor,{widget:a}))}}return r}function s(e){var t=e.state.fatCursorMarks;if(t)for(var r=0;r<t.length;r++)t[r].clear();e.state.fatCursorMarks=a(e)}function l(t,r){if(r){if(this[t])return this[t];var n=function(e){if(\\\"'\\\"==e.charAt(0))return e.charAt(1);var t=e.split(/-(?!$)/),r=t[t.length-1];if(1==t.length&&1==t[0].length)return!1;if(2==t.length&&\\\"Shift\\\"==t[0]&&1==r.length)return!1;for(var n=!1,o=0;o<t.length;o++){var i=t[o];i in c?t[o]=c[i]:n=!0,i in u&&(t[o]=u[i])}return!!n&&(x(r)&&(t[t.length-1]=r.toLowerCase()),\\\"<\\\"+t.join(\\\"-\\\")+\\\">\\\")}(t);if(!n)return!1;var o=e.Vim.findKey(r,n);return\\\"function\\\"==typeof o&&e.signal(r,\\\"vim-keypress\\\",n),o}}e.defineOption(\\\"vimMode\\\",!1,function(t,r,n){r&&\\\"vim\\\"!=t.getOption(\\\"keyMap\\\")?t.setOption(\\\"keyMap\\\",\\\"vim\\\"):!r&&n!=e.Init&&/^vim/.test(t.getOption(\\\"keyMap\\\"))&&t.setOption(\\\"keyMap\\\",\\\"default\\\")});var c={Shift:\\\"S\\\",Ctrl:\\\"C\\\",Alt:\\\"A\\\",Cmd:\\\"D\\\",Mod:\\\"A\\\"},u={Enter:\\\"CR\\\",Backspace:\\\"BS\\\",Delete:\\\"Del\\\",Insert:\\\"Ins\\\"};function h(e){var t=e.state.vim;return t.onPasteFn||(t.onPasteFn=function(){t.insertMode||(e.setCursor(G(e.getCursor(),0,1)),Q.enterInsertMode(e,{},t))}),t.onPasteFn}var p=/[\\\\d]/,f=[e.isWordChar,function(t){return t&&!e.isWordChar(t)&&!/\\\\s/.test(t)}],d=[function(e){return/\\\\S/.test(e)}];function m(e,t){for(var r=[],n=e;n<e+t;n++)r.push(String.fromCharCode(n));return r}var g=m(65,26),v=m(97,26),y=m(48,10),k=[].concat(g,v,y,[\\\"<\\\",\\\">\\\"]),C=[].concat(g,v,y,[\\\"-\\\",'\\\"',\\\".\\\",\\\":\\\",\\\"/\\\"]);function w(e,t){return t>=e.firstLine()&&t<=e.lastLine()}function M(e){return/^[a-z]$/.test(e)}function x(e){return/^[A-Z]$/.test(e)}function S(e){return/^\\\\s*$/.test(e)}function A(e){return-1!=\\\".?!\\\".indexOf(e)}function b(e,t){for(var r=0;r<t.length;r++)if(t[r]==e)return!0;return!1}var L={};function T(e,t,r,n,o){if(void 0===t&&!o)throw Error(\\\"defaultValue is required unless callback is provided\\\");if(r||(r=\\\"string\\\"),L[e]={type:r,defaultValue:t,callback:o},n)for(var i=0;i<n.length;i++)L[n[i]]=L[e];t&&R(e,t)}function R(e,t,r,n){var o=L[e],i=(n=n||{}).scope;if(!o)return new Error(\\\"Unknown option: \\\"+e);if(\\\"boolean\\\"==o.type){if(t&&!0!==t)return new Error(\\\"Invalid argument: \\\"+e+\\\"=\\\"+t);!1!==t&&(t=!0)}o.callback?(\\\"local\\\"!==i&&o.callback(t,void 0),\\\"global\\\"!==i&&r&&o.callback(t,r)):(\\\"local\\\"!==i&&(o.value=\\\"boolean\\\"==o.type?!!t:t),\\\"global\\\"!==i&&r&&(r.state.vim.options[e]={value:t}))}function E(e,t,r){var n=L[e],o=(r=r||{}).scope;if(!n)return new Error(\\\"Unknown option: \\\"+e);if(n.callback){var i=t&&n.callback(void 0,t);return\\\"global\\\"!==o&&void 0!==i?i:\\\"local\\\"!==o?n.callback():void 0}return((i=\\\"global\\\"!==o&&t&&t.state.vim.options[e])||\\\"local\\\"!==o&&n||{}).value}T(\\\"filetype\\\",void 0,\\\"string\\\",[\\\"ft\\\"],function(e,t){if(void 0!==t){if(void 0===e)return\\\"null\\\"==(r=t.getOption(\\\"mode\\\"))?\\\"\\\":r;var r=\\\"\\\"==e?\\\"null\\\":e;t.setOption(\\\"mode\\\",r)}});var O,B,I=function(){var e=100,t=-1,r=0,n=0,o=new Array(e);return{cachedCursor:void 0,add:function(i,a,s){var l=o[t%e];function c(r){var n=++t%e,a=o[n];a&&a.clear(),o[n]=i.setBookmark(r)}if(l){var u=l.find();u&&!te(u,a)&&c(a)}else c(a);c(s),r=t,(n=t-e+1)<0&&(n=0)},move:function(i,a){(t+=a)>r?t=r:t<n&&(t=n);var s=o[(e+t)%e];if(s&&!s.find()){var l,c=a>0?1:-1,u=i.getCursor();do{if((s=o[(e+(t+=c))%e])&&(l=s.find())&&!te(u,l))break}while(t<r&&t>n)}return s}}},K=function(e){return e?{changes:e.changes,expectCursorActivityForChange:e.expectCursorActivityForChange}:{changes:[],expectCursorActivityForChange:!1}};function N(){this.latestRegister=void 0,this.isPlaying=!1,this.isRecording=!1,this.replaySearchQueries=[],this.onRecordingDone=void 0,this.lastInsertModeChanges=K()}function P(e){return e.state.vim||(e.state.vim={inputState:new _,lastEditInputState:void 0,lastEditActionCommand:void 0,lastHPos:-1,lastHSPos:-1,lastMotion:null,marks:{},fakeCursor:null,insertMode:!1,insertModeRepeat:void 0,visualMode:!1,visualLine:!1,visualBlock:!1,lastSelection:null,lastPastedText:null,sel:{},options:{}}),e.state.vim}function j(){for(var e in O={searchQuery:null,searchIsReversed:!1,lastSubstituteReplacePart:void 0,jumpList:I(),macroModeState:new N,lastCharacterSearch:{increment:0,forward:!0,selectedCharacter:\\\"\\\"},registerController:new V({}),searchHistoryController:new D,exCommandHistoryController:new D},L){var t=L[e];t.value=t.defaultValue}}N.prototype={exitMacroRecordMode:function(){var e=O.macroModeState;e.onRecordingDone&&e.onRecordingDone(),e.onRecordingDone=void 0,e.isRecording=!1},enterMacroRecordMode:function(e,t){var r=O.registerController.getRegister(t);r&&(r.clear(),this.latestRegister=t,e.openDialog&&(this.onRecordingDone=e.openDialog(\\\"(recording)[\\\"+t+\\\"]\\\",null,{bottom:!0})),this.isRecording=!0)}};var H={buildKeyMap:function(){},getRegisterController:function(){return O.registerController},resetVimGlobalState_:j,getVimGlobalState_:function(){return O},maybeInitVimState_:P,suppressErrorLogging:!1,InsertModeKey:ze,map:function(e,t,r){Ve.map(e,t,r)},unmap:function(e,t){Ve.unmap(e,t)},setOption:R,getOption:E,defineOption:T,defineEx:function(e,t,r){if(t){if(0!==e.indexOf(t))throw new Error('(Vim.defineEx) \\\"'+t+'\\\" is not a prefix of \\\"'+e+'\\\", command not registered')}else t=e;We[e]=r,Ve.commandMap_[t]={name:e,shortName:t,type:\\\"api\\\"}},handleKey:function(e,t,r){var n=this.findKey(e,t,r);if(\\\"function\\\"==typeof n)return n()},findKey:function(r,n,o){var i,a=P(r);function s(){var e=O.macroModeState;if(e.isRecording){if(\\\"q\\\"==n)return e.exitMacroRecordMode(),F(r),!0;\\\"mapping\\\"!=o&&function(e,t){if(!e.isPlaying){var r=e.latestRegister,n=O.registerController.getRegister(r);n&&n.pushText(t)}}(e,n)}}function l(){if(\\\"<Esc>\\\"==n)return F(r),a.visualMode?fe(r):a.insertMode&&De(r),!0}return!1===(i=a.insertMode?function(){if(l())return!0;for(var e=a.inputState.keyBuffer=a.inputState.keyBuffer+n,o=1==n.length,i=U.matchCommand(e,t,a.inputState,\\\"insert\\\");e.length>1&&\\\"full\\\"!=i.type;){e=a.inputState.keyBuffer=e.slice(1);var s=U.matchCommand(e,t,a.inputState,\\\"insert\\\");\\\"none\\\"!=s.type&&(i=s)}if(\\\"none\\\"==i.type)return F(r),!1;if(\\\"partial\\\"==i.type)return B&&window.clearTimeout(B),B=window.setTimeout(function(){a.insertMode&&a.inputState.keyBuffer&&F(r)},E(\\\"insertModeEscKeysTimeout\\\")),!o;if(B&&window.clearTimeout(B),o){for(var c=r.listSelections(),u=0;u<c.length;u++){var h=c[u].head;r.replaceRange(\\\"\\\",G(h,0,-(e.length-1)),h,\\\"+input\\\")}O.macroModeState.lastInsertModeChanges.changes.pop()}return F(r),i.command}():function(){if(s()||l())return!0;var e=a.inputState.keyBuffer=a.inputState.keyBuffer+n;if(/^[1-9]\\\\d*$/.test(e))return!0;if(!(o=/^(\\\\d*)(.*)$/.exec(e)))return F(r),!1;var o,i=a.visualMode?\\\"visual\\\":\\\"normal\\\",c=U.matchCommand(o[2]||o[1],t,a.inputState,i);return\\\"none\\\"==c.type?(F(r),!1):\\\"partial\\\"==c.type||(a.inputState.keyBuffer=\\\"\\\",(o=/^(\\\\d*)(.*)$/.exec(e))[1]&&\\\"0\\\"!=o[1]&&a.inputState.pushRepeatDigit(o[1]),c.command)}())?a.insertMode||1!==n.length?void 0:function(){return!0}:!0===i?function(){return!0}:function(){return r.operation(function(){r.curOp.isVimOp=!0;try{\\\"keyToKey\\\"==i.type?function(t){for(var o;t;)o=/<\\\\w+-.+?>|<\\\\w+>|./.exec(t),n=o[0],t=t.substring(o.index+n.length),e.Vim.handleKey(r,n,\\\"mapping\\\")}(i.toKeys):U.processCommand(r,a,i)}catch(t){throw r.state.vim=void 0,P(r),e.Vim.suppressErrorLogging||console.log(t),t}return!0})}},handleEx:function(e,t){Ve.processCommand(e,t)},defineMotion:function(e,t){J[e]=t},defineAction:function(e,t){Q[e]=t},defineOperator:function(e,t){q[e]=t},mapCommand:function(e,t,r,n,o){var i={keys:e,type:t};for(var a in i[t]=r,i[t+\\\"Args\\\"]=n,o)i[a]=o[a];Ue(i)},_mapCommand:Ue,defineRegister:function(e,t){var r=O.registerController.registers;if(!e||1!=e.length)throw Error(\\\"Register name must be 1 character\\\");if(r[e])throw Error(\\\"Register already defined \\\"+e);r[e]=t,C.push(e)},exitVisualMode:fe,exitInsertMode:De};function _(){this.prefixRepeat=[],this.motionRepeat=[],this.operator=null,this.operatorArgs=null,this.motion=null,this.motionArgs=null,this.keyBuffer=[],this.registerName=null}function F(t,r){t.state.vim.inputState=new _,e.signal(t,\\\"vim-command-done\\\",r)}function W(e,t,r){this.clear(),this.keyBuffer=[e||\\\"\\\"],this.insertModeChanges=[],this.searchQueries=[],this.linewise=!!t,this.blockwise=!!r}function V(e){this.registers=e,this.unnamedRegister=e['\\\"']=new W,e[\\\".\\\"]=new W,e[\\\":\\\"]=new W,e[\\\"/\\\"]=new W}function D(){this.historyBuffer=[],this.iterator=0,this.initialPrefix=null}_.prototype.pushRepeatDigit=function(e){this.operator?this.motionRepeat=this.motionRepeat.concat(e):this.prefixRepeat=this.prefixRepeat.concat(e)},_.prototype.getRepeat=function(){var e=0;return(this.prefixRepeat.length>0||this.motionRepeat.length>0)&&(e=1,this.prefixRepeat.length>0&&(e*=parseInt(this.prefixRepeat.join(\\\"\\\"),10)),this.motionRepeat.length>0&&(e*=parseInt(this.motionRepeat.join(\\\"\\\"),10))),e},W.prototype={setText:function(e,t,r){this.keyBuffer=[e||\\\"\\\"],this.linewise=!!t,this.blockwise=!!r},pushText:function(e,t){t&&(this.linewise||this.keyBuffer.push(\\\"\\\\n\\\"),this.linewise=!0),this.keyBuffer.push(e)},pushInsertModeChanges:function(e){this.insertModeChanges.push(K(e))},pushSearchQuery:function(e){this.searchQueries.push(e)},clear:function(){this.keyBuffer=[],this.insertModeChanges=[],this.searchQueries=[],this.linewise=!1},toString:function(){return this.keyBuffer.join(\\\"\\\")}},V.prototype={pushText:function(e,t,r,n,o){n&&\\\"\\\\n\\\"!==r.charAt(r.length-1)&&(r+=\\\"\\\\n\\\");var i=this.isValidRegister(e)?this.getRegister(e):null;if(i)x(e)?i.pushText(r,n):i.setText(r,n,o),this.unnamedRegister.setText(i.toString(),n);else{switch(t){case\\\"yank\\\":this.registers[0]=new W(r,n,o);break;case\\\"delete\\\":case\\\"change\\\":-1==r.indexOf(\\\"\\\\n\\\")?this.registers[\\\"-\\\"]=new W(r,n):(this.shiftNumericRegisters_(),this.registers[1]=new W(r,n))}this.unnamedRegister.setText(r,n,o)}},getRegister:function(e){return this.isValidRegister(e)?(e=e.toLowerCase(),this.registers[e]||(this.registers[e]=new W),this.registers[e]):this.unnamedRegister},isValidRegister:function(e){return e&&b(e,C)},shiftNumericRegisters_:function(){for(var e=9;e>=2;e--)this.registers[e]=this.getRegister(\\\"\\\"+(e-1))}},D.prototype={nextMatch:function(e,t){var r=this.historyBuffer,n=t?-1:1;null===this.initialPrefix&&(this.initialPrefix=e);for(var o=this.iterator+n;t?o>=0:o<r.length;o+=n)for(var i=r[o],a=0;a<=i.length;a++)if(this.initialPrefix==i.substring(0,a))return this.iterator=o,i;return o>=r.length?(this.iterator=r.length,this.initialPrefix):o<0?e:void 0},pushInput:function(e){var t=this.historyBuffer.indexOf(e);t>-1&&this.historyBuffer.splice(t,1),e.length&&this.historyBuffer.push(e)},reset:function(){this.initialPrefix=null,this.iterator=this.historyBuffer.length}};var U={matchCommand:function(e,t,r,n){var o,i=function(e,t,r,n){for(var o,i=[],a=[],s=0;s<t.length;s++){var l=t[s];\\\"insert\\\"==r&&\\\"insert\\\"!=l.context||l.context&&l.context!=r||n.operator&&\\\"action\\\"==l.type||!(o=X(e,l.keys))||(\\\"partial\\\"==o&&i.push(l),\\\"full\\\"==o&&a.push(l))}return{partial:i.length&&i,full:a.length&&a}}(e,t,n,r);if(!i.full&&!i.partial)return{type:\\\"none\\\"};if(!i.full&&i.partial)return{type:\\\"partial\\\"};for(var a=0;a<i.full.length;a++){var s=i.full[a];o||(o=s)}if(\\\"<character>\\\"==o.keys.slice(-11)){var l=function(e){var t=/^.*(<[^>]+>)$/.exec(e),r=t?t[1]:e.slice(-1);if(r.length>1)switch(r){case\\\"<CR>\\\":r=\\\"\\\\n\\\";break;case\\\"<Space>\\\":r=\\\" \\\";break;default:r=\\\"\\\"}return r}(e);if(!l)return{type:\\\"none\\\"};r.selectedCharacter=l}return{type:\\\"full\\\",command:o}},processCommand:function(e,t,r){switch(t.inputState.repeatOverride=r.repeatOverride,r.type){case\\\"motion\\\":this.processMotion(e,t,r);break;case\\\"operator\\\":this.processOperator(e,t,r);break;case\\\"operatorMotion\\\":this.processOperatorMotion(e,t,r);break;case\\\"action\\\":this.processAction(e,t,r);break;case\\\"search\\\":this.processSearch(e,t,r);break;case\\\"ex\\\":case\\\"keyToEx\\\":this.processEx(e,t,r)}},processMotion:function(e,t,r){t.inputState.motion=r.motion,t.inputState.motionArgs=Z(r.motionArgs),this.evalInput(e,t)},processOperator:function(e,t,r){var n=t.inputState;if(n.operator){if(n.operator==r.operator)return n.motion=\\\"expandToLine\\\",n.motionArgs={linewise:!0},void this.evalInput(e,t);F(e)}n.operator=r.operator,n.operatorArgs=Z(r.operatorArgs),t.visualMode&&this.evalInput(e,t)},processOperatorMotion:function(e,t,r){var n=t.visualMode,o=Z(r.operatorMotionArgs);o&&n&&o.visualLine&&(t.visualLine=!0),this.processOperator(e,t,r),n||this.processMotion(e,t,r)},processAction:function(e,t,r){var n=t.inputState,o=n.getRepeat(),i=!!o,a=Z(r.actionArgs)||{};n.selectedCharacter&&(a.selectedCharacter=n.selectedCharacter),r.operator&&this.processOperator(e,t,r),r.motion&&this.processMotion(e,t,r),(r.motion||r.operator)&&this.evalInput(e,t),a.repeat=o||1,a.repeatIsExplicit=i,a.registerName=n.registerName,F(e),t.lastMotion=null,r.isEdit&&this.recordLastEdit(t,n,r),Q[r.action](e,a,t)},processSearch:function(t,r,n){if(t.getSearchCursor){var o=n.searchArgs.forward,i=n.searchArgs.wholeWordOnly;Ae(t).setReversed(!o);var a=o?\\\"/\\\":\\\"?\\\",s=Ae(t).getQuery(),l=t.getScrollInfo();switch(n.searchArgs.querySrc){case\\\"prompt\\\":var c=O.macroModeState;c.isPlaying?f(p=c.replaySearchQueries.shift(),!0,!1):Ie(t,{onClose:function(e){t.scrollTo(l.left,l.top),f(e,!0,!0);var r=O.macroModeState;r.isRecording&&function(e,t){if(!e.isPlaying){var r=e.latestRegister,n=O.registerController.getRegister(r);n&&n.pushSearchQuery&&n.pushSearchQuery(t)}}(r,e)},prefix:a,desc:Be,onKeyUp:function(r,n,i){var a,s,c,u=e.keyName(r);\\\"Up\\\"==u||\\\"Down\\\"==u?(a=\\\"Up\\\"==u,s=r.target?r.target.selectionEnd:0,i(n=O.searchHistoryController.nextMatch(n,a)||\\\"\\\"),s&&r.target&&(r.target.selectionEnd=r.target.selectionStart=Math.min(s,r.target.value.length))):\\\"Left\\\"!=u&&\\\"Right\\\"!=u&&\\\"Ctrl\\\"!=u&&\\\"Alt\\\"!=u&&\\\"Shift\\\"!=u&&O.searchHistoryController.reset();try{c=Ke(t,n,!0,!0)}catch(r){}c?t.scrollIntoView(Pe(t,!o,c),30):(je(t),t.scrollTo(l.left,l.top))},onKeyDown:function(r,n,o){var i=e.keyName(r);\\\"Esc\\\"==i||\\\"Ctrl-C\\\"==i||\\\"Ctrl-[\\\"==i||\\\"Backspace\\\"==i&&\\\"\\\"==n?(O.searchHistoryController.pushInput(n),O.searchHistoryController.reset(),Ke(t,s),je(t),t.scrollTo(l.left,l.top),e.e_stop(r),F(t),o(),t.focus()):\\\"Up\\\"==i||\\\"Down\\\"==i?e.e_stop(r):\\\"Ctrl-U\\\"==i&&(e.e_stop(r),o(\\\"\\\"))}});break;case\\\"wordUnderCursor\\\":var u=me(t,!1,0,!1,!0),h=!0;if(u||(u=me(t,!1,0,!1,!1),h=!1),!u)return;var p=t.getLine(u.start.line).substring(u.start.ch,u.end.ch);p=h&&i?\\\"\\\\\\\\b\\\"+p+\\\"\\\\\\\\b\\\":p.replace(/([.?*+$\\\\[\\\\]\\\\/\\\\\\\\(){}|\\\\-])/g,\\\"\\\\\\\\$1\\\"),O.jumpList.cachedCursor=t.getCursor(),t.setCursor(u.start),f(p,!0,!1)}}function f(e,o,i){O.searchHistoryController.pushInput(e),O.searchHistoryController.reset();try{Ke(t,e,o,i)}catch(r){return Oe(t,\\\"Invalid regex: \\\"+e),void F(t)}U.processMotion(t,r,{type:\\\"motion\\\",motion:\\\"findNext\\\",motionArgs:{forward:!0,toJumplist:n.searchArgs.toJumplist}})}},processEx:function(t,r,n){function o(e){O.exCommandHistoryController.pushInput(e),O.exCommandHistoryController.reset(),Ve.processCommand(t,e)}function i(r,n,o){var i,a,s=e.keyName(r);(\\\"Esc\\\"==s||\\\"Ctrl-C\\\"==s||\\\"Ctrl-[\\\"==s||\\\"Backspace\\\"==s&&\\\"\\\"==n)&&(O.exCommandHistoryController.pushInput(n),O.exCommandHistoryController.reset(),e.e_stop(r),F(t),o(),t.focus()),\\\"Up\\\"==s||\\\"Down\\\"==s?(e.e_stop(r),i=\\\"Up\\\"==s,a=r.target?r.target.selectionEnd:0,o(n=O.exCommandHistoryController.nextMatch(n,i)||\\\"\\\"),a&&r.target&&(r.target.selectionEnd=r.target.selectionStart=Math.min(a,r.target.value.length))):\\\"Ctrl-U\\\"==s?(e.e_stop(r),o(\\\"\\\")):\\\"Left\\\"!=s&&\\\"Right\\\"!=s&&\\\"Ctrl\\\"!=s&&\\\"Alt\\\"!=s&&\\\"Shift\\\"!=s&&O.exCommandHistoryController.reset()}\\\"keyToEx\\\"==n.type?Ve.processCommand(t,n.exArgs.input):r.visualMode?Ie(t,{onClose:o,prefix:\\\":\\\",value:\\\"'<,'>\\\",onKeyDown:i,selectValueOnOpen:!1}):Ie(t,{onClose:o,prefix:\\\":\\\",onKeyDown:i})},evalInput:function(e,t){var r,o,i,a,s=t.inputState,l=s.motion,c=s.motionArgs||{},u=s.operator,h=s.operatorArgs||{},p=s.registerName,f=t.sel,d=ee(t.visualMode?z(e,f.head):e.getCursor(\\\"head\\\")),m=ee(t.visualMode?z(e,f.anchor):e.getCursor(\\\"anchor\\\")),g=ee(d),v=ee(m);if(u&&this.recordLastEdit(t,s),(i=void 0!==s.repeatOverride?s.repeatOverride:s.getRepeat())>0&&c.explicitRepeat?c.repeatIsExplicit=!0:(c.noRepeat||!c.explicitRepeat&&0===i)&&(i=1,c.repeatIsExplicit=!1),s.selectedCharacter&&(c.selectedCharacter=h.selectedCharacter=s.selectedCharacter),c.repeat=i,F(e),l){var y=J[l](e,d,c,t);if(t.lastMotion=J[l],!y)return;if(c.toJumplist){var k=O.jumpList,C=k.cachedCursor;C?(ge(e,C,y),delete k.cachedCursor):ge(e,d,y)}y instanceof Array?(o=y[0],r=y[1]):r=y,r||(r=ee(d)),t.visualMode?(t.visualBlock&&r.ch===1/0||(r=z(e,r,t.visualBlock)),o&&(o=z(e,o,!0)),o=o||v,f.anchor=o,f.head=r,he(e),Me(e,t,\\\"<\\\",re(o,r)?o:r),Me(e,t,\\\">\\\",re(o,r)?r:o)):u||(r=z(e,r),e.setCursor(r.line,r.ch))}if(u){if(h.lastSel){o=v;var w=h.lastSel,M=Math.abs(w.head.line-w.anchor.line),x=Math.abs(w.head.ch-w.anchor.ch);r=w.visualLine?n(v.line+M,v.ch):w.visualBlock?n(v.line+M,v.ch+x):w.head.line==w.anchor.line?n(v.line,v.ch+x):n(v.line+M,v.ch),t.visualMode=!0,t.visualLine=w.visualLine,t.visualBlock=w.visualBlock,f=t.sel={anchor:o,head:r},he(e)}else t.visualMode&&(h.lastSel={anchor:ee(f.anchor),head:ee(f.head),visualBlock:t.visualBlock,visualLine:t.visualLine});var A,b,L,T,R;if(t.visualMode){if(A=ne(f.head,f.anchor),b=oe(f.head,f.anchor),L=t.visualLine||h.linewise,R=pe(e,{anchor:A,head:b},T=t.visualBlock?\\\"block\\\":L?\\\"line\\\":\\\"char\\\"),L){var E=R.ranges;if(\\\"block\\\"==T)for(var B=0;B<E.length;B++)E[B].head.ch=ae(e,E[B].head.line);else\\\"line\\\"==T&&(E[0].head=n(E[0].head.line+1,0))}}else{if(A=ee(o||v),re(b=ee(r||g),A)){var I=A;A=b,b=I}(L=c.linewise||h.linewise)?(a=b,A.ch=0,a.ch=0,a.line++):c.forward&&function(e,t,r){var n=e.getRange(t,r);if(/\\\\n\\\\s*$/.test(n)){var o=n.split(\\\"\\\\n\\\");o.pop();for(var i=o.pop();o.length>0&&i&&S(i);i=o.pop())r.line--,r.ch=0;i?(r.line--,r.ch=ae(e,r.line)):r.ch=0}}(e,A,b),R=pe(e,{anchor:A,head:b},T=\\\"char\\\",!c.inclusive||L)}e.setSelections(R.ranges,R.primary),t.lastMotion=null,h.repeat=i,h.registerName=p,h.linewise=L;var K=q[u](e,h,R.ranges,v,r);t.visualMode&&fe(e,null!=K),K&&e.setCursor(K)}},recordLastEdit:function(e,t,r){var n=O.macroModeState;n.isPlaying||(e.lastEditInputState=t,e.lastEditActionCommand=r,n.lastInsertModeChanges.changes=[],n.lastInsertModeChanges.expectCursorActivityForChange=!1)}},J={moveToTopLine:function(e,t,r){var o=He(e).top+r.repeat-1;return n(o,de(e.getLine(o)))},moveToMiddleLine:function(e){var t=He(e),r=Math.floor(.5*(t.top+t.bottom));return n(r,de(e.getLine(r)))},moveToBottomLine:function(e,t,r){var o=He(e).bottom-r.repeat+1;return n(o,de(e.getLine(o)))},expandToLine:function(e,t,r){return n(t.line+r.repeat-1,1/0)},findNext:function(e,t,r){var n=Ae(e),o=n.getQuery();if(o){var i=!r.forward;return i=n.isReversed()?!i:i,Ne(e,o),Pe(e,i,o,r.repeat)}},goToMark:function(e,t,r,n){var o=_e(e,n,r.selectedCharacter);return o?r.linewise?{line:o.line,ch:de(e.getLine(o.line))}:o:null},moveToOtherHighlightedEnd:function(e,t,r,o){if(o.visualBlock&&r.sameLine){var i=o.sel;return[z(e,n(i.anchor.line,i.head.ch)),z(e,n(i.head.line,i.anchor.ch))]}return[o.sel.head,o.sel.anchor]},jumpToMark:function(e,t,r,o){for(var i=t,a=0;a<r.repeat;a++){var s=i;for(var l in o.marks)if(M(l)){var c=o.marks[l].find();if(!((r.forward?re(c,s):re(s,c))||r.linewise&&c.line==s.line)){var u=te(s,i),h=r.forward?ie(s,c,i):ie(i,c,s);(u||h)&&(i=c)}}}return r.linewise&&(i=n(i.line,de(e.getLine(i.line)))),i},moveByCharacters:function(e,t,r){var o=t,i=r.repeat,a=r.forward?o.ch+i:o.ch-i;return n(o.line,a)},moveByLines:function(e,t,r,o){var i=t,a=i.ch;switch(o.lastMotion){case this.moveByLines:case this.moveByDisplayLines:case this.moveByScroll:case this.moveToColumn:case this.moveToEol:a=o.lastHPos;break;default:o.lastHPos=a}var s=r.repeat+(r.repeatOffset||0),l=r.forward?i.line+s:i.line-s,c=e.firstLine(),u=e.lastLine();return l<c&&i.line==c?this.moveToStartOfLine(e,t,r,o):l>u&&i.line==u?this.moveToEol(e,t,r,o):(r.toFirstChar&&(a=de(e.getLine(l)),o.lastHPos=a),o.lastHSPos=e.charCoords(n(l,a),\\\"div\\\").left,n(l,a))},moveByDisplayLines:function(e,t,r,o){var i=t;switch(o.lastMotion){case this.moveByDisplayLines:case this.moveByScroll:case this.moveByLines:case this.moveToColumn:case this.moveToEol:break;default:o.lastHSPos=e.charCoords(i,\\\"div\\\").left}var a=r.repeat;if((l=e.findPosV(i,r.forward?a:-a,\\\"line\\\",o.lastHSPos)).hitSide)if(r.forward)var s={top:e.charCoords(l,\\\"div\\\").top+8,left:o.lastHSPos},l=e.coordsChar(s,\\\"div\\\");else{var c=e.charCoords(n(e.firstLine(),0),\\\"div\\\");c.left=o.lastHSPos,l=e.coordsChar(c,\\\"div\\\")}return o.lastHPos=l.ch,l},moveByPage:function(e,t,r){var n=t,o=r.repeat;return e.findPosV(n,r.forward?o:-o,\\\"page\\\")},moveByParagraph:function(e,t,r){var n=r.forward?1:-1;return xe(e,t,r.repeat,n)},moveBySentence:function(e,t,r){var o=r.forward?1:-1;return function(e,t,r,o){function i(e,t){if(t.pos+t.dir<0||t.pos+t.dir>=t.line.length){if(t.ln+=t.dir,!w(e,t.ln))return t.line=null,t.ln=null,void(t.pos=null);t.line=e.getLine(t.ln),t.pos=t.dir>0?0:t.line.length-1}else t.pos+=t.dir}function a(e,t,r,n){var o=e.getLine(t),a=\\\"\\\"===o,s={line:o,ln:t,pos:r,dir:n},l={ln:s.ln,pos:s.pos},c=\\\"\\\"===s.line;for(i(e,s);null!==s.line;){if(l.ln=s.ln,l.pos=s.pos,\\\"\\\"===s.line&&!c)return{ln:s.ln,pos:s.pos};if(a&&\\\"\\\"!==s.line&&!S(s.line[s.pos]))return{ln:s.ln,pos:s.pos};!A(s.line[s.pos])||a||s.pos!==s.line.length-1&&!S(s.line[s.pos+1])||(a=!0),i(e,s)}var o=e.getLine(l.ln);l.pos=0;for(var u=o.length-1;u>=0;--u)if(!S(o[u])){l.pos=u;break}return l}function s(e,t,r,n){var o=e.getLine(t),a={line:o,ln:t,pos:r,dir:n},s={ln:a.ln,pos:null},l=\\\"\\\"===a.line;for(i(e,a);null!==a.line;){if(\\\"\\\"===a.line&&!l)return null!==s.pos?s:{ln:a.ln,pos:a.pos};if(A(a.line[a.pos])&&null!==s.pos&&(a.ln!==s.ln||a.pos+1!==s.pos))return s;\\\"\\\"===a.line||S(a.line[a.pos])||(l=!1,s={ln:a.ln,pos:a.pos}),i(e,a)}var o=e.getLine(s.ln);s.pos=0;for(var c=0;c<o.length;++c)if(!S(o[c])){s.pos=c;break}return s}for(var l={ln:t.line,pos:t.ch};r>0;)l=o<0?s(e,l.ln,l.pos,o):a(e,l.ln,l.pos,o),r--;return n(l.ln,l.pos)}(e,t,r.repeat,o)},moveByScroll:function(e,t,r,n){var o=e.getScrollInfo(),i=null,a=r.repeat;a||(a=o.clientHeight/(2*e.defaultTextHeight()));var s=e.charCoords(t,\\\"local\\\");if(r.repeat=a,!(i=J.moveByDisplayLines(e,t,r,n)))return null;var l=e.charCoords(i,\\\"local\\\");return e.scrollTo(null,o.top+l.top-s.top),i},moveByWords:function(e,t,r){return function(e,t,r,o,i,a){var s=ee(t),l=[];(o&&!i||!o&&i)&&r++;for(var c=!(o&&i),u=0;u<r;u++){var h=Ce(e,t,o,a,c);if(!h){var p=ae(e,e.lastLine());l.push(o?{line:e.lastLine(),from:p,to:p}:{line:0,from:0,to:0});break}l.push(h),t=n(h.line,o?h.to-1:h.from)}var f=l.length!=r,d=l[0],m=l.pop();return o&&!i?(f||d.from==s.ch&&d.line==s.line||(m=l.pop()),n(m.line,m.from)):o&&i?n(m.line,m.to-1):!o&&i?(f||d.to==s.ch&&d.line==s.line||(m=l.pop()),n(m.line,m.to)):n(m.line,m.from)}(e,t,r.repeat,!!r.forward,!!r.wordEnd,!!r.bigWord)},moveTillCharacter:function(e,t,r){var n=we(e,r.repeat,r.forward,r.selectedCharacter),o=r.forward?-1:1;return ve(o,r),n?(n.ch+=o,n):null},moveToCharacter:function(e,t,r){var n=r.repeat;return ve(0,r),we(e,n,r.forward,r.selectedCharacter)||t},moveToSymbol:function(e,t,r){return function(e,t,r,o){var i=ee(e.getCursor()),a=r?1:-1,s=r?e.lineCount():-1,l=i.ch,c=i.line,u=e.getLine(c),h={lineText:u,nextCh:u.charAt(l),lastCh:null,index:l,symb:o,reverseSymb:(r?{\\\")\\\":\\\"(\\\",\\\"}\\\":\\\"{\\\"}:{\\\"(\\\":\\\")\\\",\\\"{\\\":\\\"}\\\"})[o],forward:r,depth:0,curMoveThrough:!1},p=ye[o];if(!p)return i;var f=ke[p].init,d=ke[p].isComplete;for(f&&f(h);c!==s&&t;){if(h.index+=a,h.nextCh=h.lineText.charAt(h.index),!h.nextCh){if(c+=a,h.lineText=e.getLine(c)||\\\"\\\",a>0)h.index=0;else{var m=h.lineText.length;h.index=m>0?m-1:0}h.nextCh=h.lineText.charAt(h.index)}d(h)&&(i.line=c,i.ch=h.index,t--)}return h.nextCh||h.curMoveThrough?n(c,h.index):i}(e,r.repeat,r.forward,r.selectedCharacter)||t},moveToColumn:function(e,t,r,o){var i,a,s,l=r.repeat;return o.lastHPos=l-1,o.lastHSPos=e.charCoords(t,\\\"div\\\").left,a=l,s=(i=e).getCursor().line,z(i,n(s,a-1))},moveToEol:function(e,t,r,o){var i=t;o.lastHPos=1/0;var a=n(i.line+r.repeat-1,1/0),s=e.clipPos(a);return s.ch--,o.lastHSPos=e.charCoords(s,\\\"div\\\").left,a},moveToFirstNonWhiteSpaceCharacter:function(e,t){var r=t;return n(r.line,de(e.getLine(r.line)))},moveToMatchedSymbol:function(e,t){for(var r,o=t,i=o.line,a=o.ch,s=e.getLine(i);a<s.length;a++)if((r=s.charAt(a))&&-1!=\\\"()[]{}\\\".indexOf(r)){var l=e.getTokenTypeAt(n(i,a+1));if(\\\"string\\\"!==l&&\\\"comment\\\"!==l)break}return a<s.length?e.findMatchingBracket(n(i,a)).to:o},moveToStartOfLine:function(e,t){return n(t.line,0)},moveToLineOrEdgeOfDocument:function(e,t,r){var o=r.forward?e.lastLine():e.firstLine();return r.repeatIsExplicit&&(o=r.repeat-e.getOption(\\\"firstLineNumber\\\")),n(o,de(e.getLine(o)))},textObjectManipulation:function(e,t,r,o){var i=r.selectedCharacter;\\\"b\\\"==i?i=\\\"(\\\":\\\"B\\\"==i&&(i=\\\"{\\\");var a,s,l,c,u,h,p,f,d=!r.textObjectInner;if({\\\"(\\\":\\\")\\\",\\\")\\\":\\\"(\\\",\\\"{\\\":\\\"}\\\",\\\"}\\\":\\\"{\\\",\\\"[\\\":\\\"]\\\",\\\"]\\\":\\\"[\\\"}[i])a=function(e,t,r,o){var i,a,s=t,l={\\\"(\\\":/[()]/,\\\")\\\":/[()]/,\\\"[\\\":/[[\\\\]]/,\\\"]\\\":/[[\\\\]]/,\\\"{\\\":/[{}]/,\\\"}\\\":/[{}]/}[r],c={\\\"(\\\":\\\"(\\\",\\\")\\\":\\\"(\\\",\\\"[\\\":\\\"[\\\",\\\"]\\\":\\\"[\\\",\\\"{\\\":\\\"{\\\",\\\"}\\\":\\\"{\\\"}[r],u=e.getLine(s.line).charAt(s.ch)===c?1:0;if(i=e.scanForBracket(n(s.line,s.ch+u),-1,void 0,{bracketRegex:l}),a=e.scanForBracket(n(s.line,s.ch+u),1,void 0,{bracketRegex:l}),!i||!a)return{start:s,end:s};if(i=i.pos,a=a.pos,i.line==a.line&&i.ch>a.ch||i.line>a.line){var h=i;i=a,a=h}return o?a.ch+=1:i.ch+=1,{start:i,end:a}}(e,t,i,d);else if({\\\"'\\\":!0,'\\\"':!0}[i])a=function(e,t,r,o){var i,a,s,l,c=ee(t),u=e.getLine(c.line).split(\\\"\\\"),h=u.indexOf(r);if(c.ch<h?c.ch=h:h<c.ch&&u[c.ch]==r&&(a=c.ch,--c.ch),u[c.ch]!=r||a)for(s=c.ch;s>-1&&!i;s--)u[s]==r&&(i=s+1);else i=c.ch+1;if(i&&!a)for(s=i,l=u.length;s<l&&!a;s++)u[s]==r&&(a=s);return i&&a?(o&&(--i,++a),{start:n(c.line,i),end:n(c.line,a)}):{start:c,end:c}}(e,t,i,d);else if(\\\"W\\\"===i)a=me(e,d,0,!0);else if(\\\"w\\\"===i)a=me(e,d,0,!1);else{if(\\\"p\\\"!==i)return null;if(a=xe(e,t,r.repeat,0,d),r.linewise=!0,o.visualMode)o.visualLine||(o.visualLine=!0);else{var m=o.inputState.operatorArgs;m&&(m.linewise=!0),a.end.line--}}return e.state.vim.visualMode?(s=e,l=a.start,c=a.end,h=s.state.vim.sel,p=h.head,f=h.anchor,re(c,l)&&(u=c,c=l,l=u),re(p,f)?(p=ne(l,p),f=oe(f,c)):(f=ne(l,f),-1==(p=G(p=oe(p,c),0,-1)).ch&&p.line!=s.firstLine()&&(p=n(p.line-1,ae(s,p.line-1)))),[f,p]):[a.start,a.end]},repeatLastCharacterSearch:function(e,t,r){var n=O.lastCharacterSearch,o=r.repeat,i=r.forward===n.forward,a=(n.increment?1:0)*(i?-1:1);e.moveH(-a,\\\"char\\\"),r.inclusive=!!i;var s=we(e,o,i,n.selectedCharacter);return s?(s.ch+=a,s):(e.moveH(a,\\\"char\\\"),t)}};function $(e,t){for(var r=[],n=0;n<t;n++)r.push(e);return r}var q={change:function(t,r,o){var i,a,s=t.state.vim;if(O.macroModeState.lastInsertModeChanges.inVisualBlock=s.visualBlock,s.visualMode){a=t.getSelection();var l=$(\\\"\\\",o.length);t.replaceSelections(l),i=ne(o[0].head,o[0].anchor)}else{var c=o[0].anchor,u=o[0].head;a=t.getRange(c,u);var h=s.lastEditInputState||{};if(\\\"moveByWords\\\"==h.motion&&!S(a)){var p=/\\\\s+$/.exec(a);p&&h.motionArgs&&h.motionArgs.forward&&(u=G(u,0,-p[0].length),a=a.slice(0,-p[0].length))}var f=new n(c.line-1,Number.MAX_VALUE),d=t.firstLine()==t.lastLine();u.line>t.lastLine()&&r.linewise&&!d?t.replaceRange(\\\"\\\",f,u):t.replaceRange(\\\"\\\",c,u),r.linewise&&(d||(t.setCursor(f),e.commands.newlineAndIndent(t)),c.ch=Number.MAX_VALUE),i=c}O.registerController.pushText(r.registerName,\\\"change\\\",a,r.linewise,o.length>1),Q.enterInsertMode(t,{head:i},t.state.vim)},delete:function(e,t,r){var o,i,a=e.state.vim;if(a.visualBlock){i=e.getSelection();var s=$(\\\"\\\",r.length);e.replaceSelections(s),o=r[0].anchor}else{var l=r[0].anchor,c=r[0].head;t.linewise&&c.line!=e.firstLine()&&l.line==e.lastLine()&&l.line==c.line-1&&(l.line==e.firstLine()?l.ch=0:l=n(l.line-1,ae(e,l.line-1))),i=e.getRange(l,c),e.replaceRange(\\\"\\\",l,c),o=l,t.linewise&&(o=J.moveToFirstNonWhiteSpaceCharacter(e,l))}return O.registerController.pushText(t.registerName,\\\"delete\\\",i,t.linewise,a.visualBlock),z(e,o,a.insertMode)},indent:function(e,t,r){var n=e.state.vim,o=r[0].anchor.line,i=n.visualBlock?r[r.length-1].anchor.line:r[0].head.line,a=n.visualMode?t.repeat:1;t.linewise&&i--;for(var s=o;s<=i;s++)for(var l=0;l<a;l++)e.indentLine(s,t.indentRight);return J.moveToFirstNonWhiteSpaceCharacter(e,r[0].anchor)},changeCase:function(e,t,r,n,o){for(var i=e.getSelections(),a=[],s=t.toLower,l=0;l<i.length;l++){var c=i[l],u=\\\"\\\";if(!0===s)u=c.toLowerCase();else if(!1===s)u=c.toUpperCase();else for(var h=0;h<c.length;h++){var p=c.charAt(h);u+=x(p)?p.toLowerCase():p.toUpperCase()}a.push(u)}return e.replaceSelections(a),t.shouldMoveCursor?o:!e.state.vim.visualMode&&t.linewise&&r[0].anchor.line+1==r[0].head.line?J.moveToFirstNonWhiteSpaceCharacter(e,n):t.linewise?n:ne(r[0].anchor,r[0].head)},yank:function(e,t,r,n){var o=e.state.vim,i=e.getSelection(),a=o.visualMode?ne(o.sel.anchor,o.sel.head,r[0].head,r[0].anchor):n;return O.registerController.pushText(t.registerName,\\\"yank\\\",i,t.linewise,o.visualBlock),a}};var Q={jumpListWalk:function(e,t,r){if(!r.visualMode){var n=t.repeat,o=t.forward,i=O.jumpList.move(e,o?n:-n),a=i?i.find():void 0;a=a||e.getCursor(),e.setCursor(a)}},scroll:function(e,t,r){if(!r.visualMode){var n=t.repeat||1,o=e.defaultTextHeight(),i=e.getScrollInfo().top,a=o*n,s=t.forward?i+a:i-a,l=ee(e.getCursor()),c=e.charCoords(l,\\\"local\\\");if(t.forward)s>c.top?(l.line+=(s-c.top)/o,l.line=Math.ceil(l.line),e.setCursor(l),c=e.charCoords(l,\\\"local\\\"),e.scrollTo(null,c.top)):e.scrollTo(null,s);else{var u=s+e.getScrollInfo().clientHeight;u<c.bottom?(l.line-=(c.bottom-u)/o,l.line=Math.floor(l.line),e.setCursor(l),c=e.charCoords(l,\\\"local\\\"),e.scrollTo(null,c.bottom-e.getScrollInfo().clientHeight)):e.scrollTo(null,s)}}},scrollToCursor:function(e,t){var r=e.getCursor().line,o=e.charCoords(n(r,0),\\\"local\\\"),i=e.getScrollInfo().clientHeight,a=o.top,s=o.bottom-a;switch(t.position){case\\\"center\\\":a=a-i/2+s;break;case\\\"bottom\\\":a=a-i+s}e.scrollTo(null,a)},replayMacro:function(e,t,r){var n=t.selectedCharacter,o=t.repeat,i=O.macroModeState;for(\\\"@\\\"==n&&(n=i.latestRegister);o--;)Je(e,r,i,n)},enterMacroRecordMode:function(e,t){var r=O.macroModeState,n=t.selectedCharacter;O.registerController.isValidRegister(n)&&r.enterMacroRecordMode(e,n)},toggleOverwrite:function(t){t.state.overwrite?(t.toggleOverwrite(!1),t.setOption(\\\"keyMap\\\",\\\"vim-insert\\\"),e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"insert\\\"})):(t.toggleOverwrite(!0),t.setOption(\\\"keyMap\\\",\\\"vim-replace\\\"),e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"replace\\\"}))},enterInsertMode:function(t,r,o){if(!t.getOption(\\\"readOnly\\\")){o.insertMode=!0,o.insertModeRepeat=r&&r.repeat||1;var i=r?r.insertAt:null,a=o.sel,s=r.head||t.getCursor(\\\"head\\\"),l=t.listSelections().length;if(\\\"eol\\\"==i)s=n(s.line,ae(t,s.line));else if(\\\"charAfter\\\"==i)s=G(s,0,1);else if(\\\"firstNonBlank\\\"==i)s=J.moveToFirstNonWhiteSpaceCharacter(t,s);else if(\\\"startOfSelectedArea\\\"==i)o.visualBlock?(s=n(Math.min(a.head.line,a.anchor.line),Math.min(a.head.ch,a.anchor.ch)),l=Math.abs(a.head.line-a.anchor.line)+1):s=a.head.line<a.anchor.line?a.head:n(a.anchor.line,0);else if(\\\"endOfSelectedArea\\\"==i)o.visualBlock?(s=n(Math.min(a.head.line,a.anchor.line),Math.max(a.head.ch+1,a.anchor.ch)),l=Math.abs(a.head.line-a.anchor.line)+1):s=a.head.line>=a.anchor.line?G(a.head,0,1):n(a.anchor.line,0);else if(\\\"inplace\\\"==i&&o.visualMode)return;t.setOption(\\\"disableInput\\\",!1),r&&r.replace?(t.toggleOverwrite(!0),t.setOption(\\\"keyMap\\\",\\\"vim-replace\\\"),e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"replace\\\"})):(t.toggleOverwrite(!1),t.setOption(\\\"keyMap\\\",\\\"vim-insert\\\"),e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"insert\\\"})),O.macroModeState.isPlaying||(t.on(\\\"change\\\",$e),e.on(t.getInputField(),\\\"keydown\\\",Ze)),o.visualMode&&fe(t),ce(t,s,l)}},toggleVisualMode:function(t,r,o){var i,a=r.repeat,s=t.getCursor();o.visualMode?o.visualLine^r.linewise||o.visualBlock^r.blockwise?(o.visualLine=!!r.linewise,o.visualBlock=!!r.blockwise,e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"visual\\\",subMode:o.visualLine?\\\"linewise\\\":o.visualBlock?\\\"blockwise\\\":\\\"\\\"}),he(t)):fe(t):(o.visualMode=!0,o.visualLine=!!r.linewise,o.visualBlock=!!r.blockwise,i=z(t,n(s.line,s.ch+a-1),!0),o.sel={anchor:s,head:i},e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"visual\\\",subMode:o.visualLine?\\\"linewise\\\":o.visualBlock?\\\"blockwise\\\":\\\"\\\"}),he(t),Me(t,o,\\\"<\\\",ne(s,i)),Me(t,o,\\\">\\\",oe(s,i)))},reselectLastSelection:function(t,r,n){var o=n.lastSelection;if(n.visualMode&&ue(t,n),o){var i=o.anchorMark.find(),a=o.headMark.find();if(!i||!a)return;n.sel={anchor:i,head:a},n.visualMode=!0,n.visualLine=o.visualLine,n.visualBlock=o.visualBlock,he(t),Me(t,n,\\\"<\\\",ne(i,a)),Me(t,n,\\\">\\\",oe(i,a)),e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"visual\\\",subMode:n.visualLine?\\\"linewise\\\":n.visualBlock?\\\"blockwise\\\":\\\"\\\"})}},joinLines:function(e,t,r){var o,i;if(r.visualMode){if(o=e.getCursor(\\\"anchor\\\"),re(i=e.getCursor(\\\"head\\\"),o)){var a=i;i=o,o=a}i.ch=ae(e,i.line)-1}else{var s=Math.max(t.repeat,2);o=e.getCursor(),i=z(e,n(o.line+s-1,1/0))}for(var l=0,c=o.line;c<i.line;c++){l=ae(e,o.line),a=n(o.line+1,ae(e,o.line+1));var u=e.getRange(o,a);u=u.replace(/\\\\n\\\\s*/g,\\\" \\\"),e.replaceRange(u,o,a)}var h=n(o.line,l);r.visualMode&&fe(e,!1),e.setCursor(h)},newLineAndEnterInsertMode:function(t,r,o){o.insertMode=!0;var i=ee(t.getCursor());i.line!==t.firstLine()||r.after?(i.line=r.after?i.line:i.line-1,i.ch=ae(t,i.line),t.setCursor(i),(e.commands.newlineAndIndentContinueComment||e.commands.newlineAndIndent)(t)):(t.replaceRange(\\\"\\\\n\\\",n(t.firstLine(),0)),t.setCursor(t.firstLine(),0)),this.enterInsertMode(t,{repeat:r.repeat},o)},paste:function(e,t,r){var o,i,a,s,l,c=ee(e.getCursor()),u=O.registerController.getRegister(t.registerName);if(y=u.toString()){if(t.matchIndent){var h=e.getOption(\\\"tabSize\\\"),p=function(e){var t=e.split(\\\"\\\\t\\\").length-1,r=e.split(\\\" \\\").length-1;return t*h+1*r},f=e.getLine(e.getCursor().line),d=p(f.match(/^\\\\s*/)[0]),m=y.replace(/\\\\n$/,\\\"\\\"),g=y!==m,v=p(y.match(/^\\\\s*/)[0]),y=m.replace(/^\\\\s*/gm,function(t){var r=d+(p(t)-v);if(r<0)return\\\"\\\";if(e.getOption(\\\"indentWithTabs\\\")){var n=Math.floor(r/h);return Array(n+1).join(\\\"\\\\t\\\")}return Array(r+1).join(\\\" \\\")});y+=g?\\\"\\\\n\\\":\\\"\\\"}t.repeat>1&&(y=Array(t.repeat+1).join(y));var k,C,w,M,x,S,A,b,L,T,R=u.linewise,E=u.blockwise;if(R)r.visualMode?y=r.visualLine?y.slice(0,-1):\\\"\\\\n\\\"+y.slice(0,y.length-1)+\\\"\\\\n\\\":t.after?(y=\\\"\\\\n\\\"+y.slice(0,y.length-1),c.ch=ae(e,c.line)):c.ch=0;else{if(E){y=y.split(\\\"\\\\n\\\");for(var B=0;B<y.length;B++)y[B]=\\\"\\\"==y[B]?\\\" \\\":y[B]}c.ch+=t.after?1:0}if(r.visualMode){var I;r.lastPastedText=y;var K=(w=e,x=(M=r).lastSelection,M.visualMode?(S=w.listSelections(),A=S[0],b=S[S.length-1],L=re(A.anchor,A.head)?A.anchor:A.head,T=re(b.anchor,b.head)?b.head:b.anchor,[L,T]):function(){var e=w.getCursor(),t=w.getCursor(),r=x.visualBlock;if(r){var o=r.width,i=r.height;t=n(e.line+i,e.ch+o);for(var a=[],s=e.line;s<t.line;s++){var l=n(s,e.ch),c=n(s,t.ch),u={anchor:l,head:c};a.push(u)}w.setSelections(a)}else{var h=x.anchorMark.find(),p=x.headMark.find(),f=p.line-h.line,d=p.ch-h.ch;t={line:t.line+f,ch:f?t.ch:d+t.ch},x.visualLine&&(e=n(e.line,0),t=n(t.line,ae(w,t.line))),w.setSelection(e,t)}return[e,t]}()),N=K[0],P=K[1],j=e.getSelection(),H=e.listSelections(),_=new Array(H.length).join(\\\"1\\\").split(\\\"1\\\");r.lastSelection&&(I=r.lastSelection.headMark.find()),O.registerController.unnamedRegister.setText(j),E?(e.replaceSelections(_),P=n(N.line+y.length-1,N.ch),e.setCursor(N),le(e,P),e.replaceSelections(y),k=N):r.visualBlock?(e.replaceSelections(_),e.setCursor(N),e.replaceRange(y,N,N),k=N):(e.replaceRange(y,N,P),k=e.posFromIndex(e.indexFromPos(N)+y.length-1)),I&&(r.lastSelection.headMark=e.setBookmark(I)),R&&(k.ch=0)}else if(E){for(e.setCursor(c),B=0;B<y.length;B++){var F=c.line+B;F>e.lastLine()&&e.replaceRange(\\\"\\\\n\\\",n(F,0)),ae(e,F)<c.ch&&(o=e,i=F,a=c.ch,void 0,void 0,s=ae(o,i),l=new Array(a-s+1).join(\\\" \\\"),o.setCursor(n(i,s)),o.replaceRange(l,o.getCursor()))}e.setCursor(c),le(e,n(c.line+y.length-1,c.ch)),e.replaceSelections(y),k=c}else e.replaceRange(y,c),R&&t.after?k=n(c.line+1,de(e.getLine(c.line+1))):R&&!t.after?k=n(c.line,de(e.getLine(c.line))):!R&&t.after?(C=e.indexFromPos(c),k=e.posFromIndex(C+y.length-1)):(C=e.indexFromPos(c),k=e.posFromIndex(C+y.length));r.visualMode&&fe(e,!1),e.setCursor(k)}},undo:function(t,r){t.operation(function(){Y(t,e.commands.undo,r.repeat)(),t.setCursor(t.getCursor(\\\"anchor\\\"))})},redo:function(t,r){Y(t,e.commands.redo,r.repeat)()},setRegister:function(e,t,r){r.inputState.registerName=t.selectedCharacter},setMark:function(e,t,r){Me(e,r,t.selectedCharacter,e.getCursor())},replace:function(t,r,o){var i,a,s=r.selectedCharacter,l=t.getCursor(),c=t.listSelections();if(o.visualMode)l=t.getCursor(\\\"start\\\"),a=t.getCursor(\\\"end\\\");else{var u=t.getLine(l.line);(i=l.ch+r.repeat)>u.length&&(i=u.length),a=n(l.line,i)}if(\\\"\\\\n\\\"==s)o.visualMode||t.replaceRange(\\\"\\\",l,a),(e.commands.newlineAndIndentContinueComment||e.commands.newlineAndIndent)(t);else{var h=t.getRange(l,a);if(h=h.replace(/[^\\\\n]/g,s),o.visualBlock){var p=new Array(t.getOption(\\\"tabSize\\\")+1).join(\\\" \\\");h=(h=t.getSelection()).replace(/\\\\t/g,p).replace(/[^\\\\n]/g,s).split(\\\"\\\\n\\\"),t.replaceSelections(h)}else t.replaceRange(h,l,a);o.visualMode?(l=re(c[0].anchor,c[0].head)?c[0].anchor:c[0].head,t.setCursor(l),fe(t,!1)):t.setCursor(G(a,0,-1))}},incrementNumberToken:function(e,t){for(var r,o,i,a,s=e.getCursor(),l=e.getLine(s.line),c=/(-?)(?:(0x)([\\\\da-f]+)|(0b|0|)(\\\\d+))/gi;null!==(r=c.exec(l))&&(i=(o=r.index)+r[0].length,!(s.ch<i)););if((t.backtrack||!(i<=s.ch))&&r){var u=r[2]||r[4],h=r[3]||r[5],p=t.increase?1:-1,f={\\\"0b\\\":2,0:8,\\\"\\\":10,\\\"0x\\\":16}[u.toLowerCase()];a=(parseInt(r[1]+h,f)+p*t.repeat).toString(f);var d=u?new Array(h.length-a.length+1+r[1].length).join(\\\"0\\\"):\\\"\\\";a=\\\"-\\\"===a.charAt(0)?\\\"-\\\"+u+d+a.substr(1):u+d+a;var m=n(s.line,o),g=n(s.line,i);e.replaceRange(a,m,g),e.setCursor(n(s.line,o+a.length-1))}},repeatLastEdit:function(e,t,r){if(r.lastEditInputState){var n=t.repeat;n&&t.repeatIsExplicit?r.lastEditInputState.repeatOverride=n:n=r.lastEditInputState.repeatOverride||n,Ge(e,r,n,!1)}},indent:function(e,t){e.indentLine(e.getCursor().line,t.indentRight)},exitInsertMode:De};function z(e,t,r){var o=Math.min(Math.max(e.firstLine(),t.line),e.lastLine()),i=ae(e,o)-1;i=r?i+1:i;var a=Math.min(Math.max(0,t.ch),i);return n(o,a)}function Z(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t}function G(e,t,r){return\\\"object\\\"==typeof t&&(r=t.ch,t=t.line),n(e.line+t,e.ch+r)}function X(e,t){if(\\\"<character>\\\"==t.slice(-11)){var r=t.length-11,n=e.slice(0,r),o=t.slice(0,r);return n==o&&e.length>r?\\\"full\\\":0==o.indexOf(n)&&\\\"partial\\\"}return e==t?\\\"full\\\":0==t.indexOf(e)&&\\\"partial\\\"}function Y(e,t,r){return function(){for(var n=0;n<r;n++)t(e)}}function ee(e){return n(e.line,e.ch)}function te(e,t){return e.ch==t.ch&&e.line==t.line}function re(e,t){return e.line<t.line||e.line==t.line&&e.ch<t.ch}function ne(e,t){return arguments.length>2&&(t=ne.apply(void 0,Array.prototype.slice.call(arguments,1))),re(e,t)?e:t}function oe(e,t){return arguments.length>2&&(t=oe.apply(void 0,Array.prototype.slice.call(arguments,1))),re(e,t)?t:e}function ie(e,t,r){var n=re(e,t),o=re(t,r);return n&&o}function ae(e,t){return e.getLine(t).length}function se(e){return e.trim?e.trim():e.replace(/^\\\\s+|\\\\s+$/g,\\\"\\\")}function le(e,t){var r=[],o=e.listSelections(),i=ee(e.clipPos(t)),a=!te(t,i),s=function(e,t,r){for(var n=0;n<e.length;n++){var o=\\\"head\\\"!=r&&te(e[n].anchor,t),i=\\\"anchor\\\"!=r&&te(e[n].head,t);if(o||i)return n}return-1}(o,e.getCursor(\\\"head\\\")),l=te(o[s].head,o[s].anchor),c=o.length-1,u=c-s>s?c:0,h=o[u].anchor,p=Math.min(h.line,i.line),f=Math.max(h.line,i.line),d=h.ch,m=i.ch,g=o[u].head.ch-d,v=m-d;g>0&&v<=0?(d++,a||m--):g<0&&v>=0?(d--,l||m++):g<0&&-1==v&&(d--,m++);for(var y=p;y<=f;y++){var k={anchor:new n(y,d),head:new n(y,m)};r.push(k)}return e.setSelections(r),t.ch=m,h.ch=d,h}function ce(e,t,r){for(var n=[],o=0;o<r;o++){var i=G(t,o,0);n.push({anchor:i,head:i})}e.setSelections(n,0)}function ue(e,t){var r=t.sel.anchor,n=t.sel.head;t.lastPastedText&&(n=e.posFromIndex(e.indexFromPos(r)+t.lastPastedText.length),t.lastPastedText=null),t.lastSelection={anchorMark:e.setBookmark(r),headMark:e.setBookmark(n),anchor:ee(r),head:ee(n),visualMode:t.visualMode,visualLine:t.visualLine,visualBlock:t.visualBlock}}function he(e,t,r){var n=e.state.vim,o=pe(e,t=t||n.sel,r=r||n.visualLine?\\\"line\\\":n.visualBlock?\\\"block\\\":\\\"char\\\");e.setSelections(o.ranges,o.primary),Qe(e)}function pe(e,t,r,o){var i=ee(t.head),a=ee(t.anchor);if(\\\"char\\\"==r){var s=o||re(t.head,t.anchor)?0:1,l=re(t.head,t.anchor)?1:0;return i=G(t.head,0,s),{ranges:[{anchor:a=G(t.anchor,0,l),head:i}],primary:0}}if(\\\"line\\\"==r){if(re(t.head,t.anchor))i.ch=0,a.ch=ae(e,a.line);else{a.ch=0;var c=e.lastLine();i.line>c&&(i.line=c),i.ch=ae(e,i.line)}return{ranges:[{anchor:a,head:i}],primary:0}}if(\\\"block\\\"==r){for(var u=Math.min(a.line,i.line),h=Math.min(a.ch,i.ch),p=Math.max(a.line,i.line),f=Math.max(a.ch,i.ch)+1,d=p-u+1,m=i.line==u?0:d-1,g=[],v=0;v<d;v++)g.push({anchor:n(u+v,h),head:n(u+v,f)});return{ranges:g,primary:m}}}function fe(t,r){var n=t.state.vim;!1!==r&&t.setCursor(z(t,n.sel.head)),ue(t,n),n.visualMode=!1,n.visualLine=!1,n.visualBlock=!1,e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"normal\\\"}),n.fakeCursor&&n.fakeCursor.clear()}function de(e){if(!e)return 0;var t=e.search(/\\\\S/);return-1==t?e.length:t}function me(e,t,r,o,i){for(var a,s,l=(s=(a=e).getCursor(\\\"head\\\"),1==a.getSelection().length&&(s=ne(s,a.getCursor(\\\"anchor\\\"))),s),c=e.getLine(l.line),u=l.ch,h=i?f[0]:d[0];!h(c.charAt(u));)if(++u>=c.length)return null;o?h=d[0]:(h=f[0])(c.charAt(u))||(h=f[1]);for(var p=u,m=u;h(c.charAt(p))&&p<c.length;)p++;for(;h(c.charAt(m))&&m>=0;)m--;if(m++,t){for(var g=p;/\\\\s/.test(c.charAt(p))&&p<c.length;)p++;if(g==p){for(var v=m;/\\\\s/.test(c.charAt(m-1))&&m>0;)m--;m||(m=v)}}return{start:n(l.line,m),end:n(l.line,p)}}function ge(e,t,r){te(t,r)||O.jumpList.add(e,t,r)}function ve(e,t){O.lastCharacterSearch.increment=e,O.lastCharacterSearch.forward=t.forward,O.lastCharacterSearch.selectedCharacter=t.selectedCharacter}var ye={\\\"(\\\":\\\"bracket\\\",\\\")\\\":\\\"bracket\\\",\\\"{\\\":\\\"bracket\\\",\\\"}\\\":\\\"bracket\\\",\\\"[\\\":\\\"section\\\",\\\"]\\\":\\\"section\\\",\\\"*\\\":\\\"comment\\\",\\\"/\\\":\\\"comment\\\",m:\\\"method\\\",M:\\\"method\\\",\\\"#\\\":\\\"preprocess\\\"},ke={bracket:{isComplete:function(e){if(e.nextCh===e.symb){if(e.depth++,e.depth>=1)return!0}else e.nextCh===e.reverseSymb&&e.depth--;return!1}},section:{init:function(e){e.curMoveThrough=!0,e.symb=(e.forward?\\\"]\\\":\\\"[\\\")===e.symb?\\\"{\\\":\\\"}\\\"},isComplete:function(e){return 0===e.index&&e.nextCh===e.symb}},comment:{isComplete:function(e){var t=\\\"*\\\"===e.lastCh&&\\\"/\\\"===e.nextCh;return e.lastCh=e.nextCh,t}},method:{init:function(e){e.symb=\\\"m\\\"===e.symb?\\\"{\\\":\\\"}\\\",e.reverseSymb=\\\"{\\\"===e.symb?\\\"}\\\":\\\"{\\\"},isComplete:function(e){return e.nextCh===e.symb}},preprocess:{init:function(e){e.index=0},isComplete:function(e){if(\\\"#\\\"===e.nextCh){var t=e.lineText.match(/#(\\\\w+)/)[1];if(\\\"endif\\\"===t){if(e.forward&&0===e.depth)return!0;e.depth++}else if(\\\"if\\\"===t){if(!e.forward&&0===e.depth)return!0;e.depth--}if(\\\"else\\\"===t&&0===e.depth)return!0}return!1}}};function Ce(e,t,r,n,o){var i=t.line,a=t.ch,s=e.getLine(i),l=r?1:-1,c=n?d:f;if(o&&\\\"\\\"==s){if(i+=l,s=e.getLine(i),!w(e,i))return null;a=r?0:s.length}for(;;){if(o&&\\\"\\\"==s)return{from:0,to:0,line:i};for(var u=l>0?s.length:-1,h=u,p=u;a!=u;){for(var m=!1,g=0;g<c.length&&!m;++g)if(c[g](s.charAt(a))){for(h=a;a!=u&&c[g](s.charAt(a));)a+=l;if(m=h!=(p=a),h==t.ch&&i==t.line&&p==h+l)continue;return{from:Math.min(h,p+1),to:Math.max(h,p),line:i}}m||(a+=l)}if(!w(e,i+=l))return null;s=e.getLine(i),a=l>0?0:s.length}}function we(e,t,r,o){for(var i,a=e.getCursor(),s=a.ch,l=0;l<t;l++){if(-1==(c=s,u=e.getLine(a.line),h=o,p=!0,f=void 0,r?-1==(f=u.indexOf(h,c+1))||p||(f-=1):-1==(f=u.lastIndexOf(h,c-1))||p||(f+=1),i=f))return null;s=i}var c,u,h,p,f;return n(e.getCursor().line,i)}function Me(e,t,r,n){b(r,k)&&(t.marks[r]&&t.marks[r].clear(),t.marks[r]=e.setBookmark(n))}function xe(e,t,r,o,i){var a,s=t.line,l=e.firstLine(),c=e.lastLine(),u=s;function h(t){return!e.getLine(t)}function p(e,t,r){return r?h(e)!=h(e+t):!h(e)&&h(e+t)}if(o){for(;l<=u&&u<=c&&r>0;)p(u,o)&&r--,u+=o;return new n(u,0)}var f=e.state.vim;if(f.visualLine&&p(s,1,!0)){var d=f.sel.anchor;p(d.line,-1,!0)&&(i&&d.line==s||(s+=1))}var m=h(s);for(u=s;u<=c&&r;u++)p(u,1,!0)&&(i&&h(u)==m||r--);for(a=new n(u,0),u>c&&!m?m=!0:i=!1,u=s;u>l&&(i&&h(u)!=m&&u!=s||!p(u,-1,!0));u--);return{start:new n(u,0),end:a}}function Se(){}function Ae(e){var t=e.state.vim;return t.searchState_||(t.searchState_=new Se)}function be(e,t){var r=Le(e,t)||[];if(!r.length)return[];var n=[];if(0===r[0]){for(var o=0;o<r.length;o++)\\\"number\\\"==typeof r[o]&&n.push(e.substring(r[o]+1,r[o+1]));return n}}function Le(e,t){t||(t=\\\"/\\\");for(var r=!1,n=[],o=0;o<e.length;o++){var i=e.charAt(o);r||i!=t||n.push(o),r=!r&&\\\"\\\\\\\\\\\"==i}return n}T(\\\"pcre\\\",!0,\\\"boolean\\\"),Se.prototype={getQuery:function(){return O.query},setQuery:function(e){O.query=e},getOverlay:function(){return this.searchOverlay},setOverlay:function(e){this.searchOverlay=e},isReversed:function(){return O.isReversed},setReversed:function(e){O.isReversed=e},getScrollbarAnnotate:function(){return this.annotate},setScrollbarAnnotate:function(e){this.annotate=e}};var Te={\\\"\\\\\\\\n\\\":\\\"\\\\n\\\",\\\"\\\\\\\\r\\\":\\\"\\\\r\\\",\\\"\\\\\\\\t\\\":\\\"\\\\t\\\"};var Re={\\\"\\\\\\\\/\\\":\\\"/\\\",\\\"\\\\\\\\\\\\\\\\\\\":\\\"\\\\\\\\\\\",\\\"\\\\\\\\n\\\":\\\"\\\\n\\\",\\\"\\\\\\\\r\\\":\\\"\\\\r\\\",\\\"\\\\\\\\t\\\":\\\"\\\\t\\\"};function Ee(e,t,r){if(O.registerController.getRegister(\\\"/\\\").setText(e),e instanceof RegExp)return e;var n,o,i=Le(e,\\\"/\\\");return i.length?(n=e.substring(0,i[0]),o=-1!=e.substring(i[0]).indexOf(\\\"i\\\")):n=e,n?(E(\\\"pcre\\\")||(n=function(e){for(var t=!1,r=[],n=-1;n<e.length;n++){var o=e.charAt(n)||\\\"\\\",i=e.charAt(n+1)||\\\"\\\",a=i&&-1!=\\\"|(){\\\".indexOf(i);t?(\\\"\\\\\\\\\\\"===o&&a||r.push(o),t=!1):\\\"\\\\\\\\\\\"===o?(t=!0,i&&-1!=\\\"}\\\".indexOf(i)&&(a=!0),a&&\\\"\\\\\\\\\\\"!==i||r.push(o)):(r.push(o),a&&\\\"\\\\\\\\\\\"!==i&&r.push(\\\"\\\\\\\\\\\"))}return r.join(\\\"\\\")}(n)),r&&(t=/^[^A-Z]*$/.test(n)),new RegExp(n,t||o?\\\"i\\\":void 0)):null}function Oe(e,t){e.openNotification?e.openNotification('<span style=\\\"color: red\\\">'+t+\\\"</span>\\\",{bottom:!0,duration:5e3}):alert(t)}var Be=\\\"(Javascript regexp)\\\";function Ie(e,t){var r,n,o,i,a,s,l,c,u=(t.prefix||\\\"\\\")+\\\" \\\"+(t.desc||\\\"\\\"),h=(r=t.prefix,n=t.desc,o='<span style=\\\"font-family: monospace; white-space: pre\\\">'+(r||\\\"\\\")+'<input type=\\\"text\\\"></span>',n&&(o+=' <span style=\\\"color: #888\\\">'+n+\\\"</span>\\\"),o);i=e,a=h,s=u,l=t.onClose,c=t,i.openDialog?i.openDialog(a,l,{bottom:!0,value:c.value,onKeyDown:c.onKeyDown,onKeyUp:c.onKeyUp,selectValueOnOpen:!1}):l(prompt(s,\\\"\\\"))}function Ke(e,t,r,n){if(t){var o=Ae(e),i=Ee(t,!!r,!!n);if(i)return Ne(e,i),function(e,t){if(e instanceof RegExp&&t instanceof RegExp){for(var r=[\\\"global\\\",\\\"multiline\\\",\\\"ignoreCase\\\",\\\"source\\\"],n=0;n<r.length;n++){var o=r[n];if(e[o]!==t[o])return!1}return!0}return!1}(i,o.getQuery())?i:(o.setQuery(i),i)}}function Ne(e,t){var r=Ae(e),n=r.getOverlay();n&&t==n.query||(n&&e.removeOverlay(n),n=function(e){if(\\\"^\\\"==e.source.charAt(0))var t=!0;return{token:function(r){if(!t||r.sol()){var n=r.match(e,!1);if(n)return 0==n[0].length?(r.next(),\\\"searching\\\"):r.sol()||(r.backUp(1),e.exec(r.next()+n[0]))?(r.match(e),\\\"searching\\\"):(r.next(),null);for(;!r.eol()&&(r.next(),!r.match(e,!1)););}else r.skipToEnd()},query:e}}(t),e.addOverlay(n),e.showMatchesOnScrollbar&&(r.getScrollbarAnnotate()&&r.getScrollbarAnnotate().clear(),r.setScrollbarAnnotate(e.showMatchesOnScrollbar(t))),r.setOverlay(n))}function Pe(e,t,r,o){return void 0===o&&(o=1),e.operation(function(){for(var i=e.getCursor(),a=e.getSearchCursor(r,i),s=0;s<o;s++){var l=a.find(t);if(0==s&&l&&te(a.from(),i)&&(l=a.find(t)),!l&&!(a=e.getSearchCursor(r,t?n(e.lastLine()):n(e.firstLine(),0))).find(t))return}return a.from()})}function je(e){var t=Ae(e);e.removeOverlay(Ae(e).getOverlay()),t.setOverlay(null),t.getScrollbarAnnotate()&&(t.getScrollbarAnnotate().clear(),t.setScrollbarAnnotate(null))}function He(e){var t=e.getScrollInfo(),r=e.coordsChar({left:0,top:6+t.top},\\\"local\\\"),n=t.clientHeight-10+t.top,o=e.coordsChar({left:0,top:n},\\\"local\\\");return{top:r.line,bottom:o.line}}function _e(e,t,r){if(\\\"'\\\"==r){var n=e.doc.history.done,o=n[n.length-2];return o&&o.ranges&&o.ranges[0].head}if(\\\".\\\"==r){if(0==e.doc.history.lastModTime)return;var i=e.doc.history.done.filter(function(e){if(void 0!==e.changes)return e});return i.reverse(),i[0].changes[0].to}var a=t.marks[r];return a&&a.find()}var Fe=function(){this.buildCommandMap_()};Fe.prototype={processCommand:function(e,t,r){var n=this;e.operation(function(){e.curOp.isVimOp=!0,n._processCommand(e,t,r)})},_processCommand:function(t,r,n){var o=t.state.vim,i=O.registerController.getRegister(\\\":\\\"),a=i.toString();o.visualMode&&fe(t);var s=new e.StringStream(r);i.setText(r);var l,c,u=n||{};u.input=r;try{this.parseInput_(t,s,u)}catch(e){throw Oe(t,e),e}if(u.commandName){if(l=this.matchCommand_(u.commandName)){if(c=l.name,l.excludeFromCommandHistory&&i.setText(a),this.parseCommandArgs_(s,u,l),\\\"exToKey\\\"==l.type){for(var h=0;h<l.toKeys.length;h++)e.Vim.handleKey(t,l.toKeys[h],\\\"mapping\\\");return}if(\\\"exToEx\\\"==l.type)return void this.processCommand(t,l.toInput)}}else void 0!==u.line&&(c=\\\"move\\\");if(c)try{We[c](t,u),l&&l.possiblyAsync||!u.callback||u.callback()}catch(e){throw Oe(t,e),e}else Oe(t,'Not an editor command \\\":'+r+'\\\"')},parseInput_:function(e,t,r){t.eatWhile(\\\":\\\"),t.eat(\\\"%\\\")?(r.line=e.firstLine(),r.lineEnd=e.lastLine()):(r.line=this.parseLineSpec_(e,t),void 0!==r.line&&t.eat(\\\",\\\")&&(r.lineEnd=this.parseLineSpec_(e,t)));var n=t.match(/^(\\\\w+)/);return r.commandName=n?n[1]:t.match(/.*/)[0],r},parseLineSpec_:function(e,t){var r=t.match(/^(\\\\d+)/);if(r)return parseInt(r[1],10)-1;switch(t.next()){case\\\".\\\":return this.parseLineSpecOffset_(t,e.getCursor().line);case\\\"$\\\":return this.parseLineSpecOffset_(t,e.lastLine());case\\\"'\\\":var n=t.next(),o=_e(e,e.state.vim,n);if(!o)throw new Error(\\\"Mark not set\\\");return this.parseLineSpecOffset_(t,o.line);case\\\"-\\\":case\\\"+\\\":return t.backUp(1),this.parseLineSpecOffset_(t,e.getCursor().line);default:return void t.backUp(1)}},parseLineSpecOffset_:function(e,t){var r=e.match(/^([+-])?(\\\\d+)/);if(r){var n=parseInt(r[2],10);\\\"-\\\"==r[1]?t-=n:t+=n}return t},parseCommandArgs_:function(e,t,r){if(!e.eol()){t.argString=e.match(/.*/)[0];var n=r.argDelimiter||/\\\\s+/,o=se(t.argString).split(n);o.length&&o[0]&&(t.args=o)}},matchCommand_:function(e){for(var t=e.length;t>0;t--){var r=e.substring(0,t);if(this.commandMap_[r]){var n=this.commandMap_[r];if(0===n.name.indexOf(e))return n}}return null},buildCommandMap_:function(){this.commandMap_={};for(var e=0;e<r.length;e++){var t=r[e],n=t.shortName||t.name;this.commandMap_[n]=t}},map:function(e,r,n){if(\\\":\\\"!=e&&\\\":\\\"==e.charAt(0)){if(n)throw Error(\\\"Mode not supported for ex mappings\\\");var o=e.substring(1);\\\":\\\"!=r&&\\\":\\\"==r.charAt(0)?this.commandMap_[o]={name:o,type:\\\"exToEx\\\",toInput:r.substring(1),user:!0}:this.commandMap_[o]={name:o,type:\\\"exToKey\\\",toKeys:r,user:!0}}else if(\\\":\\\"!=r&&\\\":\\\"==r.charAt(0)){var i={keys:e,type:\\\"keyToEx\\\",exArgs:{input:r.substring(1)}};n&&(i.context=n),t.unshift(i)}else i={keys:e,type:\\\"keyToKey\\\",toKeys:r},n&&(i.context=n),t.unshift(i)},unmap:function(e,r){if(\\\":\\\"!=e&&\\\":\\\"==e.charAt(0)){if(r)throw Error(\\\"Mode not supported for ex mappings\\\");var n=e.substring(1);if(this.commandMap_[n]&&this.commandMap_[n].user)return void delete this.commandMap_[n]}else for(var o=e,i=0;i<t.length;i++)if(o==t[i].keys&&t[i].context===r)return void t.splice(i,1);throw Error(\\\"No such mapping.\\\")}};var We={colorscheme:function(e,t){!t.args||t.args.length<1?Oe(e,e.getOption(\\\"theme\\\")):e.setOption(\\\"theme\\\",t.args[0])},map:function(e,t,r){var n=t.args;!n||n.length<2?e&&Oe(e,\\\"Invalid mapping: \\\"+t.input):Ve.map(n[0],n[1],r)},imap:function(e,t){this.map(e,t,\\\"insert\\\")},nmap:function(e,t){this.map(e,t,\\\"normal\\\")},vmap:function(e,t){this.map(e,t,\\\"visual\\\")},unmap:function(e,t,r){var n=t.args;!n||n.length<1?e&&Oe(e,\\\"No such mapping: \\\"+t.input):Ve.unmap(n[0],r)},move:function(e,t){U.processCommand(e,e.state.vim,{type:\\\"motion\\\",motion:\\\"moveToLineOrEdgeOfDocument\\\",motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0},repeatOverride:t.line+1})},set:function(e,t){var r=t.args,n=t.setCfg||{};if(!r||r.length<1)e&&Oe(e,\\\"Invalid mapping: \\\"+t.input);else{var o=r[0].split(\\\"=\\\"),i=o[0],a=o[1],s=!1;if(\\\"?\\\"==i.charAt(i.length-1)){if(a)throw Error(\\\"Trailing characters: \\\"+t.argString);i=i.substring(0,i.length-1),s=!0}void 0===a&&\\\"no\\\"==i.substring(0,2)&&(i=i.substring(2),a=!1);var l=L[i]&&\\\"boolean\\\"==L[i].type;if(l&&null==a&&(a=!0),!l&&void 0===a||s){var c=E(i,e,n);c instanceof Error?Oe(e,c.message):Oe(e,!0===c||!1===c?\\\" \\\"+(c?\\\"\\\":\\\"no\\\")+i:\\\" \\\"+i+\\\"=\\\"+c)}else{var u=R(i,a,e,n);u instanceof Error&&Oe(e,u.message)}}},setlocal:function(e,t){t.setCfg={scope:\\\"local\\\"},this.set(e,t)},setglobal:function(e,t){t.setCfg={scope:\\\"global\\\"},this.set(e,t)},registers:function(e,t){var r=t.args,n=O.registerController.registers,o=\\\"----------Registers----------<br><br>\\\";if(r){r=r.join(\\\"\\\");for(var i=0;i<r.length;i++)a=r.charAt(i),O.registerController.isValidRegister(a)&&(o+='\\\"'+a+\\\" \\\"+(n[a]||new W).toString()+\\\"<br>\\\")}else for(var a in n){var s=n[a].toString();s.length&&(o+='\\\"'+a+\\\" \\\"+s+\\\"<br>\\\")}Oe(e,o)},sort:function(t,r){var o,i,a,s,l,c=function(){if(r.argString){var t=new e.StringStream(r.argString);if(t.eat(\\\"!\\\")&&(o=!0),t.eol())return;if(!t.eatSpace())return\\\"Invalid arguments\\\";var n=t.match(/([dinuox]+)?\\\\s*(\\\\/.+\\\\/)?\\\\s*/);if(!n&&!t.eol())return\\\"Invalid arguments\\\";if(n[1]){i=-1!=n[1].indexOf(\\\"i\\\"),a=-1!=n[1].indexOf(\\\"u\\\");var c=-1!=n[1].indexOf(\\\"d\\\")||-1!=n[1].indexOf(\\\"n\\\")&&1,u=-1!=n[1].indexOf(\\\"x\\\")&&1,h=-1!=n[1].indexOf(\\\"o\\\")&&1;if(c+u+h>1)return\\\"Invalid arguments\\\";s=(c?\\\"decimal\\\":u&&\\\"hex\\\")||h&&\\\"octal\\\"}n[2]&&(l=new RegExp(n[2].substr(1,n[2].length-2),i?\\\"i\\\":\\\"\\\"))}}();if(c)Oe(t,c+\\\": \\\"+r.argString);else{var u=r.line||t.firstLine(),h=r.lineEnd||r.line||t.lastLine();if(u!=h){var p=n(u,0),f=n(h,ae(t,h)),d=t.getRange(p,f).split(\\\"\\\\n\\\"),m=l||(\\\"decimal\\\"==s?/(-?)([\\\\d]+)/:\\\"hex\\\"==s?/(-?)(?:0x)?([0-9a-f]+)/i:\\\"octal\\\"==s?/([0-7]+)/:null),g=\\\"decimal\\\"==s?10:\\\"hex\\\"==s?16:\\\"octal\\\"==s?8:null,v=[],y=[];if(s||l)for(var k=0;k<d.length;k++){var C=l?d[k].match(l):null;C&&\\\"\\\"!=C[0]?v.push(C):!l&&m.exec(d[k])?v.push(d[k]):y.push(d[k])}else y=d;if(v.sort(l?function(e,t){var r;return o&&(r=e,e=t,t=r),i&&(e[0]=e[0].toLowerCase(),t[0]=t[0].toLowerCase()),e[0]<t[0]?-1:1}:x),l)for(k=0;k<v.length;k++)v[k]=v[k].input;else s||y.sort(x);if(d=o?v.concat(y):y.concat(v),a){var w,M=d;for(d=[],k=0;k<M.length;k++)M[k]!=w&&d.push(M[k]),w=M[k]}t.replaceRange(d.join(\\\"\\\\n\\\"),p,f)}}function x(e,t){var r;o&&(r=e,e=t,t=r),i&&(e=e.toLowerCase(),t=t.toLowerCase());var n=s&&m.exec(e),a=s&&m.exec(t);return n?(n=parseInt((n[1]+n[2]).toLowerCase(),g))-(a=parseInt((a[1]+a[2]).toLowerCase(),g)):e<t?-1:1}},global:function(e,t){var r=t.argString;if(r){var n,o=void 0!==t.line?t.line:e.firstLine(),i=t.lineEnd||t.line||e.lastLine(),a=be(r,\\\"/\\\"),s=r;if(a.length&&(s=a[0],n=a.slice(1,a.length).join(\\\"/\\\")),s)try{Ke(e,s,!0,!0)}catch(t){return void Oe(e,\\\"Invalid regex: \\\"+s)}for(var l=Ae(e).getQuery(),c=[],u=\\\"\\\",h=o;h<=i;h++)l.test(e.getLine(h))&&(c.push(h+1),u+=e.getLine(h)+\\\"<br>\\\");if(n){var p=0,f=function(){if(p<c.length){var t=c[p]+n;Ve.processCommand(e,t,{callback:f})}p++};f()}else Oe(e,u)}else Oe(e,\\\"Regular Expression missing from global\\\")},substitute:function(t,r){if(!t.getSearchCursor)throw new Error(\\\"Search feature not available. Requires searchcursor.js or any other getSearchCursor implementation.\\\");var o,i,a,s,l=r.argString,c=l?be(l,l[0]):[],u=\\\"\\\",h=!1,f=!1;if(c.length)o=c[0],u=c[1],o&&\\\"$\\\"===o[o.length-1]&&(o=o.slice(0,o.length-1)+\\\"\\\\\\\\n\\\",u=u?u+\\\"\\\\n\\\":\\\"\\\\n\\\"),void 0!==u&&(u=E(\\\"pcre\\\")?function(t){for(var r=new e.StringStream(t),n=[];!r.eol();){for(;r.peek()&&\\\"\\\\\\\\\\\"!=r.peek();)n.push(r.next());var o=!1;for(var i in Re)if(r.match(i,!0)){o=!0,n.push(Re[i]);break}o||n.push(r.next())}return n.join(\\\"\\\")}(u):function(e){for(var t,r=!1,n=[],o=-1;o<e.length;o++){var i=e.charAt(o)||\\\"\\\",a=e.charAt(o+1)||\\\"\\\";Te[i+a]?(n.push(Te[i+a]),o++):r?(n.push(i),r=!1):\\\"\\\\\\\\\\\"===i?(r=!0,t=a,p.test(t)||\\\"$\\\"===a?n.push(\\\"$\\\"):\\\"/\\\"!==a&&\\\"\\\\\\\\\\\"!==a&&n.push(\\\"\\\\\\\\\\\")):(\\\"$\\\"===i&&n.push(\\\"$\\\"),n.push(i),\\\"/\\\"===a&&n.push(\\\"\\\\\\\\\\\"))}return n.join(\\\"\\\")}(u),O.lastSubstituteReplacePart=u),i=c[2]?c[2].split(\\\" \\\"):[];else if(l&&l.length)return void Oe(t,\\\"Substitutions should be of the form :s/pattern/replace/\\\");if(i&&(a=i[0],s=parseInt(i[1]),a&&(-1!=a.indexOf(\\\"c\\\")&&(h=!0,a.replace(\\\"c\\\",\\\"\\\")),-1!=a.indexOf(\\\"g\\\")&&(f=!0,a.replace(\\\"g\\\",\\\"\\\")),o=o.replace(/\\\\//g,\\\"\\\\\\\\/\\\")+\\\"/\\\"+a)),o)try{Ke(t,o,!0,!0)}catch(e){return void Oe(t,\\\"Invalid regex: \\\"+o)}if(void 0!==(u=u||O.lastSubstituteReplacePart)){var d=Ae(t).getQuery(),m=void 0!==r.line?r.line:t.getCursor().line,g=r.lineEnd||m;m==t.firstLine()&&g==t.lastLine()&&(g=1/0),s&&(g=(m=g)+s-1);var v=z(t,n(m,0)),y=t.getSearchCursor(d,v);!function(t,r,n,o,i,a,s,l,c){t.state.vim.exMode=!0;var u=!1,h=a.from();function p(){t.operation(function(){for(;!u;)f(),d();m()})}function f(){var e=t.getRange(a.from(),a.to()),r=e.replace(s,l);a.replace(r)}function d(){for(;a.findNext()&&(e=a.from(),r=o,s=i,\\\"number\\\"!=typeof e&&(e=e.line),r instanceof Array?b(e,r):s?e>=r&&e<=s:e==r);)if(n||!h||a.from().line!=h.line)return t.scrollIntoView(a.from(),30),t.setSelection(a.from(),a.to()),h=a.from(),void(u=!1);var e,r,s;u=!0}function m(e){if(e&&e(),t.focus(),h){t.setCursor(h);var r=t.state.vim;r.exMode=!1,r.lastHPos=r.lastHSPos=h.ch}c&&c()}if(d(),!u)return r?void Ie(t,{prefix:\\\"replace with <strong>\\\"+l+\\\"</strong> (y/n/a/q/l)\\\",onKeyDown:function(r,n,o){switch(e.e_stop(r),e.keyName(r)){case\\\"Y\\\":f(),d();break;case\\\"N\\\":d();break;case\\\"A\\\":var i=c;c=void 0,t.operation(p),c=i;break;case\\\"L\\\":f();case\\\"Q\\\":case\\\"Esc\\\":case\\\"Ctrl-C\\\":case\\\"Ctrl-[\\\":m(o)}return u&&m(o),!0}}):(p(),void(c&&c()));Oe(t,\\\"No matches for \\\"+s.source)}(t,h,f,m,g,y,d,u,r.callback)}else Oe(t,\\\"No previous substitute regular expression\\\")},redo:e.commands.redo,undo:e.commands.undo,write:function(t){e.commands.save?e.commands.save(t):t.save&&t.save()},nohlsearch:function(e){je(e)},yank:function(e){var t=ee(e.getCursor()).line,r=e.getLine(t);O.registerController.pushText(\\\"0\\\",\\\"yank\\\",r,!0,!0)},delmarks:function(t,r){if(r.argString&&se(r.argString))for(var n=t.state.vim,o=new e.StringStream(se(r.argString));!o.eol();){o.eatSpace();var i=o.pos;if(!o.match(/[a-zA-Z]/,!1))return void Oe(t,\\\"Invalid argument: \\\"+r.argString.substring(i));var a=o.next();if(o.match(\\\"-\\\",!0)){if(!o.match(/[a-zA-Z]/,!1))return void Oe(t,\\\"Invalid argument: \\\"+r.argString.substring(i));var s=a,l=o.next();if(!(M(s)&&M(l)||x(s)&&x(l)))return void Oe(t,\\\"Invalid argument: \\\"+s+\\\"-\\\");var c=s.charCodeAt(0),u=l.charCodeAt(0);if(c>=u)return void Oe(t,\\\"Invalid argument: \\\"+r.argString.substring(i));for(var h=0;h<=u-c;h++){var p=String.fromCharCode(c+h);delete n.marks[p]}}else delete n.marks[a]}else Oe(t,\\\"Argument required\\\")}},Ve=new Fe;function De(t){var r=t.state.vim,n=O.macroModeState,o=O.registerController.getRegister(\\\".\\\"),i=n.isPlaying,a=n.lastInsertModeChanges,s=[];if(!i){for(var l=a.inVisualBlock&&r.lastSelection?r.lastSelection.visualBlock.height:1,c=a.changes,u=(s=[],0);u<c.length;)s.push(c[u]),c[u]instanceof ze?u++:u+=l;a.changes=s,t.off(\\\"change\\\",$e),e.off(t.getInputField(),\\\"keydown\\\",Ze)}!i&&r.insertModeRepeat>1&&(Ge(t,r,r.insertModeRepeat-1,!0),r.lastEditInputState.repeatOverride=r.insertModeRepeat),delete r.insertModeRepeat,r.insertMode=!1,t.setCursor(t.getCursor().line,t.getCursor().ch-1),t.setOption(\\\"keyMap\\\",\\\"vim\\\"),t.setOption(\\\"disableInput\\\",!0),t.toggleOverwrite(!1),o.setText(a.changes.join(\\\"\\\")),e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"normal\\\"}),n.isRecording&&function(e){if(!e.isPlaying){var t=e.latestRegister,r=O.registerController.getRegister(t);r&&r.pushInsertModeChanges&&r.pushInsertModeChanges(e.lastInsertModeChanges)}}(n)}function Ue(e){t.unshift(e)}function Je(t,r,n,o){var i=O.registerController.getRegister(o);if(\\\":\\\"==o)return i.keyBuffer[0]&&Ve.processCommand(t,i.keyBuffer[0]),void(n.isPlaying=!1);var a=i.keyBuffer,s=0;n.isPlaying=!0,n.replaySearchQueries=i.searchQueries.slice(0);for(var l=0;l<a.length;l++)for(var c,u,h=a[l];h;)if(u=(c=/<\\\\w+-.+?>|<\\\\w+>|./.exec(h))[0],h=h.substring(c.index+u.length),e.Vim.handleKey(t,u,\\\"macro\\\"),r.insertMode){var p=i.insertModeChanges[s++].changes;O.macroModeState.lastInsertModeChanges.changes=p,Xe(t,p,1),De(t)}n.isPlaying=!1}function $e(e,t){var r=O.macroModeState,n=r.lastInsertModeChanges;if(!r.isPlaying)for(;t;){if(n.expectCursorActivityForChange=!0,\\\"+input\\\"==t.origin||\\\"paste\\\"==t.origin||void 0===t.origin){var o=t.text.join(\\\"\\\\n\\\");n.maybeReset&&(n.changes=[],n.maybeReset=!1),e.state.overwrite&&!/\\\\n/.test(o)?n.changes.push([o]):n.changes.push(o)}t=t.next}}function qe(t){var r=t.state.vim;if(r.insertMode){var n=O.macroModeState;if(n.isPlaying)return;var o=n.lastInsertModeChanges;o.expectCursorActivityForChange?o.expectCursorActivityForChange=!1:o.maybeReset=!0}else t.curOp.isVimOp||function(t,r){var n=t.getCursor(\\\"anchor\\\"),o=t.getCursor(\\\"head\\\");if(r.visualMode&&!t.somethingSelected()?fe(t,!1):r.visualMode||r.insertMode||!t.somethingSelected()||(r.visualMode=!0,r.visualLine=!1,e.signal(t,\\\"vim-mode-change\\\",{mode:\\\"visual\\\"})),r.visualMode){var i=re(o,n)?0:-1,a=re(o,n)?-1:0;o=G(o,0,i),n=G(n,0,a),r.sel={anchor:n,head:o},Me(t,r,\\\"<\\\",ne(o,n)),Me(t,r,\\\">\\\",oe(o,n))}else r.insertMode||(r.lastHPos=t.getCursor().ch)}(t,r);r.visualMode&&Qe(t)}function Qe(e){var t=e.state.vim,r=z(e,ee(t.sel.head)),n=G(r,0,1);t.fakeCursor&&t.fakeCursor.clear(),t.fakeCursor=e.markText(r,n,{className:\\\"cm-animate-fat-cursor\\\"})}function ze(e){this.keyName=e}function Ze(t){var r=O.macroModeState.lastInsertModeChanges,n=e.keyName(t);n&&(-1==n.indexOf(\\\"Delete\\\")&&-1==n.indexOf(\\\"Backspace\\\")||e.lookupKey(n,\\\"vim-insert\\\",function(){return r.maybeReset&&(r.changes=[],r.maybeReset=!1),r.changes.push(new ze(n)),!0}))}function Ge(e,t,r,n){var o=O.macroModeState;o.isPlaying=!0;var i=!!t.lastEditActionCommand,a=t.inputState;function s(){i?U.processAction(e,t,t.lastEditActionCommand):U.evalInput(e,t)}function l(r){if(o.lastInsertModeChanges.changes.length>0){r=t.lastEditActionCommand?r:1;var n=o.lastInsertModeChanges;Xe(e,n.changes,r)}}if(t.inputState=t.lastEditInputState,i&&t.lastEditActionCommand.interlaceInsertRepeat)for(var c=0;c<r;c++)s(),l(1);else n||s(),l(r);t.inputState=a,t.insertMode&&!n&&De(e),o.isPlaying=!1}function Xe(t,r,n){function o(r){return\\\"string\\\"==typeof r?e.commands[r](t):r(t),!0}var i,a,s=t.getCursor(\\\"head\\\"),l=O.macroModeState.lastInsertModeChanges.inVisualBlock;if(l){var c=t.state.vim.lastSelection,u=(i=c.anchor,{line:(a=c.head).line-i.line,ch:a.line-i.line});ce(t,s,u.line+1),n=t.listSelections().length,t.setCursor(s)}for(var h=0;h<n;h++){l&&t.setCursor(G(s,h,0));for(var p=0;p<r.length;p++){var f=r[p];if(f instanceof ze)e.lookupKey(f.keyName,\\\"vim-insert\\\",o);else if(\\\"string\\\"==typeof f){var d=t.getCursor();t.replaceRange(f,d,d)}else{var m=t.getCursor(),g=G(m,0,f[0].length);t.replaceRange(f[0],m,g)}}}l&&t.setCursor(G(s,0,1))}return e.keyMap.vim={attach:i,detach:o,call:l},T(\\\"insertModeEscKeysTimeout\\\",200,\\\"number\\\"),e.keyMap[\\\"vim-insert\\\"]={fallthrough:[\\\"default\\\"],attach:i,detach:o,call:l},e.keyMap[\\\"vim-replace\\\"]={Backspace:\\\"goCharLeft\\\",fallthrough:[\\\"vim-insert\\\"],attach:i,detach:o,call:l},j(),H}()});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/keymap/vim.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-keymap-vim/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-keymap-vim/readme\",\n \"text\": \"This plugin adds a ''Keymap'' with some of the most important ''Vim'' keyboard shortcuts\\n\\nFor information about available ''keyboard shortcuts'' see the [ext[CodeMirror vim demo|https://codemirror.net/demo/vim.html]]\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-mode-css":{"title":"$:/plugins/tiddlywiki/codemirror-mode-css","name":"CodeMirror Mode CSS","description":"CSS highlighting mode for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/mode/css/css.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";function t(e){for(var t={},r=0;r<e.length;++r)t[e[r].toLowerCase()]=!0;return t}e.defineMode(\\\"css\\\",function(t,r){var o=r.inline;r.propertyKeywords||(r=e.resolveMode(\\\"text/css\\\"));var i,a,n=t.indentUnit,l=r.tokenHooks,s=r.documentTypes||{},c=r.mediaTypes||{},d=r.mediaFeatures||{},p=r.mediaValueKeywords||{},u=r.propertyKeywords||{},m=r.nonStandardPropertyKeywords||{},h=r.fontProperties||{},g=r.counterDescriptors||{},b=r.colorKeywords||{},f=r.valueKeywords||{},y=r.allowNested,w=r.lineComment,k=!0===r.supportsAtComponent;function v(e,t){return i=t,e}function x(e){return function(t,r){for(var o,i=!1;null!=(o=t.next());){if(o==e&&!i){\\\")\\\"==e&&t.backUp(1);break}i=!i&&\\\"\\\\\\\\\\\"==o}return(o==e||!i&&\\\")\\\"!=e)&&(r.tokenize=null),v(\\\"string\\\",\\\"string\\\")}}function z(e,t){return e.next(),e.match(/\\\\s*[\\\\\\\"\\\\')]/,!1)?t.tokenize=null:t.tokenize=x(\\\")\\\"),v(null,\\\"(\\\")}function j(e,t,r){this.type=e,this.indent=t,this.prev=r}function q(e,t,r,o){return e.context=new j(r,t.indentation()+(!1===o?0:n),e.context),r}function P(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function K(e,t,r){return T[r.context.type](e,t,r)}function C(e,t,r,o){for(var i=o||1;i>0;i--)r.context=r.context.prev;return K(e,t,r)}function B(e){var t=e.current().toLowerCase();a=f.hasOwnProperty(t)?\\\"atom\\\":b.hasOwnProperty(t)?\\\"keyword\\\":\\\"variable\\\"}var T={top:function(e,t,r){if(\\\"{\\\"==e)return q(r,t,\\\"block\\\");if(\\\"}\\\"==e&&r.context.prev)return P(r);if(k&&/@component/i.test(e))return q(r,t,\\\"atComponentBlock\\\");if(/^@(-moz-)?document$/i.test(e))return q(r,t,\\\"documentTypes\\\");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return q(r,t,\\\"atBlock\\\");if(/^@(font-face|counter-style)/i.test(e))return r.stateArg=e,\\\"restricted_atBlock_before\\\";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return\\\"keyframes\\\";if(e&&\\\"@\\\"==e.charAt(0))return q(r,t,\\\"at\\\");if(\\\"hash\\\"==e)a=\\\"builtin\\\";else if(\\\"word\\\"==e)a=\\\"tag\\\";else{if(\\\"variable-definition\\\"==e)return\\\"maybeprop\\\";if(\\\"interpolation\\\"==e)return q(r,t,\\\"interpolation\\\");if(\\\":\\\"==e)return\\\"pseudo\\\";if(y&&\\\"(\\\"==e)return q(r,t,\\\"parens\\\")}return r.context.type},block:function(e,t,r){if(\\\"word\\\"==e){var o=t.current().toLowerCase();return u.hasOwnProperty(o)?(a=\\\"property\\\",\\\"maybeprop\\\"):m.hasOwnProperty(o)?(a=\\\"string-2\\\",\\\"maybeprop\\\"):y?(a=t.match(/^\\\\s*:(?:\\\\s|$)/,!1)?\\\"property\\\":\\\"tag\\\",\\\"block\\\"):(a+=\\\" error\\\",\\\"maybeprop\\\")}return\\\"meta\\\"==e?\\\"block\\\":y||\\\"hash\\\"!=e&&\\\"qualifier\\\"!=e?T.top(e,t,r):(a=\\\"error\\\",\\\"block\\\")},maybeprop:function(e,t,r){return\\\":\\\"==e?q(r,t,\\\"prop\\\"):K(e,t,r)},prop:function(e,t,r){if(\\\";\\\"==e)return P(r);if(\\\"{\\\"==e&&y)return q(r,t,\\\"propBlock\\\");if(\\\"}\\\"==e||\\\"{\\\"==e)return C(e,t,r);if(\\\"(\\\"==e)return q(r,t,\\\"parens\\\");if(\\\"hash\\\"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if(\\\"word\\\"==e)B(t);else if(\\\"interpolation\\\"==e)return q(r,t,\\\"interpolation\\\")}else a+=\\\" error\\\";return\\\"prop\\\"},propBlock:function(e,t,r){return\\\"}\\\"==e?P(r):\\\"word\\\"==e?(a=\\\"property\\\",\\\"maybeprop\\\"):r.context.type},parens:function(e,t,r){return\\\"{\\\"==e||\\\"}\\\"==e?C(e,t,r):\\\")\\\"==e?P(r):\\\"(\\\"==e?q(r,t,\\\"parens\\\"):\\\"interpolation\\\"==e?q(r,t,\\\"interpolation\\\"):(\\\"word\\\"==e&&B(t),\\\"parens\\\")},pseudo:function(e,t,r){return\\\"meta\\\"==e?\\\"pseudo\\\":\\\"word\\\"==e?(a=\\\"variable-3\\\",r.context.type):K(e,t,r)},documentTypes:function(e,t,r){return\\\"word\\\"==e&&s.hasOwnProperty(t.current())?(a=\\\"tag\\\",r.context.type):T.atBlock(e,t,r)},atBlock:function(e,t,r){if(\\\"(\\\"==e)return q(r,t,\\\"atBlock_parens\\\");if(\\\"}\\\"==e||\\\";\\\"==e)return C(e,t,r);if(\\\"{\\\"==e)return P(r)&&q(r,t,y?\\\"block\\\":\\\"top\\\");if(\\\"interpolation\\\"==e)return q(r,t,\\\"interpolation\\\");if(\\\"word\\\"==e){var o=t.current().toLowerCase();a=\\\"only\\\"==o||\\\"not\\\"==o||\\\"and\\\"==o||\\\"or\\\"==o?\\\"keyword\\\":c.hasOwnProperty(o)?\\\"attribute\\\":d.hasOwnProperty(o)?\\\"property\\\":p.hasOwnProperty(o)?\\\"keyword\\\":u.hasOwnProperty(o)?\\\"property\\\":m.hasOwnProperty(o)?\\\"string-2\\\":f.hasOwnProperty(o)?\\\"atom\\\":b.hasOwnProperty(o)?\\\"keyword\\\":\\\"error\\\"}return r.context.type},atComponentBlock:function(e,t,r){return\\\"}\\\"==e?C(e,t,r):\\\"{\\\"==e?P(r)&&q(r,t,y?\\\"block\\\":\\\"top\\\",!1):(\\\"word\\\"==e&&(a=\\\"error\\\"),r.context.type)},atBlock_parens:function(e,t,r){return\\\")\\\"==e?P(r):\\\"{\\\"==e||\\\"}\\\"==e?C(e,t,r,2):T.atBlock(e,t,r)},restricted_atBlock_before:function(e,t,r){return\\\"{\\\"==e?q(r,t,\\\"restricted_atBlock\\\"):\\\"word\\\"==e&&\\\"@counter-style\\\"==r.stateArg?(a=\\\"variable\\\",\\\"restricted_atBlock_before\\\"):K(e,t,r)},restricted_atBlock:function(e,t,r){return\\\"}\\\"==e?(r.stateArg=null,P(r)):\\\"word\\\"==e?(a=\\\"@font-face\\\"==r.stateArg&&!h.hasOwnProperty(t.current().toLowerCase())||\\\"@counter-style\\\"==r.stateArg&&!g.hasOwnProperty(t.current().toLowerCase())?\\\"error\\\":\\\"property\\\",\\\"maybeprop\\\"):\\\"restricted_atBlock\\\"},keyframes:function(e,t,r){return\\\"word\\\"==e?(a=\\\"variable\\\",\\\"keyframes\\\"):\\\"{\\\"==e?q(r,t,\\\"top\\\"):K(e,t,r)},at:function(e,t,r){return\\\";\\\"==e?P(r):\\\"{\\\"==e||\\\"}\\\"==e?C(e,t,r):(\\\"word\\\"==e?a=\\\"tag\\\":\\\"hash\\\"==e&&(a=\\\"builtin\\\"),\\\"at\\\")},interpolation:function(e,t,r){return\\\"}\\\"==e?P(r):\\\"{\\\"==e||\\\";\\\"==e?C(e,t,r):(\\\"word\\\"==e?a=\\\"variable\\\":\\\"variable\\\"!=e&&\\\"(\\\"!=e&&\\\")\\\"!=e&&(a=\\\"error\\\"),\\\"interpolation\\\")}};return{startState:function(e){return{tokenize:null,state:o?\\\"block\\\":\\\"top\\\",stateArg:null,context:new j(o?\\\"block\\\":\\\"top\\\",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var r=(t.tokenize||function(e,t){var r=e.next();if(l[r]){var o=l[r](e,t);if(!1!==o)return o}return\\\"@\\\"==r?(e.eatWhile(/[\\\\w\\\\\\\\\\\\-]/),v(\\\"def\\\",e.current())):\\\"=\\\"==r||(\\\"~\\\"==r||\\\"|\\\"==r)&&e.eat(\\\"=\\\")?v(null,\\\"compare\\\"):'\\\"'==r||\\\"'\\\"==r?(t.tokenize=x(r),t.tokenize(e,t)):\\\"#\\\"==r?(e.eatWhile(/[\\\\w\\\\\\\\\\\\-]/),v(\\\"atom\\\",\\\"hash\\\")):\\\"!\\\"==r?(e.match(/^\\\\s*\\\\w*/),v(\\\"keyword\\\",\\\"important\\\")):/\\\\d/.test(r)||\\\".\\\"==r&&e.eat(/\\\\d/)?(e.eatWhile(/[\\\\w.%]/),v(\\\"number\\\",\\\"unit\\\")):\\\"-\\\"!==r?/[,+>*\\\\/]/.test(r)?v(null,\\\"select-op\\\"):\\\".\\\"==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?v(\\\"qualifier\\\",\\\"qualifier\\\"):/[:;{}\\\\[\\\\]\\\\(\\\\)]/.test(r)?v(null,r):(\\\"u\\\"==r||\\\"U\\\"==r)&&e.match(/rl(-prefix)?\\\\(/i)||(\\\"d\\\"==r||\\\"D\\\"==r)&&e.match(\\\"omain(\\\",!0,!0)||(\\\"r\\\"==r||\\\"R\\\"==r)&&e.match(\\\"egexp(\\\",!0,!0)?(e.backUp(1),t.tokenize=z,v(\\\"property\\\",\\\"word\\\")):/[\\\\w\\\\\\\\\\\\-]/.test(r)?(e.eatWhile(/[\\\\w\\\\\\\\\\\\-]/),v(\\\"property\\\",\\\"word\\\")):v(null,null):/[\\\\d.]/.test(e.peek())?(e.eatWhile(/[\\\\w.%]/),v(\\\"number\\\",\\\"unit\\\")):e.match(/^-[\\\\w\\\\\\\\\\\\-]+/)?(e.eatWhile(/[\\\\w\\\\\\\\\\\\-]/),e.match(/^\\\\s*:/,!1)?v(\\\"variable-2\\\",\\\"variable-definition\\\"):v(\\\"variable-2\\\",\\\"variable\\\")):e.match(/^\\\\w+-/)?v(\\\"meta\\\",\\\"meta\\\"):void 0})(e,t);return r&&\\\"object\\\"==typeof r&&(i=r[1],r=r[0]),a=r,\\\"comment\\\"!=i&&(t.state=T[t.state](i,e,t)),a},indent:function(e,t){var r=e.context,o=t&&t.charAt(0),i=r.indent;return\\\"prop\\\"!=r.type||\\\"}\\\"!=o&&\\\")\\\"!=o||(r=r.prev),r.prev&&(\\\"}\\\"!=o||\\\"block\\\"!=r.type&&\\\"top\\\"!=r.type&&\\\"interpolation\\\"!=r.type&&\\\"restricted_atBlock\\\"!=r.type?(\\\")\\\"!=o||\\\"parens\\\"!=r.type&&\\\"atBlock_parens\\\"!=r.type)&&(\\\"{\\\"!=o||\\\"at\\\"!=r.type&&\\\"atBlock\\\"!=r.type)||(i=Math.max(0,r.indent-n)):i=(r=r.prev).indent),i},electricChars:\\\"}\\\",blockCommentStart:\\\"/*\\\",blockCommentEnd:\\\"*/\\\",blockCommentContinue:\\\" * \\\",lineComment:w,fold:\\\"brace\\\"}});var r=[\\\"domain\\\",\\\"regexp\\\",\\\"url\\\",\\\"url-prefix\\\"],o=t(r),i=[\\\"all\\\",\\\"aural\\\",\\\"braille\\\",\\\"handheld\\\",\\\"print\\\",\\\"projection\\\",\\\"screen\\\",\\\"tty\\\",\\\"tv\\\",\\\"embossed\\\"],a=t(i),n=[\\\"width\\\",\\\"min-width\\\",\\\"max-width\\\",\\\"height\\\",\\\"min-height\\\",\\\"max-height\\\",\\\"device-width\\\",\\\"min-device-width\\\",\\\"max-device-width\\\",\\\"device-height\\\",\\\"min-device-height\\\",\\\"max-device-height\\\",\\\"aspect-ratio\\\",\\\"min-aspect-ratio\\\",\\\"max-aspect-ratio\\\",\\\"device-aspect-ratio\\\",\\\"min-device-aspect-ratio\\\",\\\"max-device-aspect-ratio\\\",\\\"color\\\",\\\"min-color\\\",\\\"max-color\\\",\\\"color-index\\\",\\\"min-color-index\\\",\\\"max-color-index\\\",\\\"monochrome\\\",\\\"min-monochrome\\\",\\\"max-monochrome\\\",\\\"resolution\\\",\\\"min-resolution\\\",\\\"max-resolution\\\",\\\"scan\\\",\\\"grid\\\",\\\"orientation\\\",\\\"device-pixel-ratio\\\",\\\"min-device-pixel-ratio\\\",\\\"max-device-pixel-ratio\\\",\\\"pointer\\\",\\\"any-pointer\\\",\\\"hover\\\",\\\"any-hover\\\"],l=t(n),s=[\\\"landscape\\\",\\\"portrait\\\",\\\"none\\\",\\\"coarse\\\",\\\"fine\\\",\\\"on-demand\\\",\\\"hover\\\",\\\"interlace\\\",\\\"progressive\\\"],c=t(s),d=[\\\"align-content\\\",\\\"align-items\\\",\\\"align-self\\\",\\\"alignment-adjust\\\",\\\"alignment-baseline\\\",\\\"anchor-point\\\",\\\"animation\\\",\\\"animation-delay\\\",\\\"animation-direction\\\",\\\"animation-duration\\\",\\\"animation-fill-mode\\\",\\\"animation-iteration-count\\\",\\\"animation-name\\\",\\\"animation-play-state\\\",\\\"animation-timing-function\\\",\\\"appearance\\\",\\\"azimuth\\\",\\\"backface-visibility\\\",\\\"background\\\",\\\"background-attachment\\\",\\\"background-blend-mode\\\",\\\"background-clip\\\",\\\"background-color\\\",\\\"background-image\\\",\\\"background-origin\\\",\\\"background-position\\\",\\\"background-repeat\\\",\\\"background-size\\\",\\\"baseline-shift\\\",\\\"binding\\\",\\\"bleed\\\",\\\"bookmark-label\\\",\\\"bookmark-level\\\",\\\"bookmark-state\\\",\\\"bookmark-target\\\",\\\"border\\\",\\\"border-bottom\\\",\\\"border-bottom-color\\\",\\\"border-bottom-left-radius\\\",\\\"border-bottom-right-radius\\\",\\\"border-bottom-style\\\",\\\"border-bottom-width\\\",\\\"border-collapse\\\",\\\"border-color\\\",\\\"border-image\\\",\\\"border-image-outset\\\",\\\"border-image-repeat\\\",\\\"border-image-slice\\\",\\\"border-image-source\\\",\\\"border-image-width\\\",\\\"border-left\\\",\\\"border-left-color\\\",\\\"border-left-style\\\",\\\"border-left-width\\\",\\\"border-radius\\\",\\\"border-right\\\",\\\"border-right-color\\\",\\\"border-right-style\\\",\\\"border-right-width\\\",\\\"border-spacing\\\",\\\"border-style\\\",\\\"border-top\\\",\\\"border-top-color\\\",\\\"border-top-left-radius\\\",\\\"border-top-right-radius\\\",\\\"border-top-style\\\",\\\"border-top-width\\\",\\\"border-width\\\",\\\"bottom\\\",\\\"box-decoration-break\\\",\\\"box-shadow\\\",\\\"box-sizing\\\",\\\"break-after\\\",\\\"break-before\\\",\\\"break-inside\\\",\\\"caption-side\\\",\\\"caret-color\\\",\\\"clear\\\",\\\"clip\\\",\\\"color\\\",\\\"color-profile\\\",\\\"column-count\\\",\\\"column-fill\\\",\\\"column-gap\\\",\\\"column-rule\\\",\\\"column-rule-color\\\",\\\"column-rule-style\\\",\\\"column-rule-width\\\",\\\"column-span\\\",\\\"column-width\\\",\\\"columns\\\",\\\"content\\\",\\\"counter-increment\\\",\\\"counter-reset\\\",\\\"crop\\\",\\\"cue\\\",\\\"cue-after\\\",\\\"cue-before\\\",\\\"cursor\\\",\\\"direction\\\",\\\"display\\\",\\\"dominant-baseline\\\",\\\"drop-initial-after-adjust\\\",\\\"drop-initial-after-align\\\",\\\"drop-initial-before-adjust\\\",\\\"drop-initial-before-align\\\",\\\"drop-initial-size\\\",\\\"drop-initial-value\\\",\\\"elevation\\\",\\\"empty-cells\\\",\\\"fit\\\",\\\"fit-position\\\",\\\"flex\\\",\\\"flex-basis\\\",\\\"flex-direction\\\",\\\"flex-flow\\\",\\\"flex-grow\\\",\\\"flex-shrink\\\",\\\"flex-wrap\\\",\\\"float\\\",\\\"float-offset\\\",\\\"flow-from\\\",\\\"flow-into\\\",\\\"font\\\",\\\"font-feature-settings\\\",\\\"font-family\\\",\\\"font-kerning\\\",\\\"font-language-override\\\",\\\"font-size\\\",\\\"font-size-adjust\\\",\\\"font-stretch\\\",\\\"font-style\\\",\\\"font-synthesis\\\",\\\"font-variant\\\",\\\"font-variant-alternates\\\",\\\"font-variant-caps\\\",\\\"font-variant-east-asian\\\",\\\"font-variant-ligatures\\\",\\\"font-variant-numeric\\\",\\\"font-variant-position\\\",\\\"font-weight\\\",\\\"grid\\\",\\\"grid-area\\\",\\\"grid-auto-columns\\\",\\\"grid-auto-flow\\\",\\\"grid-auto-rows\\\",\\\"grid-column\\\",\\\"grid-column-end\\\",\\\"grid-column-gap\\\",\\\"grid-column-start\\\",\\\"grid-gap\\\",\\\"grid-row\\\",\\\"grid-row-end\\\",\\\"grid-row-gap\\\",\\\"grid-row-start\\\",\\\"grid-template\\\",\\\"grid-template-areas\\\",\\\"grid-template-columns\\\",\\\"grid-template-rows\\\",\\\"hanging-punctuation\\\",\\\"height\\\",\\\"hyphens\\\",\\\"icon\\\",\\\"image-orientation\\\",\\\"image-rendering\\\",\\\"image-resolution\\\",\\\"inline-box-align\\\",\\\"justify-content\\\",\\\"justify-items\\\",\\\"justify-self\\\",\\\"left\\\",\\\"letter-spacing\\\",\\\"line-break\\\",\\\"line-height\\\",\\\"line-stacking\\\",\\\"line-stacking-ruby\\\",\\\"line-stacking-shift\\\",\\\"line-stacking-strategy\\\",\\\"list-style\\\",\\\"list-style-image\\\",\\\"list-style-position\\\",\\\"list-style-type\\\",\\\"margin\\\",\\\"margin-bottom\\\",\\\"margin-left\\\",\\\"margin-right\\\",\\\"margin-top\\\",\\\"marks\\\",\\\"marquee-direction\\\",\\\"marquee-loop\\\",\\\"marquee-play-count\\\",\\\"marquee-speed\\\",\\\"marquee-style\\\",\\\"max-height\\\",\\\"max-width\\\",\\\"min-height\\\",\\\"min-width\\\",\\\"move-to\\\",\\\"nav-down\\\",\\\"nav-index\\\",\\\"nav-left\\\",\\\"nav-right\\\",\\\"nav-up\\\",\\\"object-fit\\\",\\\"object-position\\\",\\\"opacity\\\",\\\"order\\\",\\\"orphans\\\",\\\"outline\\\",\\\"outline-color\\\",\\\"outline-offset\\\",\\\"outline-style\\\",\\\"outline-width\\\",\\\"overflow\\\",\\\"overflow-style\\\",\\\"overflow-wrap\\\",\\\"overflow-x\\\",\\\"overflow-y\\\",\\\"padding\\\",\\\"padding-bottom\\\",\\\"padding-left\\\",\\\"padding-right\\\",\\\"padding-top\\\",\\\"page\\\",\\\"page-break-after\\\",\\\"page-break-before\\\",\\\"page-break-inside\\\",\\\"page-policy\\\",\\\"pause\\\",\\\"pause-after\\\",\\\"pause-before\\\",\\\"perspective\\\",\\\"perspective-origin\\\",\\\"pitch\\\",\\\"pitch-range\\\",\\\"place-content\\\",\\\"place-items\\\",\\\"place-self\\\",\\\"play-during\\\",\\\"position\\\",\\\"presentation-level\\\",\\\"punctuation-trim\\\",\\\"quotes\\\",\\\"region-break-after\\\",\\\"region-break-before\\\",\\\"region-break-inside\\\",\\\"region-fragment\\\",\\\"rendering-intent\\\",\\\"resize\\\",\\\"rest\\\",\\\"rest-after\\\",\\\"rest-before\\\",\\\"richness\\\",\\\"right\\\",\\\"rotation\\\",\\\"rotation-point\\\",\\\"ruby-align\\\",\\\"ruby-overhang\\\",\\\"ruby-position\\\",\\\"ruby-span\\\",\\\"shape-image-threshold\\\",\\\"shape-inside\\\",\\\"shape-margin\\\",\\\"shape-outside\\\",\\\"size\\\",\\\"speak\\\",\\\"speak-as\\\",\\\"speak-header\\\",\\\"speak-numeral\\\",\\\"speak-punctuation\\\",\\\"speech-rate\\\",\\\"stress\\\",\\\"string-set\\\",\\\"tab-size\\\",\\\"table-layout\\\",\\\"target\\\",\\\"target-name\\\",\\\"target-new\\\",\\\"target-position\\\",\\\"text-align\\\",\\\"text-align-last\\\",\\\"text-decoration\\\",\\\"text-decoration-color\\\",\\\"text-decoration-line\\\",\\\"text-decoration-skip\\\",\\\"text-decoration-style\\\",\\\"text-emphasis\\\",\\\"text-emphasis-color\\\",\\\"text-emphasis-position\\\",\\\"text-emphasis-style\\\",\\\"text-height\\\",\\\"text-indent\\\",\\\"text-justify\\\",\\\"text-outline\\\",\\\"text-overflow\\\",\\\"text-shadow\\\",\\\"text-size-adjust\\\",\\\"text-space-collapse\\\",\\\"text-transform\\\",\\\"text-underline-position\\\",\\\"text-wrap\\\",\\\"top\\\",\\\"transform\\\",\\\"transform-origin\\\",\\\"transform-style\\\",\\\"transition\\\",\\\"transition-delay\\\",\\\"transition-duration\\\",\\\"transition-property\\\",\\\"transition-timing-function\\\",\\\"unicode-bidi\\\",\\\"user-select\\\",\\\"vertical-align\\\",\\\"visibility\\\",\\\"voice-balance\\\",\\\"voice-duration\\\",\\\"voice-family\\\",\\\"voice-pitch\\\",\\\"voice-range\\\",\\\"voice-rate\\\",\\\"voice-stress\\\",\\\"voice-volume\\\",\\\"volume\\\",\\\"white-space\\\",\\\"widows\\\",\\\"width\\\",\\\"will-change\\\",\\\"word-break\\\",\\\"word-spacing\\\",\\\"word-wrap\\\",\\\"z-index\\\",\\\"clip-path\\\",\\\"clip-rule\\\",\\\"mask\\\",\\\"enable-background\\\",\\\"filter\\\",\\\"flood-color\\\",\\\"flood-opacity\\\",\\\"lighting-color\\\",\\\"stop-color\\\",\\\"stop-opacity\\\",\\\"pointer-events\\\",\\\"color-interpolation\\\",\\\"color-interpolation-filters\\\",\\\"color-rendering\\\",\\\"fill\\\",\\\"fill-opacity\\\",\\\"fill-rule\\\",\\\"image-rendering\\\",\\\"marker\\\",\\\"marker-end\\\",\\\"marker-mid\\\",\\\"marker-start\\\",\\\"shape-rendering\\\",\\\"stroke\\\",\\\"stroke-dasharray\\\",\\\"stroke-dashoffset\\\",\\\"stroke-linecap\\\",\\\"stroke-linejoin\\\",\\\"stroke-miterlimit\\\",\\\"stroke-opacity\\\",\\\"stroke-width\\\",\\\"text-rendering\\\",\\\"baseline-shift\\\",\\\"dominant-baseline\\\",\\\"glyph-orientation-horizontal\\\",\\\"glyph-orientation-vertical\\\",\\\"text-anchor\\\",\\\"writing-mode\\\"],p=t(d),u=[\\\"scrollbar-arrow-color\\\",\\\"scrollbar-base-color\\\",\\\"scrollbar-dark-shadow-color\\\",\\\"scrollbar-face-color\\\",\\\"scrollbar-highlight-color\\\",\\\"scrollbar-shadow-color\\\",\\\"scrollbar-3d-light-color\\\",\\\"scrollbar-track-color\\\",\\\"shape-inside\\\",\\\"searchfield-cancel-button\\\",\\\"searchfield-decoration\\\",\\\"searchfield-results-button\\\",\\\"searchfield-results-decoration\\\",\\\"zoom\\\"],m=t(u),h=t([\\\"font-family\\\",\\\"src\\\",\\\"unicode-range\\\",\\\"font-variant\\\",\\\"font-feature-settings\\\",\\\"font-stretch\\\",\\\"font-weight\\\",\\\"font-style\\\"]),g=t([\\\"additive-symbols\\\",\\\"fallback\\\",\\\"negative\\\",\\\"pad\\\",\\\"prefix\\\",\\\"range\\\",\\\"speak-as\\\",\\\"suffix\\\",\\\"symbols\\\",\\\"system\\\"]),b=[\\\"aliceblue\\\",\\\"antiquewhite\\\",\\\"aqua\\\",\\\"aquamarine\\\",\\\"azure\\\",\\\"beige\\\",\\\"bisque\\\",\\\"black\\\",\\\"blanchedalmond\\\",\\\"blue\\\",\\\"blueviolet\\\",\\\"brown\\\",\\\"burlywood\\\",\\\"cadetblue\\\",\\\"chartreuse\\\",\\\"chocolate\\\",\\\"coral\\\",\\\"cornflowerblue\\\",\\\"cornsilk\\\",\\\"crimson\\\",\\\"cyan\\\",\\\"darkblue\\\",\\\"darkcyan\\\",\\\"darkgoldenrod\\\",\\\"darkgray\\\",\\\"darkgreen\\\",\\\"darkkhaki\\\",\\\"darkmagenta\\\",\\\"darkolivegreen\\\",\\\"darkorange\\\",\\\"darkorchid\\\",\\\"darkred\\\",\\\"darksalmon\\\",\\\"darkseagreen\\\",\\\"darkslateblue\\\",\\\"darkslategray\\\",\\\"darkturquoise\\\",\\\"darkviolet\\\",\\\"deeppink\\\",\\\"deepskyblue\\\",\\\"dimgray\\\",\\\"dodgerblue\\\",\\\"firebrick\\\",\\\"floralwhite\\\",\\\"forestgreen\\\",\\\"fuchsia\\\",\\\"gainsboro\\\",\\\"ghostwhite\\\",\\\"gold\\\",\\\"goldenrod\\\",\\\"gray\\\",\\\"grey\\\",\\\"green\\\",\\\"greenyellow\\\",\\\"honeydew\\\",\\\"hotpink\\\",\\\"indianred\\\",\\\"indigo\\\",\\\"ivory\\\",\\\"khaki\\\",\\\"lavender\\\",\\\"lavenderblush\\\",\\\"lawngreen\\\",\\\"lemonchiffon\\\",\\\"lightblue\\\",\\\"lightcoral\\\",\\\"lightcyan\\\",\\\"lightgoldenrodyellow\\\",\\\"lightgray\\\",\\\"lightgreen\\\",\\\"lightpink\\\",\\\"lightsalmon\\\",\\\"lightseagreen\\\",\\\"lightskyblue\\\",\\\"lightslategray\\\",\\\"lightsteelblue\\\",\\\"lightyellow\\\",\\\"lime\\\",\\\"limegreen\\\",\\\"linen\\\",\\\"magenta\\\",\\\"maroon\\\",\\\"mediumaquamarine\\\",\\\"mediumblue\\\",\\\"mediumorchid\\\",\\\"mediumpurple\\\",\\\"mediumseagreen\\\",\\\"mediumslateblue\\\",\\\"mediumspringgreen\\\",\\\"mediumturquoise\\\",\\\"mediumvioletred\\\",\\\"midnightblue\\\",\\\"mintcream\\\",\\\"mistyrose\\\",\\\"moccasin\\\",\\\"navajowhite\\\",\\\"navy\\\",\\\"oldlace\\\",\\\"olive\\\",\\\"olivedrab\\\",\\\"orange\\\",\\\"orangered\\\",\\\"orchid\\\",\\\"palegoldenrod\\\",\\\"palegreen\\\",\\\"paleturquoise\\\",\\\"palevioletred\\\",\\\"papayawhip\\\",\\\"peachpuff\\\",\\\"peru\\\",\\\"pink\\\",\\\"plum\\\",\\\"powderblue\\\",\\\"purple\\\",\\\"rebeccapurple\\\",\\\"red\\\",\\\"rosybrown\\\",\\\"royalblue\\\",\\\"saddlebrown\\\",\\\"salmon\\\",\\\"sandybrown\\\",\\\"seagreen\\\",\\\"seashell\\\",\\\"sienna\\\",\\\"silver\\\",\\\"skyblue\\\",\\\"slateblue\\\",\\\"slategray\\\",\\\"snow\\\",\\\"springgreen\\\",\\\"steelblue\\\",\\\"tan\\\",\\\"teal\\\",\\\"thistle\\\",\\\"tomato\\\",\\\"turquoise\\\",\\\"violet\\\",\\\"wheat\\\",\\\"white\\\",\\\"whitesmoke\\\",\\\"yellow\\\",\\\"yellowgreen\\\"],f=t(b),y=[\\\"above\\\",\\\"absolute\\\",\\\"activeborder\\\",\\\"additive\\\",\\\"activecaption\\\",\\\"afar\\\",\\\"after-white-space\\\",\\\"ahead\\\",\\\"alias\\\",\\\"all\\\",\\\"all-scroll\\\",\\\"alphabetic\\\",\\\"alternate\\\",\\\"always\\\",\\\"amharic\\\",\\\"amharic-abegede\\\",\\\"antialiased\\\",\\\"appworkspace\\\",\\\"arabic-indic\\\",\\\"armenian\\\",\\\"asterisks\\\",\\\"attr\\\",\\\"auto\\\",\\\"auto-flow\\\",\\\"avoid\\\",\\\"avoid-column\\\",\\\"avoid-page\\\",\\\"avoid-region\\\",\\\"background\\\",\\\"backwards\\\",\\\"baseline\\\",\\\"below\\\",\\\"bidi-override\\\",\\\"binary\\\",\\\"bengali\\\",\\\"blink\\\",\\\"block\\\",\\\"block-axis\\\",\\\"bold\\\",\\\"bolder\\\",\\\"border\\\",\\\"border-box\\\",\\\"both\\\",\\\"bottom\\\",\\\"break\\\",\\\"break-all\\\",\\\"break-word\\\",\\\"bullets\\\",\\\"button\\\",\\\"button-bevel\\\",\\\"buttonface\\\",\\\"buttonhighlight\\\",\\\"buttonshadow\\\",\\\"buttontext\\\",\\\"calc\\\",\\\"cambodian\\\",\\\"capitalize\\\",\\\"caps-lock-indicator\\\",\\\"caption\\\",\\\"captiontext\\\",\\\"caret\\\",\\\"cell\\\",\\\"center\\\",\\\"checkbox\\\",\\\"circle\\\",\\\"cjk-decimal\\\",\\\"cjk-earthly-branch\\\",\\\"cjk-heavenly-stem\\\",\\\"cjk-ideographic\\\",\\\"clear\\\",\\\"clip\\\",\\\"close-quote\\\",\\\"col-resize\\\",\\\"collapse\\\",\\\"color\\\",\\\"color-burn\\\",\\\"color-dodge\\\",\\\"column\\\",\\\"column-reverse\\\",\\\"compact\\\",\\\"condensed\\\",\\\"contain\\\",\\\"content\\\",\\\"contents\\\",\\\"content-box\\\",\\\"context-menu\\\",\\\"continuous\\\",\\\"copy\\\",\\\"counter\\\",\\\"counters\\\",\\\"cover\\\",\\\"crop\\\",\\\"cross\\\",\\\"crosshair\\\",\\\"currentcolor\\\",\\\"cursive\\\",\\\"cyclic\\\",\\\"darken\\\",\\\"dashed\\\",\\\"decimal\\\",\\\"decimal-leading-zero\\\",\\\"default\\\",\\\"default-button\\\",\\\"dense\\\",\\\"destination-atop\\\",\\\"destination-in\\\",\\\"destination-out\\\",\\\"destination-over\\\",\\\"devanagari\\\",\\\"difference\\\",\\\"disc\\\",\\\"discard\\\",\\\"disclosure-closed\\\",\\\"disclosure-open\\\",\\\"document\\\",\\\"dot-dash\\\",\\\"dot-dot-dash\\\",\\\"dotted\\\",\\\"double\\\",\\\"down\\\",\\\"e-resize\\\",\\\"ease\\\",\\\"ease-in\\\",\\\"ease-in-out\\\",\\\"ease-out\\\",\\\"element\\\",\\\"ellipse\\\",\\\"ellipsis\\\",\\\"embed\\\",\\\"end\\\",\\\"ethiopic\\\",\\\"ethiopic-abegede\\\",\\\"ethiopic-abegede-am-et\\\",\\\"ethiopic-abegede-gez\\\",\\\"ethiopic-abegede-ti-er\\\",\\\"ethiopic-abegede-ti-et\\\",\\\"ethiopic-halehame-aa-er\\\",\\\"ethiopic-halehame-aa-et\\\",\\\"ethiopic-halehame-am-et\\\",\\\"ethiopic-halehame-gez\\\",\\\"ethiopic-halehame-om-et\\\",\\\"ethiopic-halehame-sid-et\\\",\\\"ethiopic-halehame-so-et\\\",\\\"ethiopic-halehame-ti-er\\\",\\\"ethiopic-halehame-ti-et\\\",\\\"ethiopic-halehame-tig\\\",\\\"ethiopic-numeric\\\",\\\"ew-resize\\\",\\\"exclusion\\\",\\\"expanded\\\",\\\"extends\\\",\\\"extra-condensed\\\",\\\"extra-expanded\\\",\\\"fantasy\\\",\\\"fast\\\",\\\"fill\\\",\\\"fixed\\\",\\\"flat\\\",\\\"flex\\\",\\\"flex-end\\\",\\\"flex-start\\\",\\\"footnotes\\\",\\\"forwards\\\",\\\"from\\\",\\\"geometricPrecision\\\",\\\"georgian\\\",\\\"graytext\\\",\\\"grid\\\",\\\"groove\\\",\\\"gujarati\\\",\\\"gurmukhi\\\",\\\"hand\\\",\\\"hangul\\\",\\\"hangul-consonant\\\",\\\"hard-light\\\",\\\"hebrew\\\",\\\"help\\\",\\\"hidden\\\",\\\"hide\\\",\\\"higher\\\",\\\"highlight\\\",\\\"highlighttext\\\",\\\"hiragana\\\",\\\"hiragana-iroha\\\",\\\"horizontal\\\",\\\"hsl\\\",\\\"hsla\\\",\\\"hue\\\",\\\"icon\\\",\\\"ignore\\\",\\\"inactiveborder\\\",\\\"inactivecaption\\\",\\\"inactivecaptiontext\\\",\\\"infinite\\\",\\\"infobackground\\\",\\\"infotext\\\",\\\"inherit\\\",\\\"initial\\\",\\\"inline\\\",\\\"inline-axis\\\",\\\"inline-block\\\",\\\"inline-flex\\\",\\\"inline-grid\\\",\\\"inline-table\\\",\\\"inset\\\",\\\"inside\\\",\\\"intrinsic\\\",\\\"invert\\\",\\\"italic\\\",\\\"japanese-formal\\\",\\\"japanese-informal\\\",\\\"justify\\\",\\\"kannada\\\",\\\"katakana\\\",\\\"katakana-iroha\\\",\\\"keep-all\\\",\\\"khmer\\\",\\\"korean-hangul-formal\\\",\\\"korean-hanja-formal\\\",\\\"korean-hanja-informal\\\",\\\"landscape\\\",\\\"lao\\\",\\\"large\\\",\\\"larger\\\",\\\"left\\\",\\\"level\\\",\\\"lighter\\\",\\\"lighten\\\",\\\"line-through\\\",\\\"linear\\\",\\\"linear-gradient\\\",\\\"lines\\\",\\\"list-item\\\",\\\"listbox\\\",\\\"listitem\\\",\\\"local\\\",\\\"logical\\\",\\\"loud\\\",\\\"lower\\\",\\\"lower-alpha\\\",\\\"lower-armenian\\\",\\\"lower-greek\\\",\\\"lower-hexadecimal\\\",\\\"lower-latin\\\",\\\"lower-norwegian\\\",\\\"lower-roman\\\",\\\"lowercase\\\",\\\"ltr\\\",\\\"luminosity\\\",\\\"malayalam\\\",\\\"match\\\",\\\"matrix\\\",\\\"matrix3d\\\",\\\"media-controls-background\\\",\\\"media-current-time-display\\\",\\\"media-fullscreen-button\\\",\\\"media-mute-button\\\",\\\"media-play-button\\\",\\\"media-return-to-realtime-button\\\",\\\"media-rewind-button\\\",\\\"media-seek-back-button\\\",\\\"media-seek-forward-button\\\",\\\"media-slider\\\",\\\"media-sliderthumb\\\",\\\"media-time-remaining-display\\\",\\\"media-volume-slider\\\",\\\"media-volume-slider-container\\\",\\\"media-volume-sliderthumb\\\",\\\"medium\\\",\\\"menu\\\",\\\"menulist\\\",\\\"menulist-button\\\",\\\"menulist-text\\\",\\\"menulist-textfield\\\",\\\"menutext\\\",\\\"message-box\\\",\\\"middle\\\",\\\"min-intrinsic\\\",\\\"mix\\\",\\\"mongolian\\\",\\\"monospace\\\",\\\"move\\\",\\\"multiple\\\",\\\"multiply\\\",\\\"myanmar\\\",\\\"n-resize\\\",\\\"narrower\\\",\\\"ne-resize\\\",\\\"nesw-resize\\\",\\\"no-close-quote\\\",\\\"no-drop\\\",\\\"no-open-quote\\\",\\\"no-repeat\\\",\\\"none\\\",\\\"normal\\\",\\\"not-allowed\\\",\\\"nowrap\\\",\\\"ns-resize\\\",\\\"numbers\\\",\\\"numeric\\\",\\\"nw-resize\\\",\\\"nwse-resize\\\",\\\"oblique\\\",\\\"octal\\\",\\\"opacity\\\",\\\"open-quote\\\",\\\"optimizeLegibility\\\",\\\"optimizeSpeed\\\",\\\"oriya\\\",\\\"oromo\\\",\\\"outset\\\",\\\"outside\\\",\\\"outside-shape\\\",\\\"overlay\\\",\\\"overline\\\",\\\"padding\\\",\\\"padding-box\\\",\\\"painted\\\",\\\"page\\\",\\\"paused\\\",\\\"persian\\\",\\\"perspective\\\",\\\"plus-darker\\\",\\\"plus-lighter\\\",\\\"pointer\\\",\\\"polygon\\\",\\\"portrait\\\",\\\"pre\\\",\\\"pre-line\\\",\\\"pre-wrap\\\",\\\"preserve-3d\\\",\\\"progress\\\",\\\"push-button\\\",\\\"radial-gradient\\\",\\\"radio\\\",\\\"read-only\\\",\\\"read-write\\\",\\\"read-write-plaintext-only\\\",\\\"rectangle\\\",\\\"region\\\",\\\"relative\\\",\\\"repeat\\\",\\\"repeating-linear-gradient\\\",\\\"repeating-radial-gradient\\\",\\\"repeat-x\\\",\\\"repeat-y\\\",\\\"reset\\\",\\\"reverse\\\",\\\"rgb\\\",\\\"rgba\\\",\\\"ridge\\\",\\\"right\\\",\\\"rotate\\\",\\\"rotate3d\\\",\\\"rotateX\\\",\\\"rotateY\\\",\\\"rotateZ\\\",\\\"round\\\",\\\"row\\\",\\\"row-resize\\\",\\\"row-reverse\\\",\\\"rtl\\\",\\\"run-in\\\",\\\"running\\\",\\\"s-resize\\\",\\\"sans-serif\\\",\\\"saturation\\\",\\\"scale\\\",\\\"scale3d\\\",\\\"scaleX\\\",\\\"scaleY\\\",\\\"scaleZ\\\",\\\"screen\\\",\\\"scroll\\\",\\\"scrollbar\\\",\\\"scroll-position\\\",\\\"se-resize\\\",\\\"searchfield\\\",\\\"searchfield-cancel-button\\\",\\\"searchfield-decoration\\\",\\\"searchfield-results-button\\\",\\\"searchfield-results-decoration\\\",\\\"self-start\\\",\\\"self-end\\\",\\\"semi-condensed\\\",\\\"semi-expanded\\\",\\\"separate\\\",\\\"serif\\\",\\\"show\\\",\\\"sidama\\\",\\\"simp-chinese-formal\\\",\\\"simp-chinese-informal\\\",\\\"single\\\",\\\"skew\\\",\\\"skewX\\\",\\\"skewY\\\",\\\"skip-white-space\\\",\\\"slide\\\",\\\"slider-horizontal\\\",\\\"slider-vertical\\\",\\\"sliderthumb-horizontal\\\",\\\"sliderthumb-vertical\\\",\\\"slow\\\",\\\"small\\\",\\\"small-caps\\\",\\\"small-caption\\\",\\\"smaller\\\",\\\"soft-light\\\",\\\"solid\\\",\\\"somali\\\",\\\"source-atop\\\",\\\"source-in\\\",\\\"source-out\\\",\\\"source-over\\\",\\\"space\\\",\\\"space-around\\\",\\\"space-between\\\",\\\"space-evenly\\\",\\\"spell-out\\\",\\\"square\\\",\\\"square-button\\\",\\\"start\\\",\\\"static\\\",\\\"status-bar\\\",\\\"stretch\\\",\\\"stroke\\\",\\\"sub\\\",\\\"subpixel-antialiased\\\",\\\"super\\\",\\\"sw-resize\\\",\\\"symbolic\\\",\\\"symbols\\\",\\\"system-ui\\\",\\\"table\\\",\\\"table-caption\\\",\\\"table-cell\\\",\\\"table-column\\\",\\\"table-column-group\\\",\\\"table-footer-group\\\",\\\"table-header-group\\\",\\\"table-row\\\",\\\"table-row-group\\\",\\\"tamil\\\",\\\"telugu\\\",\\\"text\\\",\\\"text-bottom\\\",\\\"text-top\\\",\\\"textarea\\\",\\\"textfield\\\",\\\"thai\\\",\\\"thick\\\",\\\"thin\\\",\\\"threeddarkshadow\\\",\\\"threedface\\\",\\\"threedhighlight\\\",\\\"threedlightshadow\\\",\\\"threedshadow\\\",\\\"tibetan\\\",\\\"tigre\\\",\\\"tigrinya-er\\\",\\\"tigrinya-er-abegede\\\",\\\"tigrinya-et\\\",\\\"tigrinya-et-abegede\\\",\\\"to\\\",\\\"top\\\",\\\"trad-chinese-formal\\\",\\\"trad-chinese-informal\\\",\\\"transform\\\",\\\"translate\\\",\\\"translate3d\\\",\\\"translateX\\\",\\\"translateY\\\",\\\"translateZ\\\",\\\"transparent\\\",\\\"ultra-condensed\\\",\\\"ultra-expanded\\\",\\\"underline\\\",\\\"unset\\\",\\\"up\\\",\\\"upper-alpha\\\",\\\"upper-armenian\\\",\\\"upper-greek\\\",\\\"upper-hexadecimal\\\",\\\"upper-latin\\\",\\\"upper-norwegian\\\",\\\"upper-roman\\\",\\\"uppercase\\\",\\\"urdu\\\",\\\"url\\\",\\\"var\\\",\\\"vertical\\\",\\\"vertical-text\\\",\\\"visible\\\",\\\"visibleFill\\\",\\\"visiblePainted\\\",\\\"visibleStroke\\\",\\\"visual\\\",\\\"w-resize\\\",\\\"wait\\\",\\\"wave\\\",\\\"wider\\\",\\\"window\\\",\\\"windowframe\\\",\\\"windowtext\\\",\\\"words\\\",\\\"wrap\\\",\\\"wrap-reverse\\\",\\\"x-large\\\",\\\"x-small\\\",\\\"xor\\\",\\\"xx-large\\\",\\\"xx-small\\\"],w=t(y),k=r.concat(i).concat(n).concat(s).concat(d).concat(u).concat(b).concat(y);function v(e,t){for(var r,o=!1;null!=(r=e.next());){if(o&&\\\"/\\\"==r){t.tokenize=null;break}o=\\\"*\\\"==r}return[\\\"comment\\\",\\\"comment\\\"]}e.registerHelper(\\\"hintWords\\\",\\\"css\\\",k),e.defineMIME(\\\"text/css\\\",{documentTypes:o,mediaTypes:a,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:p,nonStandardPropertyKeywords:m,fontProperties:h,counterDescriptors:g,colorKeywords:f,valueKeywords:w,tokenHooks:{\\\"/\\\":function(e,t){return!!e.eat(\\\"*\\\")&&(t.tokenize=v,v(e,t))}},name:\\\"css\\\"}),e.defineMIME(\\\"text/x-scss\\\",{mediaTypes:a,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:p,nonStandardPropertyKeywords:m,colorKeywords:f,valueKeywords:w,fontProperties:h,allowNested:!0,lineComment:\\\"//\\\",tokenHooks:{\\\"/\\\":function(e,t){return e.eat(\\\"/\\\")?(e.skipToEnd(),[\\\"comment\\\",\\\"comment\\\"]):e.eat(\\\"*\\\")?(t.tokenize=v,v(e,t)):[\\\"operator\\\",\\\"operator\\\"]},\\\":\\\":function(e){return!!e.match(/\\\\s*\\\\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\\\\w-]+/),e.match(/^\\\\s*:/,!1)?[\\\"variable-2\\\",\\\"variable-definition\\\"]:[\\\"variable-2\\\",\\\"variable\\\"]},\\\"#\\\":function(e){return!!e.eat(\\\"{\\\")&&[null,\\\"interpolation\\\"]}},name:\\\"css\\\",helperType:\\\"scss\\\"}),e.defineMIME(\\\"text/x-less\\\",{mediaTypes:a,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:p,nonStandardPropertyKeywords:m,colorKeywords:f,valueKeywords:w,fontProperties:h,allowNested:!0,lineComment:\\\"//\\\",tokenHooks:{\\\"/\\\":function(e,t){return e.eat(\\\"/\\\")?(e.skipToEnd(),[\\\"comment\\\",\\\"comment\\\"]):e.eat(\\\"*\\\")?(t.tokenize=v,v(e,t)):[\\\"operator\\\",\\\"operator\\\"]},\\\"@\\\":function(e){return e.eat(\\\"{\\\")?[null,\\\"interpolation\\\"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\\\b/i,!1)&&(e.eatWhile(/[\\\\w\\\\\\\\\\\\-]/),e.match(/^\\\\s*:/,!1)?[\\\"variable-2\\\",\\\"variable-definition\\\"]:[\\\"variable-2\\\",\\\"variable\\\"])},\\\"&\\\":function(){return[\\\"atom\\\",\\\"atom\\\"]}},name:\\\"css\\\",helperType:\\\"less\\\"}),e.defineMIME(\\\"text/x-gss\\\",{documentTypes:o,mediaTypes:a,mediaFeatures:l,propertyKeywords:p,nonStandardPropertyKeywords:m,fontProperties:h,counterDescriptors:g,colorKeywords:f,valueKeywords:w,supportsAtComponent:!0,tokenHooks:{\\\"/\\\":function(e,t){return!!e.eat(\\\"*\\\")&&(t.tokenize=v,v(e,t))}},name:\\\"css\\\",helperType:\\\"gss\\\"})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/css/css.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-mode-css/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-mode-css/readme\",\n \"text\": \"This plugin adds Syntax Highlighting for CSS tiddlers (text/css) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-mode-htmlembedded":{"title":"$:/plugins/tiddlywiki/codemirror-mode-htmlembedded","name":"CodeMirror Mode HTML Embedded","description":"Embedded HTML highlighting mode for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-mode-htmlmixed $:/plugins/tiddlywiki/codemirror-mode-javascript $:/plugins/tiddlywiki/codemirror-mode-css $:/plugins/tiddlywiki/codemirror-mode-xml","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/addon/mode/multiplex.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";e.multiplexingMode=function(n){var i=Array.prototype.slice.call(arguments,1);function t(e,n,i,t){if(\\\"string\\\"==typeof n){var r=e.indexOf(n,i);return t&&r>-1?r+n.length:r}var o=n.exec(i?e.slice(i):e);return o?o.index+i+(t?o[0].length:0):-1}return{startState:function(){return{outer:e.startState(n),innerActive:null,inner:null}},copyState:function(i){return{outer:e.copyState(n,i.outer),innerActive:i.innerActive,inner:i.innerActive&&e.copyState(i.innerActive.mode,i.inner)}},token:function(r,o){if(o.innerActive){var c=o.innerActive;a=r.string;if(!c.close&&r.sol())return o.innerActive=o.inner=null,this.token(r,o);if((v=c.close?t(a,c.close,r.pos,c.parseDelimiters):-1)==r.pos&&!c.parseDelimiters)return r.match(c.close),o.innerActive=o.inner=null,c.delimStyle&&c.delimStyle+\\\" \\\"+c.delimStyle+\\\"-close\\\";v>-1&&(r.string=a.slice(0,v));var l=c.mode.token(r,o.inner);return v>-1&&(r.string=a),v==r.pos&&c.parseDelimiters&&(o.innerActive=o.inner=null),c.innerStyle&&(l=l?l+\\\" \\\"+c.innerStyle:c.innerStyle),l}for(var s=1/0,a=r.string,u=0;u<i.length;++u){var v,d=i[u];if((v=t(a,d.open,r.pos))==r.pos){d.parseDelimiters||r.match(d.open),o.innerActive=d;var f=0;if(n.indent){var m=n.indent(o.outer,\\\"\\\");m!==e.Pass&&(f=m)}return o.inner=e.startState(d.mode,f),d.delimStyle&&d.delimStyle+\\\" \\\"+d.delimStyle+\\\"-open\\\"}-1!=v&&v<s&&(s=v)}s!=1/0&&(r.string=a.slice(0,s));var p=n.token(r,o.outer);return s!=1/0&&(r.string=a),p},indent:function(i,t){var r=i.innerActive?i.innerActive.mode:n;return r.indent?r.indent(i.innerActive?i.inner:i.outer,t):e.Pass},blankLine:function(t){var r=t.innerActive?t.innerActive.mode:n;if(r.blankLine&&r.blankLine(t.innerActive?t.inner:t.outer),t.innerActive)\\\"\\\\n\\\"===t.innerActive.close&&(t.innerActive=t.inner=null);else for(var o=0;o<i.length;++o){var c=i[o];\\\"\\\\n\\\"===c.open&&(t.innerActive=c,t.inner=e.startState(c.mode,r.indent?r.indent(t.outer,\\\"\\\"):0))}},electricChars:n.electricChars,innerMode:function(e){return e.inner?{state:e.inner,mode:e.innerActive.mode}:{state:e.outer,mode:n}}}}});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/mode/multiplex.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/mode/htmlembedded/htmlembedded.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\"),require(\\\"../htmlmixed/htmlmixed\\\"),require(\\\"../../addon/mode/multiplex\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"../htmlmixed/htmlmixed\\\",\\\"../../addon/mode/multiplex\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";e.defineMode(\\\"htmlembedded\\\",function(i,t){var d=t.closeComment||\\\"--%>\\\";return e.multiplexingMode(e.getMode(i,\\\"htmlmixed\\\"),{open:t.openComment||\\\"<%--\\\",close:d,delimStyle:\\\"comment\\\",mode:{token:function(e){return e.skipTo(d)||e.skipToEnd(),\\\"comment\\\"}}},{open:t.open||t.scriptStartRegex||\\\"<%\\\",close:t.close||t.scriptEndRegex||\\\"%>\\\",mode:e.getMode(i,t.scriptingModeSpec)})},\\\"htmlmixed\\\"),e.defineMIME(\\\"application/x-ejs\\\",{name:\\\"htmlembedded\\\",scriptingModeSpec:\\\"javascript\\\"}),e.defineMIME(\\\"application/x-aspx\\\",{name:\\\"htmlembedded\\\",scriptingModeSpec:\\\"text/x-csharp\\\"}),e.defineMIME(\\\"application/x-jsp\\\",{name:\\\"htmlembedded\\\",scriptingModeSpec:\\\"text/x-java\\\"}),e.defineMIME(\\\"application/x-erb\\\",{name:\\\"htmlembedded\\\",scriptingModeSpec:\\\"ruby\\\"})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/htmlembedded/htmlembedded.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-mode-htmlembedded/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-mode-htmlembedded/readme\",\n \"text\": \"This plugin adds Syntax Highlighting for Embedded-HTML tiddlers (application/x-aspx, application/x-ejs, application/x-jsp and application/x-erb) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-mode-htmlmixed":{"title":"$:/plugins/tiddlywiki/codemirror-mode-htmlmixed","name":"CodeMirror Mode HTML Mixed","description":"HTML mixed highlighting mode for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-mode-xml $:/plugins/tiddlywiki/codemirror-mode-javascript $:/plugins/tiddlywiki/codemirror-mode-css","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/mode/htmlmixed/htmlmixed.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../../lib/codemirror\\\"),require(\\\"../xml/xml\\\"),require(\\\"../javascript/javascript\\\"),require(\\\"../css/css\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"../xml/xml\\\",\\\"../javascript/javascript\\\",\\\"../css/css\\\"],t):t(CodeMirror)}(function(t){\\\"use strict\\\";var e={script:[[\\\"lang\\\",/(javascript|babel)/i,\\\"javascript\\\"],[\\\"type\\\",/^(?:text|application)\\\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,\\\"javascript\\\"],[\\\"type\\\",/./,\\\"text/plain\\\"],[null,null,\\\"javascript\\\"]],style:[[\\\"lang\\\",/^css$/i,\\\"css\\\"],[\\\"type\\\",/^(text\\\\/)?(x-)?(stylesheet|css)$/i,\\\"css\\\"],[\\\"type\\\",/./,\\\"text/plain\\\"],[null,null,\\\"css\\\"]]};var a={};function n(t,e){var n,l=t.match(a[n=e]||(a[n]=new RegExp(\\\"\\\\\\\\s+\\\"+n+\\\"\\\\\\\\s*=\\\\\\\\s*('|\\\\\\\")?([^'\\\\\\\"]+)('|\\\\\\\")?\\\\\\\\s*\\\")));return l?/^\\\\s*(.*?)\\\\s*$/.exec(l[2])[1]:\\\"\\\"}function l(t,e){return new RegExp((e?\\\"^\\\":\\\"\\\")+\\\"</s*\\\"+t+\\\"s*>\\\",\\\"i\\\")}function r(t,e){for(var a in t)for(var n=e[a]||(e[a]=[]),l=t[a],r=l.length-1;r>=0;r--)n.unshift(l[r])}t.defineMode(\\\"htmlmixed\\\",function(a,o){var c=t.getMode(a,{name:\\\"xml\\\",htmlMode:!0,multilineTagIndentFactor:o.multilineTagIndentFactor,multilineTagIndentPastTag:o.multilineTagIndentPastTag}),i={},s=o&&o.tags,u=o&&o.scriptTypes;if(r(e,i),s&&r(s,i),u)for(var m=u.length-1;m>=0;m--)i.script.unshift([\\\"type\\\",u[m].matches,u[m].mode]);function d(e,r){var o,s=c.token(e,r.htmlState),u=/\\\\btag\\\\b/.test(s);if(u&&!/[<>\\\\s\\\\/]/.test(e.current())&&(o=r.htmlState.tagName&&r.htmlState.tagName.toLowerCase())&&i.hasOwnProperty(o))r.inTag=o+\\\" \\\";else if(r.inTag&&u&&/>$/.test(e.current())){var m=/^([\\\\S]+) (.*)/.exec(r.inTag);r.inTag=null;var p=\\\">\\\"==e.current()&&function(t,e){for(var a=0;a<t.length;a++){var l=t[a];if(!l[0]||l[1].test(n(e,l[0])))return l[2]}}(i[m[1]],m[2]),f=t.getMode(a,p),g=l(m[1],!0),h=l(m[1],!1);r.token=function(t,e){return t.match(g,!1)?(e.token=d,e.localState=e.localMode=null,null):(a=t,n=h,l=e.localMode.token(t,e.localState),r=a.current(),(o=r.search(n))>-1?a.backUp(r.length-o):r.match(/<\\\\/?$/)&&(a.backUp(r.length),a.match(n,!1)||a.match(r)),l);var a,n,l,r,o},r.localMode=f,r.localState=t.startState(f,c.indent(r.htmlState,\\\"\\\"))}else r.inTag&&(r.inTag+=e.current(),e.eol()&&(r.inTag+=\\\" \\\"));return s}return{startState:function(){return{token:d,inTag:null,localMode:null,localState:null,htmlState:t.startState(c)}},copyState:function(e){var a;return e.localState&&(a=t.copyState(e.localMode,e.localState)),{token:e.token,inTag:e.inTag,localMode:e.localMode,localState:a,htmlState:t.copyState(c,e.htmlState)}},token:function(t,e){return e.token(t,e)},indent:function(e,a,n){return!e.localMode||/^\\\\s*<\\\\//.test(a)?c.indent(e.htmlState,a):e.localMode.indent?e.localMode.indent(e.localState,a,n):t.Pass},innerMode:function(t){return{state:t.localState||t.htmlState,mode:t.localMode||c}}}},\\\"xml\\\",\\\"javascript\\\",\\\"css\\\"),t.defineMIME(\\\"text/html\\\",\\\"htmlmixed\\\")});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/htmlmixed/htmlmixed.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-mode-htmlmixed/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-mode-htmlmixed/readme\",\n \"text\": \"This plugin adds Syntax Highlighting for HTML tiddlers (text/html) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-mode-javascript":{"title":"$:/plugins/tiddlywiki/codemirror-mode-javascript","name":"CodeMirror Mode JavaScript","description":"JavaScript highlighting mode for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";e.defineMode(\\\"javascript\\\",function(t,r){var n,a,i=t.indentUnit,o=r.statementIndent,c=r.jsonld,u=r.json||c,s=r.typescript,f=r.wordCharacters||/[\\\\w$\\\\xa1-\\\\uffff]/,l=function(){function e(e){return{type:e,style:\\\"keyword\\\"}}var t=e(\\\"keyword a\\\"),r=e(\\\"keyword b\\\"),n=e(\\\"keyword c\\\"),a=e(\\\"keyword d\\\"),i=e(\\\"operator\\\"),o={type:\\\"atom\\\",style:\\\"atom\\\"};return{if:e(\\\"if\\\"),while:t,with:t,else:r,do:r,try:r,finally:r,return:a,break:a,continue:a,new:e(\\\"new\\\"),delete:n,void:n,throw:n,debugger:e(\\\"debugger\\\"),var:e(\\\"var\\\"),const:e(\\\"var\\\"),let:e(\\\"var\\\"),function:e(\\\"function\\\"),catch:e(\\\"catch\\\"),for:e(\\\"for\\\"),switch:e(\\\"switch\\\"),case:e(\\\"case\\\"),default:e(\\\"default\\\"),in:i,typeof:i,instanceof:i,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e(\\\"this\\\"),class:e(\\\"class\\\"),super:e(\\\"atom\\\"),yield:n,export:e(\\\"export\\\"),import:e(\\\"import\\\"),extends:n,await:n}}(),d=/[+\\\\-*&%=<>!?|~^@]/,p=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\\\"/;function m(e,t,r){return n=e,a=r,t}function k(e,t){var r,n=e.next();if('\\\"'==n||\\\"'\\\"==n)return t.tokenize=(r=n,function(e,t){var n,a=!1;if(c&&\\\"@\\\"==e.peek()&&e.match(p))return t.tokenize=k,m(\\\"jsonld-keyword\\\",\\\"meta\\\");for(;null!=(n=e.next())&&(n!=r||a);)a=!a&&\\\"\\\\\\\\\\\"==n;return a||(t.tokenize=k),m(\\\"string\\\",\\\"string\\\")}),t.tokenize(e,t);if(\\\".\\\"==n&&e.match(/^\\\\d+(?:[eE][+\\\\-]?\\\\d+)?/))return m(\\\"number\\\",\\\"number\\\");if(\\\".\\\"==n&&e.match(\\\"..\\\"))return m(\\\"spread\\\",\\\"meta\\\");if(/[\\\\[\\\\]{}\\\\(\\\\),;\\\\:\\\\.]/.test(n))return m(n);if(\\\"=\\\"==n&&e.eat(\\\">\\\"))return m(\\\"=>\\\",\\\"operator\\\");if(\\\"0\\\"==n&&e.eat(/x/i))return e.eatWhile(/[\\\\da-f]/i),m(\\\"number\\\",\\\"number\\\");if(\\\"0\\\"==n&&e.eat(/o/i))return e.eatWhile(/[0-7]/i),m(\\\"number\\\",\\\"number\\\");if(\\\"0\\\"==n&&e.eat(/b/i))return e.eatWhile(/[01]/i),m(\\\"number\\\",\\\"number\\\");if(/\\\\d/.test(n))return e.match(/^\\\\d*(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d+)?/),m(\\\"number\\\",\\\"number\\\");if(\\\"/\\\"==n)return e.eat(\\\"*\\\")?(t.tokenize=v,v(e,t)):e.eat(\\\"/\\\")?(e.skipToEnd(),m(\\\"comment\\\",\\\"comment\\\")):He(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if(\\\"/\\\"==t&&!n)return;\\\"[\\\"==t?n=!0:n&&\\\"]\\\"==t&&(n=!1)}r=!r&&\\\"\\\\\\\\\\\"==t}}(e),e.match(/^\\\\b(([gimyu])(?![gimyu]*\\\\2))+\\\\b/),m(\\\"regexp\\\",\\\"string-2\\\")):(e.eat(\\\"=\\\"),m(\\\"operator\\\",\\\"operator\\\",e.current()));if(\\\"`\\\"==n)return t.tokenize=y,y(e,t);if(\\\"#\\\"==n)return e.skipToEnd(),m(\\\"error\\\",\\\"error\\\");if(d.test(n))return\\\">\\\"==n&&t.lexical&&\\\">\\\"==t.lexical.type||(e.eat(\\\"=\\\")?\\\"!\\\"!=n&&\\\"=\\\"!=n||e.eat(\\\"=\\\"):/[<>*+\\\\-]/.test(n)&&(e.eat(n),\\\">\\\"==n&&e.eat(n))),m(\\\"operator\\\",\\\"operator\\\",e.current());if(f.test(n)){e.eatWhile(f);var a=e.current();if(\\\".\\\"!=t.lastType){if(l.propertyIsEnumerable(a)){var i=l[a];return m(i.type,i.style,a)}if(\\\"async\\\"==a&&e.match(/^(\\\\s|\\\\/\\\\*.*?\\\\*\\\\/)*[\\\\[\\\\(\\\\w]/,!1))return m(\\\"async\\\",\\\"keyword\\\",a)}return m(\\\"variable\\\",\\\"variable\\\",a)}}function v(e,t){for(var r,n=!1;r=e.next();){if(\\\"/\\\"==r&&n){t.tokenize=k;break}n=\\\"*\\\"==r}return m(\\\"comment\\\",\\\"comment\\\")}function y(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&(\\\"`\\\"==r||\\\"$\\\"==r&&e.eat(\\\"{\\\"))){t.tokenize=k;break}n=!n&&\\\"\\\\\\\\\\\"==r}return m(\\\"quasi\\\",\\\"string-2\\\",e.current())}var b=\\\"([{}])\\\";function w(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf(\\\"=>\\\",e.start);if(!(r<0)){if(s){var n=/:\\\\s*(?:\\\\w+(?:<[^>]*>|\\\\[\\\\])?|\\\\{[^}]*\\\\})\\\\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var a=0,i=!1,o=r-1;o>=0;--o){var c=e.string.charAt(o),u=b.indexOf(c);if(u>=0&&u<3){if(!a){++o;break}if(0==--a){\\\"(\\\"==c&&(i=!0);break}}else if(u>=3&&u<6)++a;else if(f.test(c))i=!0;else{if(/[\\\"'\\\\/]/.test(c))return;if(i&&!a){++o;break}}}i&&!a&&(t.fatArrowAt=o)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,\\\"jsonld-keyword\\\":!0};function h(e,t,r,n,a,i){this.indented=e,this.column=t,this.type=r,this.prev=a,this.info=i,null!=n&&(this.align=n)}function g(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var j={state:null,column:null,marked:null,cc:null};function M(){for(var e=arguments.length-1;e>=0;e--)j.cc.push(arguments[e])}function V(){return M.apply(null,arguments),!0}function A(e){function t(t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}var n=j.state;if(j.marked=\\\"def\\\",n.context){if(t(n.localVars))return;n.localVars={name:e,next:n.localVars}}else{if(t(n.globalVars))return;r.globalVars&&(n.globalVars={name:e,next:n.globalVars})}}function E(e){return\\\"public\\\"==e||\\\"private\\\"==e||\\\"protected\\\"==e||\\\"abstract\\\"==e||\\\"readonly\\\"==e}var z={name:\\\"this\\\",next:{name:\\\"arguments\\\"}};function I(){j.state.context={prev:j.state.context,vars:j.state.localVars},j.state.localVars=z}function T(){j.state.localVars=j.state.context.vars,j.state.context=j.state.context.prev}function $(e,t){var r=function(){var r=j.state,n=r.indented;if(\\\"stat\\\"==r.lexical.type)n=r.lexical.indented;else for(var a=r.lexical;a&&\\\")\\\"==a.type&&a.align;a=a.prev)n=a.indented;r.lexical=new h(n,j.stream.column(),e,null,r.lexical,t)};return r.lex=!0,r}function C(){var e=j.state;e.lexical.prev&&(\\\")\\\"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function q(e){return function t(r){return r==e?V():\\\";\\\"==e?M():V(t)}}function O(e,t){return\\\"var\\\"==e?V($(\\\"vardef\\\",t.length),pe,q(\\\";\\\"),C):\\\"keyword a\\\"==e?V($(\\\"form\\\"),W,O,C):\\\"keyword b\\\"==e?V($(\\\"form\\\"),O,C):\\\"keyword d\\\"==e?j.stream.match(/^\\\\s*$/,!1)?V():V($(\\\"stat\\\"),U,q(\\\";\\\"),C):\\\"debugger\\\"==e?V(q(\\\";\\\")):\\\"{\\\"==e?V($(\\\"}\\\"),te,C):\\\";\\\"==e?V():\\\"if\\\"==e?(\\\"else\\\"==j.state.lexical.info&&j.state.cc[j.state.cc.length-1]==C&&j.state.cc.pop()(),V($(\\\"form\\\"),W,O,C,be)):\\\"function\\\"==e?V(Me):\\\"for\\\"==e?V($(\\\"form\\\"),we,O,C):\\\"class\\\"==e||s&&\\\"interface\\\"==t?(j.marked=\\\"keyword\\\",V($(\\\"form\\\"),Ee,C)):\\\"variable\\\"==e?s&&\\\"declare\\\"==t?(j.marked=\\\"keyword\\\",V(O)):s&&(\\\"module\\\"==t||\\\"enum\\\"==t||\\\"type\\\"==t)&&j.stream.match(/^\\\\s*\\\\w/,!1)?(j.marked=\\\"keyword\\\",\\\"enum\\\"==t?V(Ue):\\\"type\\\"==t?V(ie,q(\\\"operator\\\"),ie,q(\\\";\\\")):V($(\\\"form\\\"),me,q(\\\"{\\\"),$(\\\"}\\\"),te,C,C)):s&&\\\"namespace\\\"==t?(j.marked=\\\"keyword\\\",V($(\\\"form\\\"),P,te,C)):s&&\\\"abstract\\\"==t?(j.marked=\\\"keyword\\\",V(O)):V($(\\\"stat\\\"),Q):\\\"switch\\\"==e?V($(\\\"form\\\"),W,q(\\\"{\\\"),$(\\\"}\\\",\\\"switch\\\"),te,C,C):\\\"case\\\"==e?V(P,q(\\\":\\\")):\\\"default\\\"==e?V(q(\\\":\\\")):\\\"catch\\\"==e?V($(\\\"form\\\"),I,q(\\\"(\\\"),Ve,q(\\\")\\\"),O,C,T):\\\"export\\\"==e?V($(\\\"stat\\\"),$e,C):\\\"import\\\"==e?V($(\\\"stat\\\"),qe,C):\\\"async\\\"==e?V(O):\\\"@\\\"==t?V(P,O):M($(\\\"stat\\\"),P,q(\\\";\\\"),C)}function P(e,t){return N(e,t,!1)}function S(e,t){return N(e,t,!0)}function W(e){return\\\"(\\\"!=e?M():V($(\\\")\\\"),P,q(\\\")\\\"),C)}function N(e,t,r){if(j.state.fatArrowAt==j.stream.start){var n=r?J:G;if(\\\"(\\\"==e)return V(I,$(\\\")\\\"),_(Ve,\\\")\\\"),C,q(\\\"=>\\\"),n,T);if(\\\"variable\\\"==e)return M(I,me,q(\\\"=>\\\"),n,T)}var a,i=r?H:B;return x.hasOwnProperty(e)?V(i):\\\"function\\\"==e?V(Me,i):\\\"class\\\"==e||s&&\\\"interface\\\"==t?(j.marked=\\\"keyword\\\",V($(\\\"form\\\"),Ae,C)):\\\"keyword c\\\"==e||\\\"async\\\"==e?V(r?S:P):\\\"(\\\"==e?V($(\\\")\\\"),U,q(\\\")\\\"),C,i):\\\"operator\\\"==e||\\\"spread\\\"==e?V(r?S:P):\\\"[\\\"==e?V($(\\\"]\\\"),Ne,C,i):\\\"{\\\"==e?ee(X,\\\"}\\\",null,i):\\\"quasi\\\"==e?M(D,i):\\\"new\\\"==e?V((a=r,function(e){return\\\".\\\"==e?V(a?L:K):\\\"variable\\\"==e&&s?V(fe,a?H:B):M(a?S:P)})):\\\"import\\\"==e?V(P):V()}function U(e){return e.match(/[;\\\\}\\\\)\\\\],]/)?M():M(P)}function B(e,t){return\\\",\\\"==e?V(P):H(e,t,!1)}function H(e,t,r){var n=0==r?B:H,a=0==r?P:S;return\\\"=>\\\"==e?V(I,r?J:G,T):\\\"operator\\\"==e?/\\\\+\\\\+|--/.test(t)||s&&\\\"!\\\"==t?V(n):s&&\\\"<\\\"==t&&j.stream.match(/^([^>]|<.*?>)*>\\\\s*\\\\(/,!1)?V($(\\\">\\\"),_(ie,\\\">\\\"),C,n):\\\"?\\\"==t?V(P,q(\\\":\\\"),a):V(a):\\\"quasi\\\"==e?M(D,n):\\\";\\\"!=e?\\\"(\\\"==e?ee(S,\\\")\\\",\\\"call\\\",n):\\\".\\\"==e?V(R,n):\\\"[\\\"==e?V($(\\\"]\\\"),U,q(\\\"]\\\"),C,n):s&&\\\"as\\\"==t?(j.marked=\\\"keyword\\\",V(ie,n)):\\\"regexp\\\"==e?(j.state.lastType=j.marked=\\\"operator\\\",j.stream.backUp(j.stream.pos-j.stream.start-1),V(a)):void 0:void 0}function D(e,t){return\\\"quasi\\\"!=e?M():\\\"${\\\"!=t.slice(t.length-2)?V(D):V(P,F)}function F(e){if(\\\"}\\\"==e)return j.marked=\\\"string-2\\\",j.state.tokenize=y,V(D)}function G(e){return w(j.stream,j.state),M(\\\"{\\\"==e?O:P)}function J(e){return w(j.stream,j.state),M(\\\"{\\\"==e?O:S)}function K(e,t){if(\\\"target\\\"==t)return j.marked=\\\"keyword\\\",V(B)}function L(e,t){if(\\\"target\\\"==t)return j.marked=\\\"keyword\\\",V(H)}function Q(e){return\\\":\\\"==e?V(C,O):M(B,q(\\\";\\\"),C)}function R(e){if(\\\"variable\\\"==e)return j.marked=\\\"property\\\",V()}function X(e,t){if(\\\"async\\\"==e)return j.marked=\\\"property\\\",V(X);if(\\\"variable\\\"==e||\\\"keyword\\\"==j.style){return j.marked=\\\"property\\\",\\\"get\\\"==t||\\\"set\\\"==t?V(Y):(s&&j.state.fatArrowAt==j.stream.start&&(r=j.stream.match(/^\\\\s*:\\\\s*/,!1))&&(j.state.fatArrowAt=j.stream.pos+r[0].length),V(Z));var r}else{if(\\\"number\\\"==e||\\\"string\\\"==e)return j.marked=c?\\\"property\\\":j.style+\\\" property\\\",V(Z);if(\\\"jsonld-keyword\\\"==e)return V(Z);if(s&&E(t))return j.marked=\\\"keyword\\\",V(X);if(\\\"[\\\"==e)return V(P,re,q(\\\"]\\\"),Z);if(\\\"spread\\\"==e)return V(S,Z);if(\\\"*\\\"==t)return j.marked=\\\"keyword\\\",V(X);if(\\\":\\\"==e)return M(Z)}}function Y(e){return\\\"variable\\\"!=e?M(Z):(j.marked=\\\"property\\\",V(Me))}function Z(e){return\\\":\\\"==e?V(S):\\\"(\\\"==e?M(Me):void 0}function _(e,t,r){function n(a,i){if(r?r.indexOf(a)>-1:\\\",\\\"==a){var o=j.state.lexical;return\\\"call\\\"==o.info&&(o.pos=(o.pos||0)+1),V(function(r,n){return r==t||n==t?M():M(e)},n)}return a==t||i==t?V():V(q(t))}return function(r,a){return r==t||a==t?V():M(e,n)}}function ee(e,t,r){for(var n=3;n<arguments.length;n++)j.cc.push(arguments[n]);return V($(t,r),_(e,t),C)}function te(e){return\\\"}\\\"==e?V():M(O,te)}function re(e,t){if(s){if(\\\":\\\"==e)return V(ie);if(\\\"?\\\"==t)return V(re)}}function ne(e){if(s&&\\\":\\\"==e)return j.stream.match(/^\\\\s*\\\\w+\\\\s+is\\\\b/,!1)?V(P,ae,ie):V(ie)}function ae(e,t){if(\\\"is\\\"==t)return j.marked=\\\"keyword\\\",V()}function ie(e,t){return\\\"keyof\\\"==t||\\\"typeof\\\"==t?(j.marked=\\\"keyword\\\",V(\\\"keyof\\\"==t?ie:S)):\\\"variable\\\"==e||\\\"void\\\"==t?(j.marked=\\\"type\\\",V(se)):\\\"string\\\"==e||\\\"number\\\"==e||\\\"atom\\\"==e?V(se):\\\"[\\\"==e?V($(\\\"]\\\"),_(ie,\\\"]\\\",\\\",\\\"),C,se):\\\"{\\\"==e?V($(\\\"}\\\"),_(ce,\\\"}\\\",\\\",;\\\"),C,se):\\\"(\\\"==e?V(_(ue,\\\")\\\"),oe):\\\"<\\\"==e?V(_(ie,\\\">\\\"),ie):void 0}function oe(e){if(\\\"=>\\\"==e)return V(ie)}function ce(e,t){return\\\"variable\\\"==e||\\\"keyword\\\"==j.style?(j.marked=\\\"property\\\",V(ce)):\\\"?\\\"==t?V(ce):\\\":\\\"==e?V(ie):\\\"[\\\"==e?V(P,re,q(\\\"]\\\"),ce):void 0}function ue(e,t){return\\\"variable\\\"==e&&j.stream.match(/^\\\\s*[?:]/,!1)||\\\"?\\\"==t?V(ue):\\\":\\\"==e?V(ie):M(ie)}function se(e,t){return\\\"<\\\"==t?V($(\\\">\\\"),_(ie,\\\">\\\"),C,se):\\\"|\\\"==t||\\\".\\\"==e||\\\"&\\\"==t?V(ie):\\\"[\\\"==e?V(q(\\\"]\\\"),se):\\\"extends\\\"==t||\\\"implements\\\"==t?(j.marked=\\\"keyword\\\",V(ie)):void 0}function fe(e,t){if(\\\"<\\\"==t)return V($(\\\">\\\"),_(ie,\\\">\\\"),C,se)}function le(){return M(ie,de)}function de(e,t){if(\\\"=\\\"==t)return V(ie)}function pe(e,t){return\\\"enum\\\"==t?(j.marked=\\\"keyword\\\",V(Ue)):M(me,re,ve,ye)}function me(e,t){return s&&E(t)?(j.marked=\\\"keyword\\\",V(me)):\\\"variable\\\"==e?(A(t),V()):\\\"spread\\\"==e?V(me):\\\"[\\\"==e?ee(me,\\\"]\\\"):\\\"{\\\"==e?ee(ke,\\\"}\\\"):void 0}function ke(e,t){return\\\"variable\\\"!=e||j.stream.match(/^\\\\s*:/,!1)?(\\\"variable\\\"==e&&(j.marked=\\\"property\\\"),\\\"spread\\\"==e?V(me):\\\"}\\\"==e?M():V(q(\\\":\\\"),me,ve)):(A(t),V(ve))}function ve(e,t){if(\\\"=\\\"==t)return V(S)}function ye(e){if(\\\",\\\"==e)return V(pe)}function be(e,t){if(\\\"keyword b\\\"==e&&\\\"else\\\"==t)return V($(\\\"form\\\",\\\"else\\\"),O,C)}function we(e,t){return\\\"await\\\"==t?V(we):\\\"(\\\"==e?V($(\\\")\\\"),xe,q(\\\")\\\"),C):void 0}function xe(e){return\\\"var\\\"==e?V(pe,q(\\\";\\\"),ge):\\\";\\\"==e?V(ge):\\\"variable\\\"==e?V(he):M(P,q(\\\";\\\"),ge)}function he(e,t){return\\\"in\\\"==t||\\\"of\\\"==t?(j.marked=\\\"keyword\\\",V(P)):V(B,ge)}function ge(e,t){return\\\";\\\"==e?V(je):\\\"in\\\"==t||\\\"of\\\"==t?(j.marked=\\\"keyword\\\",V(P)):M(P,q(\\\";\\\"),je)}function je(e){\\\")\\\"!=e&&V(P)}function Me(e,t){return\\\"*\\\"==t?(j.marked=\\\"keyword\\\",V(Me)):\\\"variable\\\"==e?(A(t),V(Me)):\\\"(\\\"==e?V(I,$(\\\")\\\"),_(Ve,\\\")\\\"),C,ne,O,T):s&&\\\"<\\\"==t?V($(\\\">\\\"),_(le,\\\">\\\"),C,Me):void 0}function Ve(e,t){return\\\"@\\\"==t&&V(P,Ve),\\\"spread\\\"==e?V(Ve):s&&E(t)?(j.marked=\\\"keyword\\\",V(Ve)):M(me,re,ve)}function Ae(e,t){return\\\"variable\\\"==e?Ee(e,t):ze(e,t)}function Ee(e,t){if(\\\"variable\\\"==e)return A(t),V(ze)}function ze(e,t){return\\\"<\\\"==t?V($(\\\">\\\"),_(le,\\\">\\\"),C,ze):\\\"extends\\\"==t||\\\"implements\\\"==t||s&&\\\",\\\"==e?(\\\"implements\\\"==t&&(j.marked=\\\"keyword\\\"),V(s?ie:P,ze)):\\\"{\\\"==e?V($(\\\"}\\\"),Ie,C):void 0}function Ie(e,t){return\\\"async\\\"==e||\\\"variable\\\"==e&&(\\\"static\\\"==t||\\\"get\\\"==t||\\\"set\\\"==t||s&&E(t))&&j.stream.match(/^\\\\s+[\\\\w$\\\\xa1-\\\\uffff]/,!1)?(j.marked=\\\"keyword\\\",V(Ie)):\\\"variable\\\"==e||\\\"keyword\\\"==j.style?(j.marked=\\\"property\\\",V(s?Te:Me,Ie)):\\\"[\\\"==e?V(P,re,q(\\\"]\\\"),s?Te:Me,Ie):\\\"*\\\"==t?(j.marked=\\\"keyword\\\",V(Ie)):\\\";\\\"==e?V(Ie):\\\"}\\\"==e?V():\\\"@\\\"==t?V(P,Ie):void 0}function Te(e,t){return\\\"?\\\"==t?V(Te):\\\":\\\"==e?V(ie,ve):\\\"=\\\"==t?V(S):M(Me)}function $e(e,t){return\\\"*\\\"==t?(j.marked=\\\"keyword\\\",V(We,q(\\\";\\\"))):\\\"default\\\"==t?(j.marked=\\\"keyword\\\",V(P,q(\\\";\\\"))):\\\"{\\\"==e?V(_(Ce,\\\"}\\\"),We,q(\\\";\\\")):M(O)}function Ce(e,t){return\\\"as\\\"==t?(j.marked=\\\"keyword\\\",V(q(\\\"variable\\\"))):\\\"variable\\\"==e?M(S,Ce):void 0}function qe(e){return\\\"string\\\"==e?V():\\\"(\\\"==e?M(P):M(Oe,Pe,We)}function Oe(e,t){return\\\"{\\\"==e?ee(Oe,\\\"}\\\"):(\\\"variable\\\"==e&&A(t),\\\"*\\\"==t&&(j.marked=\\\"keyword\\\"),V(Se))}function Pe(e){if(\\\",\\\"==e)return V(Oe,Pe)}function Se(e,t){if(\\\"as\\\"==t)return j.marked=\\\"keyword\\\",V(Oe)}function We(e,t){if(\\\"from\\\"==t)return j.marked=\\\"keyword\\\",V(P)}function Ne(e){return\\\"]\\\"==e?V():M(_(S,\\\"]\\\"))}function Ue(){return M($(\\\"form\\\"),me,q(\\\"{\\\"),$(\\\"}\\\"),_(Be,\\\"}\\\"),C,C)}function Be(){return M(me,ve)}function He(e,t,r){return t.tokenize==k&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\\\[{}\\\\(,;:]|=>)$/.test(t.lastType)||\\\"quasi\\\"==t.lastType&&/\\\\{\\\\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return C.lex=!0,{startState:function(e){var t={tokenize:k,lastType:\\\"sof\\\",cc:[],lexical:new h((e||0)-i,0,\\\"block\\\",!1),localVars:r.localVars,context:r.localVars&&{vars:r.localVars},indented:e||0};return r.globalVars&&\\\"object\\\"==typeof r.globalVars&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty(\\\"align\\\")||(t.lexical.align=!1),t.indented=e.indentation(),w(e,t)),t.tokenize!=v&&e.eatSpace())return null;var r=t.tokenize(e,t);return\\\"comment\\\"==n?r:(t.lastType=\\\"operator\\\"!=n||\\\"++\\\"!=a&&\\\"--\\\"!=a?n:\\\"incdec\\\",function(e,t,r,n,a){var i=e.cc;for(j.state=e,j.stream=a,j.marked=null,j.cc=i,j.style=t,e.lexical.hasOwnProperty(\\\"align\\\")||(e.lexical.align=!0);;)if((i.length?i.pop():u?P:O)(r,n)){for(;i.length&&i[i.length-1].lex;)i.pop()();return j.marked?j.marked:\\\"variable\\\"==r&&g(e,n)?\\\"variable-2\\\":t}}(t,r,n,a,e))},indent:function(t,n){if(t.tokenize==v)return e.Pass;if(t.tokenize!=k)return 0;var a,c=n&&n.charAt(0),u=t.lexical;if(!/^\\\\s*else\\\\b/.test(n))for(var s=t.cc.length-1;s>=0;--s){var f=t.cc[s];if(f==C)u=u.prev;else if(f!=be)break}for(;(\\\"stat\\\"==u.type||\\\"form\\\"==u.type)&&(\\\"}\\\"==c||(a=t.cc[t.cc.length-1])&&(a==B||a==H)&&!/^[,\\\\.=+\\\\-*:?[\\\\(]/.test(n));)u=u.prev;o&&\\\")\\\"==u.type&&\\\"stat\\\"==u.prev.type&&(u=u.prev);var l,p,m=u.type,y=c==m;return\\\"vardef\\\"==m?u.indented+(\\\"operator\\\"==t.lastType||\\\",\\\"==t.lastType?u.info+1:0):\\\"form\\\"==m&&\\\"{\\\"==c?u.indented:\\\"form\\\"==m?u.indented+i:\\\"stat\\\"==m?u.indented+(p=n,\\\"operator\\\"==(l=t).lastType||\\\",\\\"==l.lastType||d.test(p.charAt(0))||/[,.]/.test(p.charAt(0))?o||i:0):\\\"switch\\\"!=u.info||y||0==r.doubleIndentSwitch?u.align?u.column+(y?0:1):u.indented+(y?0:i):u.indented+(/^(?:case|default)\\\\b/.test(n)?i:2*i)},electricInput:/^\\\\s*(?:case .*?:|default:|\\\\{|\\\\})$/,blockCommentStart:u?null:\\\"/*\\\",blockCommentEnd:u?null:\\\"*/\\\",blockCommentContinue:u?null:\\\" * \\\",lineComment:u?null:\\\"//\\\",fold:\\\"brace\\\",closeBrackets:\\\"()[]{}''\\\\\\\"\\\\\\\"``\\\",helperType:u?\\\"json\\\":\\\"javascript\\\",jsonldMode:c,jsonMode:u,expressionAllowed:He,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=P&&t!=S||e.cc.pop()}}}),e.registerHelper(\\\"wordChars\\\",\\\"javascript\\\",/[\\\\w$]/),e.defineMIME(\\\"text/javascript\\\",\\\"javascript\\\"),e.defineMIME(\\\"text/ecmascript\\\",\\\"javascript\\\"),e.defineMIME(\\\"application/javascript\\\",\\\"javascript\\\"),e.defineMIME(\\\"application/x-javascript\\\",\\\"javascript\\\"),e.defineMIME(\\\"application/ecmascript\\\",\\\"javascript\\\"),e.defineMIME(\\\"application/json\\\",{name:\\\"javascript\\\",json:!0}),e.defineMIME(\\\"application/x-json\\\",{name:\\\"javascript\\\",json:!0}),e.defineMIME(\\\"application/ld+json\\\",{name:\\\"javascript\\\",jsonld:!0}),e.defineMIME(\\\"text/typescript\\\",{name:\\\"javascript\\\",typescript:!0}),e.defineMIME(\\\"application/typescript\\\",{name:\\\"javascript\\\",typescript:!0})});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-mode-javascript/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-mode-javascript/readme\",\n \"text\": \"This plugin adds Syntax Highlighting for Javascript tiddlers (application/javascript) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-mode-markdown":{"title":"$:/plugins/tiddlywiki/codemirror-mode-markdown","name":"CodeMirror Mode Markdown","description":"Markdown highlighting mode for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","dependents":"$:/plugins/tiddlywiki/codemirror-mode-xml","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/mode/markdown/markdown.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../../lib/codemirror\\\"),require(\\\"../xml/xml\\\"),require(\\\"../tw-meta\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"../xml/xml\\\",\\\"../meta\\\"],t):t(CodeMirror)}(function(t){\\\"use strict\\\";t.defineMode(\\\"markdown\\\",function(e,i){var n=t.getMode(e,\\\"text/html\\\"),r=\\\"null\\\"==n.name;void 0===i.highlightFormatting&&(i.highlightFormatting=!1),void 0===i.maxBlockquoteDepth&&(i.maxBlockquoteDepth=0),void 0===i.taskLists&&(i.taskLists=!1),void 0===i.strikethrough&&(i.strikethrough=!1),void 0===i.emoji&&(i.emoji=!1),void 0===i.fencedCodeBlockHighlighting&&(i.fencedCodeBlockHighlighting=!0),void 0===i.xml&&(i.xml=!0),void 0===i.tokenTypeOverrides&&(i.tokenTypeOverrides={});var a={header:\\\"header\\\",code:\\\"comment\\\",quote:\\\"quote\\\",list1:\\\"variable-2\\\",list2:\\\"variable-3\\\",list3:\\\"keyword\\\",hr:\\\"hr\\\",image:\\\"image\\\",imageAltText:\\\"image-alt-text\\\",imageMarker:\\\"image-marker\\\",formatting:\\\"formatting\\\",linkInline:\\\"link\\\",linkEmail:\\\"link\\\",linkText:\\\"link\\\",linkHref:\\\"string\\\",em:\\\"em\\\",strong:\\\"strong\\\",strikethrough:\\\"strikethrough\\\",emoji:\\\"builtin\\\"};for(var l in a)a.hasOwnProperty(l)&&i.tokenTypeOverrides[l]&&(a[l]=i.tokenTypeOverrides[l]);var o=/^([*\\\\-_])(?:\\\\s*\\\\1){2,}\\\\s*$/,h=/^(?:[*\\\\-+]|^[0-9]+([.)]))\\\\s+/,g=/^\\\\[(x| )\\\\](?=\\\\s)/i,s=i.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,m=/^ *(?:\\\\={1,}|-{1,})\\\\s*$/,u=/^[^#!\\\\[\\\\]*_\\\\\\\\<>` \\\"'(~:]+/,f=/^(~~~+|```+)[ \\\\t]*([\\\\w+#-]*)[^\\\\n`]*$/,c=/^\\\\s*\\\\[[^\\\\]]+?\\\\]:.*$/,d=/[!\\\\\\\"#$%&\\\\'()*+,\\\\-\\\\.\\\\/:;<=>?@\\\\[\\\\\\\\\\\\]^_`{|}~—]/;function k(t,e,i){return e.f=e.inline=i,i(t,e)}function p(t,e,i){return e.f=e.block=i,i(t,e)}function x(t){return t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==S&&(t.f=M,t.block=v),t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function v(n,r){var l,u=n.column()===r.indentation,d=!(l=r.prevLine.stream)||!/\\\\S/.test(l.string),p=r.indentedCode,x=r.prevLine.hr,v=!1!==r.list,S=(r.listStack[r.listStack.length-1]||0)+3;r.indentedCode=!1;var q=r.indentation;if(null===r.indentationDiff&&(r.indentationDiff=r.indentation,v)){for(r.em=!1,r.strong=!1,r.code=!1,r.strikethrough=!1,r.list=null;q<r.listStack[r.listStack.length-1];)r.listStack.pop(),r.listStack.length?r.indentation=r.listStack[r.listStack.length-1]:r.list=!1;!1!==r.list&&(r.indentationDiff=q-r.listStack[r.listStack.length-1])}var M=!(d||x||r.prevLine.header||v&&p||r.prevLine.fencedCodeEnd),F=(!1===r.list||x||d)&&r.indentation<=S&&n.match(o),b=null;if(r.indentationDiff>=4&&(p||r.prevLine.fencedCodeEnd||r.prevLine.header||d))return n.skipToEnd(),r.indentedCode=!0,a.code;if(n.eatSpace())return null;if(u&&r.indentation<=S&&(b=n.match(s))&&b[1].length<=6)return r.quote=0,r.header=b[1].length,r.thisLine.header=!0,i.highlightFormatting&&(r.formatting=\\\"header\\\"),r.f=r.inline,T(r);if(r.indentation<=S&&n.eat(\\\">\\\"))return r.quote=u?1:r.quote+1,i.highlightFormatting&&(r.formatting=\\\"quote\\\"),n.eatSpace(),T(r);if(!F&&!r.setext&&u&&r.indentation<=S&&(b=n.match(h))){var E=b[1]?\\\"ol\\\":\\\"ul\\\";return r.indentation=q+n.current().length,r.list=!0,r.quote=0,r.listStack.push(r.indentation),i.taskLists&&n.match(g,!1)&&(r.taskList=!0),r.f=r.inline,i.highlightFormatting&&(r.formatting=[\\\"list\\\",\\\"list-\\\"+E]),T(r)}return u&&r.indentation<=S&&(b=n.match(f,!0))?(r.quote=0,r.fencedEndRE=new RegExp(b[1]+\\\"+ *$\\\"),r.localMode=i.fencedCodeBlockHighlighting&&function(i){if(t.findModeByName){var n=t.findModeByName(i);n&&(i=n.mime||n.mimes[0])}var r=t.getMode(e,i);return\\\"null\\\"==r.name?null:r}(b[2]),r.localMode&&(r.localState=t.startState(r.localMode)),r.f=r.block=L,i.highlightFormatting&&(r.formatting=\\\"code-block\\\"),r.code=-1,T(r)):r.setext||!(M&&v||r.quote||!1!==r.list||r.code||F||c.test(n.string))&&(b=n.lookAhead(1))&&(b=b.match(m))?(r.setext?(r.header=r.setext,r.setext=0,n.skipToEnd(),i.highlightFormatting&&(r.formatting=\\\"header\\\")):(r.header=\\\"=\\\"==b[0].charAt(0)?1:2,r.setext=r.header),r.thisLine.header=!0,r.f=r.inline,T(r)):F?(n.skipToEnd(),r.hr=!0,r.thisLine.hr=!0,a.hr):\\\"[\\\"===n.peek()?k(n,r,w):k(n,r,r.inline)}function S(e,i){var a=n.token(e,i.htmlState);if(!r){var l=t.innerMode(n,i.htmlState);(\\\"xml\\\"==l.mode.name&&null===l.state.tagStart&&!l.state.context&&l.state.tokenize.isInText||i.md_inside&&e.current().indexOf(\\\">\\\")>-1)&&(i.f=M,i.block=v,i.htmlState=null)}return a}function L(t,e){var n,r=e.listStack[e.listStack.length-1]||0,l=e.indentation<r,o=r+3;return e.fencedEndRE&&e.indentation<=o&&(l||t.match(e.fencedEndRE))?(i.highlightFormatting&&(e.formatting=\\\"code-block\\\"),l||(n=T(e)),e.localMode=e.localState=null,e.block=v,e.f=M,e.fencedEndRE=null,e.code=0,e.thisLine.fencedCodeEnd=!0,l?p(t,e,e.block):n):e.localMode?e.localMode.token(t,e.localState):(t.skipToEnd(),a.code)}function T(t){var e=[];if(t.formatting){e.push(a.formatting),\\\"string\\\"==typeof t.formatting&&(t.formatting=[t.formatting]);for(var n=0;n<t.formatting.length;n++)e.push(a.formatting+\\\"-\\\"+t.formatting[n]),\\\"header\\\"===t.formatting[n]&&e.push(a.formatting+\\\"-\\\"+t.formatting[n]+\\\"-\\\"+t.header),\\\"quote\\\"===t.formatting[n]&&(!i.maxBlockquoteDepth||i.maxBlockquoteDepth>=t.quote?e.push(a.formatting+\\\"-\\\"+t.formatting[n]+\\\"-\\\"+t.quote):e.push(\\\"error\\\"))}if(t.taskOpen)return e.push(\\\"meta\\\"),e.length?e.join(\\\" \\\"):null;if(t.taskClosed)return e.push(\\\"property\\\"),e.length?e.join(\\\" \\\"):null;if(t.linkHref?e.push(a.linkHref,\\\"url\\\"):(t.strong&&e.push(a.strong),t.em&&e.push(a.em),t.strikethrough&&e.push(a.strikethrough),t.emoji&&e.push(a.emoji),t.linkText&&e.push(a.linkText),t.code&&e.push(a.code),t.image&&e.push(a.image),t.imageAltText&&e.push(a.imageAltText,\\\"link\\\"),t.imageMarker&&e.push(a.imageMarker)),t.header&&e.push(a.header,a.header+\\\"-\\\"+t.header),t.quote&&(e.push(a.quote),!i.maxBlockquoteDepth||i.maxBlockquoteDepth>=t.quote?e.push(a.quote+\\\"-\\\"+t.quote):e.push(a.quote+\\\"-\\\"+i.maxBlockquoteDepth)),!1!==t.list){var r=(t.listStack.length-1)%3;r?1===r?e.push(a.list2):e.push(a.list3):e.push(a.list1)}return t.trailingSpaceNewLine?e.push(\\\"trailing-space-new-line\\\"):t.trailingSpace&&e.push(\\\"trailing-space-\\\"+(t.trailingSpace%2?\\\"a\\\":\\\"b\\\")),e.length?e.join(\\\" \\\"):null}function q(t,e){if(t.match(u,!0))return T(e)}function M(e,r){var l=r.text(e,r);if(void 0!==l)return l;if(r.list)return r.list=null,T(r);if(r.taskList)return\\\" \\\"===e.match(g,!0)[1]?r.taskOpen=!0:r.taskClosed=!0,i.highlightFormatting&&(r.formatting=\\\"task\\\"),r.taskList=!1,T(r);if(r.taskOpen=!1,r.taskClosed=!1,r.header&&e.match(/^#+$/,!0))return i.highlightFormatting&&(r.formatting=\\\"header\\\"),T(r);var o=e.next();if(r.linkTitle){r.linkTitle=!1;var h=o;\\\"(\\\"===o&&(h=\\\")\\\");var s=\\\"^\\\\\\\\s*(?:[^\\\"+(h=(h+\\\"\\\").replace(/([.?*+^\\\\[\\\\]\\\\\\\\(){}|-])/g,\\\"\\\\\\\\$1\\\"))+\\\"\\\\\\\\\\\\\\\\]+|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|\\\\\\\\\\\\\\\\.)\\\"+h;if(e.match(new RegExp(s),!0))return a.linkHref}if(\\\"`\\\"===o){var m=r.formatting;i.highlightFormatting&&(r.formatting=\\\"code\\\"),e.eatWhile(\\\"`\\\");var u=e.current().length;if(0!=r.code||r.quote&&1!=u){if(u==r.code){var f=T(r);return r.code=0,f}return r.formatting=m,T(r)}return r.code=u,T(r)}if(r.code)return T(r);if(\\\"\\\\\\\\\\\"===o&&(e.next(),i.highlightFormatting)){var c=T(r),k=a.formatting+\\\"-escape\\\";return c?c+\\\" \\\"+k:k}if(\\\"!\\\"===o&&e.match(/\\\\[[^\\\\]]*\\\\] ?(?:\\\\(|\\\\[)/,!1))return r.imageMarker=!0,r.image=!0,i.highlightFormatting&&(r.formatting=\\\"image\\\"),T(r);if(\\\"[\\\"===o&&r.imageMarker&&e.match(/[^\\\\]]*\\\\](\\\\(.*?\\\\)| ?\\\\[.*?\\\\])/,!1))return r.imageMarker=!1,r.imageAltText=!0,i.highlightFormatting&&(r.formatting=\\\"image\\\"),T(r);if(\\\"]\\\"===o&&r.imageAltText){i.highlightFormatting&&(r.formatting=\\\"image\\\");var c=T(r);return r.imageAltText=!1,r.image=!1,r.inline=r.f=b,c}if(\\\"[\\\"===o&&!r.image)return r.linkText=!0,i.highlightFormatting&&(r.formatting=\\\"link\\\"),T(r);if(\\\"]\\\"===o&&r.linkText){i.highlightFormatting&&(r.formatting=\\\"link\\\");var c=T(r);return r.linkText=!1,r.inline=r.f=e.match(/\\\\(.*?\\\\)| ?\\\\[.*?\\\\]/,!1)?b:M,c}if(\\\"<\\\"===o&&e.match(/^(https?|ftps?):\\\\/\\\\/(?:[^\\\\\\\\>]|\\\\\\\\.)+>/,!1))return r.f=r.inline=F,i.highlightFormatting&&(r.formatting=\\\"link\\\"),(c=T(r))?c+=\\\" \\\":c=\\\"\\\",c+a.linkInline;if(\\\"<\\\"===o&&e.match(/^[^> \\\\\\\\]+@(?:[^\\\\\\\\>]|\\\\\\\\.)+>/,!1))return r.f=r.inline=F,i.highlightFormatting&&(r.formatting=\\\"link\\\"),(c=T(r))?c+=\\\" \\\":c=\\\"\\\",c+a.linkEmail;if(i.xml&&\\\"<\\\"===o&&e.match(/^(!--|[a-z][a-z0-9-]*(?:\\\\s+[a-z_:.\\\\-]+(?:\\\\s*=\\\\s*[^>]+)?)*\\\\s*>)/i,!1)){var x=e.string.indexOf(\\\">\\\",e.pos);if(-1!=x){var v=e.string.substring(e.start,x);/markdown\\\\s*=\\\\s*('|\\\"){0,1}1('|\\\"){0,1}/.test(v)&&(r.md_inside=!0)}return e.backUp(1),r.htmlState=t.startState(n),p(e,r,S)}if(i.xml&&\\\"<\\\"===o&&e.match(/^\\\\/\\\\w*?>/))return r.md_inside=!1,\\\"tag\\\";if(\\\"*\\\"===o||\\\"_\\\"===o){for(var L=1,q=1==e.pos?\\\" \\\":e.string.charAt(e.pos-2);L<3&&e.eat(o);)L++;var E=e.peek()||\\\" \\\",w=!/\\\\s/.test(E)&&(!d.test(E)||/\\\\s/.test(q)||d.test(q)),j=!/\\\\s/.test(q)&&(!d.test(q)||/\\\\s/.test(E)||d.test(E)),y=null,C=null;if(L%2&&(r.em||!w||\\\"*\\\"!==o&&j&&!d.test(q)?r.em!=o||!j||\\\"*\\\"!==o&&w&&!d.test(E)||(y=!1):y=!0),L>1&&(r.strong||!w||\\\"*\\\"!==o&&j&&!d.test(q)?r.strong!=o||!j||\\\"*\\\"!==o&&w&&!d.test(E)||(C=!1):C=!0),null!=C||null!=y){i.highlightFormatting&&(r.formatting=null==y?\\\"strong\\\":null==C?\\\"em\\\":\\\"strong em\\\"),!0===y&&(r.em=o),!0===C&&(r.strong=o);f=T(r);return!1===y&&(r.em=!1),!1===C&&(r.strong=!1),f}}else if(\\\" \\\"===o&&(e.eat(\\\"*\\\")||e.eat(\\\"_\\\"))){if(\\\" \\\"===e.peek())return T(r);e.backUp(1)}if(i.strikethrough)if(\\\"~\\\"===o&&e.eatWhile(o)){if(r.strikethrough){i.highlightFormatting&&(r.formatting=\\\"strikethrough\\\");f=T(r);return r.strikethrough=!1,f}if(e.match(/^[^\\\\s]/,!1))return r.strikethrough=!0,i.highlightFormatting&&(r.formatting=\\\"strikethrough\\\"),T(r)}else if(\\\" \\\"===o&&e.match(/^~~/,!0)){if(\\\" \\\"===e.peek())return T(r);e.backUp(2)}if(i.emoji&&\\\":\\\"===o&&e.match(/^[a-z_\\\\d+-]+:/)){r.emoji=!0,i.highlightFormatting&&(r.formatting=\\\"emoji\\\");var H=T(r);return r.emoji=!1,H}return\\\" \\\"===o&&(e.match(/ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),T(r)}function F(t,e){if(\\\">\\\"===t.next()){e.f=e.inline=M,i.highlightFormatting&&(e.formatting=\\\"link\\\");var n=T(e);return n?n+=\\\" \\\":n=\\\"\\\",n+a.linkInline}return t.match(/^[^>]+/,!0),a.linkInline}function b(t,e){if(t.eatSpace())return null;var n,r=t.next();return\\\"(\\\"===r||\\\"[\\\"===r?(e.f=e.inline=(n=\\\"(\\\"===r?\\\")\\\":\\\"]\\\",function(t,e){var r=t.next();if(r===n){e.f=e.inline=M,i.highlightFormatting&&(e.formatting=\\\"link-string\\\");var a=T(e);return e.linkHref=!1,a}return t.match(E[n]),e.linkHref=!0,T(e)}),i.highlightFormatting&&(e.formatting=\\\"link-string\\\"),e.linkHref=!0,T(e)):\\\"error\\\"}var E={\\\")\\\":/^(?:[^\\\\\\\\\\\\(\\\\)]|\\\\\\\\.|\\\\((?:[^\\\\\\\\\\\\(\\\\)]|\\\\\\\\.)*\\\\))*?(?=\\\\))/,\\\"]\\\":/^(?:[^\\\\\\\\\\\\[\\\\]]|\\\\\\\\.|\\\\[(?:[^\\\\\\\\\\\\[\\\\]]|\\\\\\\\.)*\\\\])*?(?=\\\\])/};function w(t,e){return t.match(/^([^\\\\]\\\\\\\\]|\\\\\\\\.)*\\\\]:/,!1)?(e.f=j,t.next(),i.highlightFormatting&&(e.formatting=\\\"link\\\"),e.linkText=!0,T(e)):k(t,e,M)}function j(t,e){if(t.match(/^\\\\]:/,!0)){e.f=e.inline=y,i.highlightFormatting&&(e.formatting=\\\"link\\\");var n=T(e);return e.linkText=!1,n}return t.match(/^([^\\\\]\\\\\\\\]|\\\\\\\\.)+/,!0),a.linkText}function y(t,e){return t.eatSpace()?null:(t.match(/^[^\\\\s]+/,!0),void 0===t.peek()?e.linkTitle=!0:t.match(/^(?:\\\\s+(?:\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\\\\\\\\\|\\\\\\\\.)+\\\"|'(?:[^'\\\\\\\\]|\\\\\\\\\\\\\\\\|\\\\\\\\.)+'|\\\\((?:[^)\\\\\\\\]|\\\\\\\\\\\\\\\\|\\\\\\\\.)+\\\\)))?/,!0),e.f=e.inline=M,a.linkHref+\\\" url\\\")}var C={startState:function(){return{f:v,prevLine:{stream:null},thisLine:{stream:null},block:v,htmlState:null,indentation:0,inline:M,text:q,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(e){return{f:e.f,prevLine:e.prevLine,thisLine:e.thisLine,block:e.block,htmlState:e.htmlState&&t.copyState(n,e.htmlState),indentation:e.indentation,localMode:e.localMode,localState:e.localMode?t.copyState(e.localMode,e.localState):null,inline:e.inline,text:e.text,formatting:!1,linkText:e.linkText,linkTitle:e.linkTitle,linkHref:e.linkHref,code:e.code,em:e.em,strong:e.strong,strikethrough:e.strikethrough,emoji:e.emoji,header:e.header,setext:e.setext,hr:e.hr,taskList:e.taskList,list:e.list,listStack:e.listStack.slice(0),quote:e.quote,indentedCode:e.indentedCode,trailingSpace:e.trailingSpace,trailingSpaceNewLine:e.trailingSpaceNewLine,md_inside:e.md_inside,fencedEndRE:e.fencedEndRE}},token:function(t,e){if(e.formatting=!1,t!=e.thisLine.stream){if(e.header=0,e.hr=!1,t.match(/^\\\\s*$/,!0))return x(e),null;if(e.prevLine=e.thisLine,e.thisLine={stream:t},e.taskList=!1,e.trailingSpace=0,e.trailingSpaceNewLine=!1,!e.localState&&(e.f=e.block,e.f!=S)){var i=t.match(/^\\\\s*/,!0)[0].replace(/\\\\t/g,\\\" \\\").length;if(e.indentation=i,e.indentationDiff=null,i>0)return null}}return e.f(t,e)},innerMode:function(t){return t.block==S?{state:t.htmlState,mode:n}:t.localState?{state:t.localState,mode:t.localMode}:{state:t,mode:C}},indent:function(e,i,r){return e.block==S&&n.indent?n.indent(e.htmlState,i,r):e.localState&&e.localMode.indent?e.localMode.indent(e.localState,i,r):t.Pass},blankLine:x,getType:T,closeBrackets:\\\"()[]{}''\\\\\\\"\\\\\\\"``\\\",fold:\\\"markdown\\\"};return C},\\\"xml\\\"),t.defineMIME(\\\"text/markdown\\\",\\\"markdown\\\"),t.defineMIME(\\\"text/x-markdown\\\",\\\"markdown\\\")});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/markdown/markdown.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-mode-markdown/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-mode-markdown/readme\",\n \"text\": \"This plugin adds Syntax Highlighting for Markdown tiddlers (text/x-markdown) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-mode-x-tiddlywiki":{"title":"$:/plugins/tiddlywiki/codemirror-mode-x-tiddlywiki","name":"CodeMirror Mode TiddlyWiki Classic","description":"Tiddlywiki Classic highlighting mode for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/mode/tiddlywiki/tiddlywiki.css\": {\n \"text\": \"span.cm-underlined {\\n text-decoration: underline;\\n}\\nspan.cm-strikethrough {\\n text-decoration: line-through;\\n}\\nspan.cm-brace {\\n color: #170;\\n font-weight: bold;\\n}\\nspan.cm-table {\\n color: blue;\\n font-weight: bold;\\n}\\n\",\n \"type\": \"text/css\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/tiddlywiki/tiddlywiki.css\",\n \"tags\": \"[[$:/tags/Stylesheet]]\"\n },\n \"$:/plugins/tiddlywiki/codemirror/mode/tiddlywiki/tiddlywiki.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";e.defineMode(\\\"tiddlywiki\\\",function(){var e={},t={allTags:!0,closeAll:!0,list:!0,newJournal:!0,newTiddler:!0,permaview:!0,saveChanges:!0,search:!0,slider:!0,tabs:!0,tag:!0,tagging:!0,tags:!0,tiddler:!0,timeline:!0,today:!0,version:!0,option:!0,with:!0,filter:!0},r=/[\\\\w_\\\\-]/i,n=/^\\\\-\\\\-\\\\-\\\\-+$/,i=/^\\\\/\\\\*\\\\*\\\\*$/,o=/^\\\\*\\\\*\\\\*\\\\/$/,u=/^<<<$/,a=/^\\\\/\\\\/\\\\{\\\\{\\\\{$/,f=/^\\\\/\\\\/\\\\}\\\\}\\\\}$/,c=/^<!--\\\\{\\\\{\\\\{-->$/,m=/^<!--\\\\}\\\\}\\\\}-->$/,l=/^\\\\{\\\\{\\\\{$/,k=/^\\\\}\\\\}\\\\}$/,d=/.*?\\\\}\\\\}\\\\}/;function h(e,t,r){return t.tokenize=r,r(e,t)}function s(t,k){var d=t.sol(),s=t.peek();if(k.block=!1,d&&/[<\\\\/\\\\*{}\\\\-]/.test(s)){if(t.match(l))return k.block=!0,h(t,k,$);if(t.match(u))return\\\"quote\\\";if(t.match(i)||t.match(o))return\\\"comment\\\";if(t.match(a)||t.match(f)||t.match(c)||t.match(m))return\\\"comment\\\";if(t.match(n))return\\\"hr\\\"}if(t.next(),d&&/[\\\\/\\\\*!#;:>|]/.test(s)){if(\\\"!\\\"==s)return t.skipToEnd(),\\\"header\\\";if(\\\"*\\\"==s)return t.eatWhile(\\\"*\\\"),\\\"comment\\\";if(\\\"#\\\"==s)return t.eatWhile(\\\"#\\\"),\\\"comment\\\";if(\\\";\\\"==s)return t.eatWhile(\\\";\\\"),\\\"comment\\\";if(\\\":\\\"==s)return t.eatWhile(\\\":\\\"),\\\"comment\\\";if(\\\">\\\"==s)return t.eatWhile(\\\">\\\"),\\\"quote\\\";if(\\\"|\\\"==s)return\\\"header\\\"}if(\\\"{\\\"==s&&t.match(/\\\\{\\\\{/))return h(t,k,$);if(/[hf]/i.test(s)&&/[ti]/i.test(t.peek())&&t.match(/\\\\b(ttps?|tp|ile):\\\\/\\\\/[\\\\-A-Z0-9+&@#\\\\/%?=~_|$!:,.;]*[A-Z0-9+&@#\\\\/%=~_|$]/i))return\\\"link\\\";if('\\\"'==s)return\\\"string\\\";if(\\\"~\\\"==s)return\\\"brace\\\";if(/[\\\\[\\\\]]/.test(s)&&t.match(s))return\\\"brace\\\";if(\\\"@\\\"==s)return t.eatWhile(r),\\\"link\\\";if(/\\\\d/.test(s))return t.eatWhile(/\\\\d/),\\\"number\\\";if(\\\"/\\\"==s){if(t.eat(\\\"%\\\"))return h(t,k,b);if(t.eat(\\\"/\\\"))return h(t,k,v)}if(\\\"_\\\"==s&&t.eat(\\\"_\\\"))return h(t,k,w);if(\\\"-\\\"==s&&t.eat(\\\"-\\\")){if(\\\" \\\"!=t.peek())return h(t,k,x);if(\\\" \\\"==t.peek())return\\\"brace\\\"}return\\\"'\\\"==s&&t.eat(\\\"'\\\")?h(t,k,p):\\\"<\\\"==s&&t.eat(\\\"<\\\")?h(t,k,z):(t.eatWhile(/[\\\\w\\\\$_]/),e.propertyIsEnumerable(t.current())?\\\"keyword\\\":null)}function b(e,t){for(var r,n=!1;r=e.next();){if(\\\"/\\\"==r&&n){t.tokenize=s;break}n=\\\"%\\\"==r}return\\\"comment\\\"}function p(e,t){for(var r,n=!1;r=e.next();){if(\\\"'\\\"==r&&n){t.tokenize=s;break}n=\\\"'\\\"==r}return\\\"strong\\\"}function $(e,t){var r=t.block;return r&&e.current()?\\\"comment\\\":!r&&e.match(d)?(t.tokenize=s,\\\"comment\\\"):r&&e.sol()&&e.match(k)?(t.tokenize=s,\\\"comment\\\"):(e.next(),\\\"comment\\\")}function v(e,t){for(var r,n=!1;r=e.next();){if(\\\"/\\\"==r&&n){t.tokenize=s;break}n=\\\"/\\\"==r}return\\\"em\\\"}function w(e,t){for(var r,n=!1;r=e.next();){if(\\\"_\\\"==r&&n){t.tokenize=s;break}n=\\\"_\\\"==r}return\\\"underlined\\\"}function x(e,t){for(var r,n=!1;r=e.next();){if(\\\"-\\\"==r&&n){t.tokenize=s;break}n=\\\"-\\\"==r}return\\\"strikethrough\\\"}function z(e,r){if(\\\"<<\\\"==e.current())return\\\"macro\\\";var n=e.next();return n?\\\">\\\"==n&&\\\">\\\"==e.peek()?(e.next(),r.tokenize=s,\\\"macro\\\"):(e.eatWhile(/[\\\\w\\\\$_]/),t.propertyIsEnumerable(e.current())?\\\"keyword\\\":null):(r.tokenize=s,null)}return{startState:function(){return{tokenize:s}},token:function(e,t){return e.eatSpace()?null:t.tokenize(e,t)}}}),e.defineMIME(\\\"text/x-tiddlywiki\\\",\\\"tiddlywiki\\\")});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/tiddlywiki/tiddlywiki.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-mode-x-tiddlywiki/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-mode-x-tiddlywiki/readme\",\n \"text\": \"This plugin adds Syntax Highlighting for ~TiddlyWiki Classic tiddlers (text/x-tiddlywiki) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-mode-xml":{"title":"$:/plugins/tiddlywiki/codemirror-mode-xml","name":"CodeMirror Mode XML","description":"XML highlighting mode for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],t):t(CodeMirror)}(function(t){\\\"use strict\\\";var e={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};t.defineMode(\\\"xml\\\",function(r,o){var a,i,l=r.indentUnit,u={},d=o.htmlMode?e:n;for(var c in d)u[c]=d[c];for(var c in o)u[c]=o[c];function s(t,e){function n(n){return e.tokenize=n,n(t,e)}var r=t.next();return\\\"<\\\"==r?t.eat(\\\"!\\\")?t.eat(\\\"[\\\")?t.match(\\\"CDATA[\\\")?n(m(\\\"atom\\\",\\\"]]>\\\")):null:t.match(\\\"--\\\")?n(m(\\\"comment\\\",\\\"--\\\\x3e\\\")):t.match(\\\"DOCTYPE\\\",!0,!0)?(t.eatWhile(/[\\\\w\\\\._\\\\-]/),n(function t(e){return function(n,r){for(var o;null!=(o=n.next());){if(\\\"<\\\"==o)return r.tokenize=t(e+1),r.tokenize(n,r);if(\\\">\\\"==o){if(1==e){r.tokenize=s;break}return r.tokenize=t(e-1),r.tokenize(n,r)}}return\\\"meta\\\"}}(1))):null:t.eat(\\\"?\\\")?(t.eatWhile(/[\\\\w\\\\._\\\\-]/),e.tokenize=m(\\\"meta\\\",\\\"?>\\\"),\\\"meta\\\"):(a=t.eat(\\\"/\\\")?\\\"closeTag\\\":\\\"openTag\\\",e.tokenize=f,\\\"tag bracket\\\"):\\\"&\\\"==r?(t.eat(\\\"#\\\")?t.eat(\\\"x\\\")?t.eatWhile(/[a-fA-F\\\\d]/)&&t.eat(\\\";\\\"):t.eatWhile(/[\\\\d]/)&&t.eat(\\\";\\\"):t.eatWhile(/[\\\\w\\\\.\\\\-:]/)&&t.eat(\\\";\\\"))?\\\"atom\\\":\\\"error\\\":(t.eatWhile(/[^&<]/),null)}function f(t,e){var n,r,o=t.next();if(\\\">\\\"==o||\\\"/\\\"==o&&t.eat(\\\">\\\"))return e.tokenize=s,a=\\\">\\\"==o?\\\"endTag\\\":\\\"selfcloseTag\\\",\\\"tag bracket\\\";if(\\\"=\\\"==o)return a=\\\"equals\\\",null;if(\\\"<\\\"==o){e.tokenize=s,e.state=h,e.tagName=e.tagStart=null;var i=e.tokenize(t,e);return i?i+\\\" tag error\\\":\\\"tag error\\\"}return/[\\\\'\\\\\\\"]/.test(o)?(e.tokenize=(n=o,(r=function(t,e){for(;!t.eol();)if(t.next()==n){e.tokenize=f;break}return\\\"string\\\"}).isInAttribute=!0,r),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\\\\s\\\\u00a0=<>\\\\\\\"\\\\']*[^\\\\s\\\\u00a0=<>\\\\\\\"\\\\'\\\\/]/),\\\"word\\\")}function m(t,e){return function(n,r){for(;!n.eol();){if(n.match(e)){r.tokenize=s;break}n.next()}return t}}function g(t){t.context&&(t.context=t.context.prev)}function p(t,e){for(var n;;){if(!t.context)return;if(n=t.context.tagName,!u.contextGrabbers.hasOwnProperty(n)||!u.contextGrabbers[n].hasOwnProperty(e))return;g(t)}}function h(t,e,n){return\\\"openTag\\\"==t?(n.tagStart=e.column(),x):\\\"closeTag\\\"==t?b:h}function x(t,e,n){return\\\"word\\\"==t?(n.tagName=e.current(),i=\\\"tag\\\",v):u.allowMissingTagName&&\\\"endTag\\\"==t?(i=\\\"tag bracket\\\",v(t,e,n)):(i=\\\"error\\\",x)}function b(t,e,n){if(\\\"word\\\"==t){var r=e.current();return n.context&&n.context.tagName!=r&&u.implicitlyClosed.hasOwnProperty(n.context.tagName)&&g(n),n.context&&n.context.tagName==r||!1===u.matchClosing?(i=\\\"tag\\\",k):(i=\\\"tag error\\\",w)}return u.allowMissingTagName&&\\\"endTag\\\"==t?(i=\\\"tag bracket\\\",k(t,e,n)):(i=\\\"error\\\",w)}function k(t,e,n){return\\\"endTag\\\"!=t?(i=\\\"error\\\",k):(g(n),h)}function w(t,e,n){return i=\\\"error\\\",k(t,0,n)}function v(t,e,n){if(\\\"word\\\"==t)return i=\\\"attribute\\\",T;if(\\\"endTag\\\"==t||\\\"selfcloseTag\\\"==t){var r=n.tagName,o=n.tagStart;return n.tagName=n.tagStart=null,\\\"selfcloseTag\\\"==t||u.autoSelfClosers.hasOwnProperty(r)?p(n,r):(p(n,r),n.context=new function(t,e,n){this.prev=t.context,this.tagName=e,this.indent=t.indented,this.startOfLine=n,(u.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}(n,r,o==n.indented)),h}return i=\\\"error\\\",v}function T(t,e,n){return\\\"equals\\\"==t?y:(u.allowMissing||(i=\\\"error\\\"),v(t,0,n))}function y(t,e,n){return\\\"string\\\"==t?N:\\\"word\\\"==t&&u.allowUnquoted?(i=\\\"string\\\",v):(i=\\\"error\\\",v(t,0,n))}function N(t,e,n){return\\\"string\\\"==t?N:v(t,0,n)}return s.isInText=!0,{startState:function(t){var e={tokenize:s,state:h,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;a=null;var n=e.tokenize(t,e);return(n||a)&&\\\"comment\\\"!=n&&(i=null,e.state=e.state(a||n,t,e),i&&(n=\\\"error\\\"==i?n+\\\" error\\\":i)),n},indent:function(e,n,r){var o=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+l;if(o&&o.noIndent)return t.Pass;if(e.tokenize!=f&&e.tokenize!=s)return r?r.match(/^(\\\\s*)/)[0].length:0;if(e.tagName)return!1!==u.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+l*(u.multilineTagIndentFactor||1);if(u.alignCDATA&&/<!\\\\[CDATA\\\\[/.test(n))return 0;var a=n&&/^<(\\\\/)?([\\\\w_:\\\\.-]*)/.exec(n);if(a&&a[1])for(;o;){if(o.tagName==a[2]){o=o.prev;break}if(!u.implicitlyClosed.hasOwnProperty(o.tagName))break;o=o.prev}else if(a)for(;o;){var i=u.contextGrabbers[o.tagName];if(!i||!i.hasOwnProperty(a[2]))break;o=o.prev}for(;o&&o.prev&&!o.startOfLine;)o=o.prev;return o?o.indent+l:e.baseIndent||0},electricInput:/<\\\\/[\\\\s\\\\w:]+>$/,blockCommentStart:\\\"\\\\x3c!--\\\",blockCommentEnd:\\\"--\\\\x3e\\\",configuration:u.htmlMode?\\\"html\\\":\\\"xml\\\",helperType:u.htmlMode?\\\"html\\\":\\\"xml\\\",skipAttribute:function(t){t.state==y&&(t.state=v)}}}),t.defineMIME(\\\"text/xml\\\",\\\"xml\\\"),t.defineMIME(\\\"application/xml\\\",\\\"xml\\\"),t.mimeModes.hasOwnProperty(\\\"text/html\\\")||t.defineMIME(\\\"text/html\\\",{name:\\\"xml\\\",htmlMode:!0})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-mode-xml/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-mode-xml/readme\",\n \"text\": \"This plugin is a requirement for other Syntax-highlighting plugins and adds Highlighting for XML tiddlers (application/xml) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/codemirror-search-replace":{"title":"$:/plugins/tiddlywiki/codemirror-search-replace","name":"CodeMirror Search and Replace","description":"Search and replace for CodeMirror","parent-plugin":"$:/plugins/tiddlywiki/codemirror","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/codemirror/addon/search/search.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\"),require(\\\"./searchcursor\\\"),require(\\\"../dialog/dialog\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"./searchcursor\\\",\\\"../dialog/dialog\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";function o(e){return e.state.search||(e.state.search=new function(){this.posFrom=this.posTo=this.lastQuery=this.query=null,this.overlay=null})}function n(e){return\\\"string\\\"==typeof e&&e==e.toLowerCase()}function r(e,o,r){return e.getSearchCursor(o,r,{caseFold:n(o),multiline:!0})}function t(e,o,n,r,t){e.openDialog?e.openDialog(o,t,{value:r,selectValueOnOpen:!0}):t(prompt(n,r))}function i(e){return e.replace(/\\\\\\\\(.)/g,function(e,o){return\\\"n\\\"==o?\\\"\\\\n\\\":\\\"r\\\"==o?\\\"\\\\r\\\":o})}function a(e){var o=e.match(/^\\\\/(.*)\\\\/([a-z]*)$/);if(o)try{e=new RegExp(o[1],-1==o[2].indexOf(\\\"i\\\")?\\\"\\\":\\\"i\\\")}catch(e){}else e=i(e);return(\\\"string\\\"==typeof e?\\\"\\\"==e:e.test(\\\"\\\"))&&(e=/x^/),e}var s='<span class=\\\"CodeMirror-search-label\\\">Search:</span> <input type=\\\"text\\\" style=\\\"width: 10em\\\" class=\\\"CodeMirror-search-field\\\"/> <span style=\\\"color: #888\\\" class=\\\"CodeMirror-search-hint\\\">(Use /re/ syntax for regexp search)</span>';function c(e,o,r){var t,i;o.queryText=r,o.query=a(r),e.removeOverlay(o.overlay,n(o.query)),o.overlay=(t=o.query,i=n(o.query),\\\"string\\\"==typeof t?t=new RegExp(t.replace(/[\\\\-\\\\[\\\\]\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\\\^\\\\$\\\\|]/g,\\\"\\\\\\\\$&\\\"),i?\\\"gi\\\":\\\"g\\\"):t.global||(t=new RegExp(t.source,t.ignoreCase?\\\"gi\\\":\\\"g\\\")),{token:function(e){t.lastIndex=e.pos;var o=t.exec(e.string);if(o&&o.index==e.pos)return e.pos+=o[0].length||1,\\\"searching\\\";o?e.pos=o.index:e.skipToEnd()}}),e.addOverlay(o.overlay),e.showMatchesOnScrollbar&&(o.annotate&&(o.annotate.clear(),o.annotate=null),o.annotate=e.showMatchesOnScrollbar(o.query,n(o.query)))}function l(n,r,i,a){var l=o(n);if(l.query)return u(n,r);var p,d,y,m,g,h=n.getSelection()||l.lastQuery;if(h instanceof RegExp&&\\\"x^\\\"==h.source&&(h=null),i&&n.openDialog){var v=null,x=function(o,r){e.e_stop(r),o&&(o!=l.queryText&&(c(n,l,o),l.posFrom=l.posTo=n.getCursor()),v&&(v.style.opacity=1),u(n,r.shiftKey,function(e,o){var r;o.line<3&&document.querySelector&&(r=n.display.wrapper.querySelector(\\\".CodeMirror-dialog\\\"))&&r.getBoundingClientRect().bottom-4>n.cursorCoords(o,\\\"window\\\").top&&((v=r).style.opacity=.4)}))};d=s,y=h,m=x,g=function(r,t){var i=e.keyName(r),a=n.getOption(\\\"extraKeys\\\"),s=a&&a[i]||e.keyMap[n.getOption(\\\"keyMap\\\")][i];\\\"findNext\\\"==s||\\\"findPrev\\\"==s||\\\"findPersistentNext\\\"==s||\\\"findPersistentPrev\\\"==s?(e.e_stop(r),c(n,o(n),t),n.execCommand(s)):\\\"find\\\"!=s&&\\\"findPersistent\\\"!=s||(e.e_stop(r),x(t,r))},(p=n).openDialog(d,m,{value:y,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){f(p)},onKeyDown:g}),a&&h&&(c(n,l,h),u(n,r))}else t(n,s,\\\"Search for:\\\",h,function(e){e&&!l.query&&n.operation(function(){c(n,l,e),l.posFrom=l.posTo=n.getCursor(),u(n,r)})})}function u(n,t,i){n.operation(function(){var a=o(n),s=r(n,a.query,t?a.posFrom:a.posTo);(s.find(t)||(s=r(n,a.query,t?e.Pos(n.lastLine()):e.Pos(n.firstLine(),0))).find(t))&&(n.setSelection(s.from(),s.to()),n.scrollIntoView({from:s.from(),to:s.to()},20),a.posFrom=s.from(),a.posTo=s.to(),i&&i(s.from(),s.to()))})}function f(e){e.operation(function(){var n=o(e);n.lastQuery=n.query,n.query&&(n.query=n.queryText=null,e.removeOverlay(n.overlay),n.annotate&&(n.annotate.clear(),n.annotate=null))})}var p=' <input type=\\\"text\\\" style=\\\"width: 10em\\\" class=\\\"CodeMirror-search-field\\\"/> <span style=\\\"color: #888\\\" class=\\\"CodeMirror-search-hint\\\">(Use /re/ syntax for regexp search)</span>',d='<span class=\\\"CodeMirror-search-label\\\">With:</span> <input type=\\\"text\\\" style=\\\"width: 10em\\\" class=\\\"CodeMirror-search-field\\\"/>',y='<span class=\\\"CodeMirror-search-label\\\">Replace?</span> <button>Yes</button> <button>No</button> <button>All</button> <button>Stop</button>';function m(e,o,n){e.operation(function(){for(var t=r(e,o);t.findNext();)if(\\\"string\\\"!=typeof o){var i=e.getRange(t.from(),t.to()).match(o);t.replace(n.replace(/\\\\$(\\\\d)/g,function(e,o){return i[o]}))}else t.replace(n)})}function g(e,n){if(!e.getOption(\\\"readOnly\\\")){var s=e.getSelection()||o(e).lastQuery,c='<span class=\\\"CodeMirror-search-label\\\">'+(n?\\\"Replace all:\\\":\\\"Replace:\\\")+\\\"</span>\\\";t(e,c+p,c,s,function(o){o&&(o=a(o),t(e,d,\\\"Replace with:\\\",\\\"\\\",function(t){if(t=i(t),n)m(e,o,t);else{f(e);var a=r(e,o,e.getCursor(\\\"from\\\")),s=function(){var n,i,l,u,f,p=a.from();!(n=a.findNext())&&(a=r(e,o),!(n=a.findNext())||p&&a.from().line==p.line&&a.from().ch==p.ch)||(e.setSelection(a.from(),a.to()),e.scrollIntoView({from:a.from(),to:a.to()}),l=y,u=\\\"Replace?\\\",f=[function(){c(n)},s,function(){m(e,o,t)}],(i=e).openConfirm?i.openConfirm(l,f):confirm(u)&&f[0]())},c=function(e){a.replace(\\\"string\\\"==typeof o?t:t.replace(/\\\\$(\\\\d)/g,function(o,n){return e[n]})),s()};s()}}))})}}e.commands.find=function(e){f(e),l(e)},e.commands.findPersistent=function(e){f(e),l(e,!1,!0)},e.commands.findPersistentNext=function(e){l(e,!1,!0,!0)},e.commands.findPersistentPrev=function(e){l(e,!0,!0,!0)},e.commands.findNext=l,e.commands.findPrev=function(e){l(e,!0)},e.commands.clearSearch=f,e.commands.replace=g,e.commands.replaceAll=function(e){g(e,!0)}});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/search/search.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/search/jump-to-line.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?e(require(\\\"../../lib/codemirror\\\"),require(\\\"../dialog/dialog\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\",\\\"../dialog/dialog\\\"],e):e(CodeMirror)}(function(e){\\\"use strict\\\";function o(e,o){var r=Number(o);return/^[-+]/.test(o)?e.getCursor().line+r:r-1}e.commands.jumpToLine=function(e){var r,i,t,s,n,l=e.getCursor();r=e,i='Jump to line: <input type=\\\"text\\\" style=\\\"width: 10em\\\" class=\\\"CodeMirror-search-field\\\"/> <span style=\\\"color: #888\\\" class=\\\"CodeMirror-search-hint\\\">(Use line:column or scroll% syntax)</span>',t=\\\"Jump to line:\\\",s=l.line+1+\\\":\\\"+l.ch,n=function(r){var i;if(r)if(i=/^\\\\s*([\\\\+\\\\-]?\\\\d+)\\\\s*\\\\:\\\\s*(\\\\d+)\\\\s*$/.exec(r))e.setCursor(o(e,i[1]),Number(i[2]));else if(i=/^\\\\s*([\\\\+\\\\-]?\\\\d+(\\\\.\\\\d+)?)\\\\%\\\\s*/.exec(r)){var t=Math.round(e.lineCount()*Number(i[1])/100);/^[-+]/.test(i[1])&&(t=l.line+t+1),e.setCursor(t-1,l.ch)}else(i=/^\\\\s*\\\\:?\\\\s*([\\\\+\\\\-]?\\\\d+)\\\\s*/.exec(r))&&e.setCursor(o(e,i[1]),l.ch)},r.openDialog?r.openDialog(i,n,{value:s,selectValueOnOpen:!0}):n(prompt(t,s))},e.keyMap.default[\\\"Alt-G\\\"]=\\\"jumpToLine\\\"});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/search/jump-to-line.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js\": {\n \"text\": \"// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: http://codemirror.net/LICENSE\\n!function(t){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?t(require(\\\"../../lib/codemirror\\\")):\\\"function\\\"==typeof define&&define.amd?define([\\\"../../lib/codemirror\\\"],t):t(CodeMirror)}(function(t){\\\"use strict\\\";var e,n,r=t.Pos;function i(t,e){for(var n,r,i=null!=(r=(n=t).flags)?r:(n.ignoreCase?\\\"i\\\":\\\"\\\")+(n.global?\\\"g\\\":\\\"\\\")+(n.multiline?\\\"m\\\":\\\"\\\"),o=i,l=0;l<e.length;l++)-1==o.indexOf(e.charAt(l))&&(o+=e.charAt(l));return i==o?t:new RegExp(t.source,o)}function o(t,e,n){e=i(e,\\\"g\\\");for(var o=n.line,l=n.ch,h=t.lastLine();o<=h;o++,l=0){e.lastIndex=l;var s=t.getLine(o),c=e.exec(s);if(c)return{from:r(o,c.index),to:r(o,c.index+c[0].length),match:c}}}function l(t,e){for(var n,r=0;;){e.lastIndex=r;var i=e.exec(t);if(!i)return n;if((r=(n=i).index+(n[0].length||1))==t.length)return n}}function h(t,e,n,r){if(t.length==e.length)return n;for(var i=0,o=n+Math.max(0,t.length-e.length);;){if(i==o)return i;var l=i+o>>1,h=r(t.slice(0,l)).length;if(h==n)return l;h>n?o=l:i=l+1}}function s(t,s,c,f){var u;this.atOccurrence=!1,this.doc=t,c=c?t.clipPos(c):r(0,0),this.pos={from:c,to:c},\\\"object\\\"==typeof f?u=f.caseFold:(u=f,f=null),\\\"string\\\"==typeof s?(null==u&&(u=!1),this.matches=function(i,o){return(i?function(t,i,o,l){if(!i.length)return null;var s=l?e:n,c=s(i).split(/\\\\r|\\\\n\\\\r?/);t:for(var f=o.line,u=o.ch,a=t.firstLine()-1+c.length;f>=a;f--,u=-1){var g=t.getLine(f);u>-1&&(g=g.slice(0,u));var m=s(g);if(1==c.length){var d=m.lastIndexOf(c[0]);if(-1==d)continue t;return{from:r(f,h(g,m,d,s)),to:r(f,h(g,m,d+c[0].length,s))}}var v=c[c.length-1];if(m.slice(0,v.length)==v){var p=1;for(o=f-c.length+1;p<c.length-1;p++)if(s(t.getLine(o+p))!=c[p])continue t;var x=t.getLine(f+1-c.length),L=s(x);if(L.slice(L.length-c[0].length)==c[0])return{from:r(f+1-c.length,h(x,L,x.length-c[0].length,s)),to:r(f,h(g,m,v.length,s))}}}}:function(t,i,o,l){if(!i.length)return null;var s=l?e:n,c=s(i).split(/\\\\r|\\\\n\\\\r?/);t:for(var f=o.line,u=o.ch,a=t.lastLine()+1-c.length;f<=a;f++,u=0){var g=t.getLine(f).slice(u),m=s(g);if(1==c.length){var d=m.indexOf(c[0]);if(-1==d)continue t;return o=h(g,m,d,s)+u,{from:r(f,h(g,m,d,s)+u),to:r(f,h(g,m,d+c[0].length,s)+u)}}var v=m.length-c[0].length;if(m.slice(v)==c[0]){for(var p=1;p<c.length-1;p++)if(s(t.getLine(f+p))!=c[p])continue t;var x=t.getLine(f+c.length-1),L=s(x),C=c[c.length-1];if(L.slice(0,C.length)==C)return{from:r(f,h(g,m,v,s)+u),to:r(f+c.length-1,h(x,L,C.length,s))}}}})(t,s,o,u)}):(s=i(s,\\\"gm\\\"),f&&!1===f.multiline?this.matches=function(e,n){return(e?function(t,e,n){e=i(e,\\\"g\\\");for(var o=n.line,h=n.ch,s=t.firstLine();o>=s;o--,h=-1){var c=t.getLine(o);h>-1&&(c=c.slice(0,h));var f=l(c,e);if(f)return{from:r(o,f.index),to:r(o,f.index+f[0].length),match:f}}}:o)(t,s,n)}:this.matches=function(e,n){return(e?function(t,e,n){e=i(e,\\\"gm\\\");for(var o,h=1,s=n.line,c=t.firstLine();s>=c;){for(var f=0;f<h;f++){var u=t.getLine(s--);o=null==o?u.slice(0,n.ch):u+\\\"\\\\n\\\"+o}h*=2;var a=l(o,e);if(a){var g=o.slice(0,a.index).split(\\\"\\\\n\\\"),m=a[0].split(\\\"\\\\n\\\"),d=s+g.length,v=g[g.length-1].length;return{from:r(d,v),to:r(d+m.length-1,1==m.length?v+m[0].length:m[m.length-1].length),match:a}}}}:function(t,e,n){if(!/\\\\\\\\s|\\\\\\\\n|\\\\n|\\\\\\\\W|\\\\\\\\D|\\\\[\\\\^/.test(e.source))return o(t,e,n);e=i(e,\\\"gm\\\");for(var l,h=1,s=n.line,c=t.lastLine();s<=c;){for(var f=0;f<h&&!(s>c);f++){var u=t.getLine(s++);l=null==l?u:l+\\\"\\\\n\\\"+u}h*=2,e.lastIndex=n.ch;var a=e.exec(l);if(a){var g=l.slice(0,a.index).split(\\\"\\\\n\\\"),m=a[0].split(\\\"\\\\n\\\"),d=n.line+g.length-1,v=g[g.length-1].length;return{from:r(d,v),to:r(d+m.length-1,1==m.length?v+m[0].length:m[m.length-1].length),match:a}}}})(t,s,n)})}String.prototype.normalize?(e=function(t){return t.normalize(\\\"NFD\\\").toLowerCase()},n=function(t){return t.normalize(\\\"NFD\\\")}):(e=function(t){return t.toLowerCase()},n=function(t){return t}),s.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(e){for(var n=this.matches(e,this.doc.clipPos(e?this.pos.from:this.pos.to));n&&0==t.cmpPos(n.from,n.to);)e?n.from.ch?n.from=r(n.from.line,n.from.ch-1):n=n.from.line==this.doc.firstLine()?null:this.matches(e,this.doc.clipPos(r(n.from.line-1))):n.to.ch<this.doc.getLine(n.to.line).length?n.to=r(n.to.line,n.to.ch+1):n=n.to.line==this.doc.lastLine()?null:this.matches(e,r(n.to.line+1,0));if(n)return this.pos=n,this.atOccurrence=!0,this.pos.match||!0;var i=r(e?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:i,to:i},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(e,n){if(this.atOccurrence){var i=t.splitLines(e);this.doc.replaceRange(i,this.pos.from,this.pos.to,n),this.pos.to=r(this.pos.from.line+i.length-1,i[i.length-1].length+(1==i.length?this.pos.from.ch:0))}}},t.defineExtension(\\\"getSearchCursor\\\",function(t,e,n){return new s(this.doc,t,e,n)}),t.defineDocExtension(\\\"getSearchCursor\\\",function(t,e,n){return new s(this,t,e,n)}),t.defineExtension(\\\"selectMatches\\\",function(e,n){for(var r=[],i=this.getSearchCursor(e,this.getCursor(\\\"from\\\"),n);i.findNext()&&!(t.cmpPos(i.to(),this.getCursor(\\\"to\\\"))>0);)r.push({anchor:i.from(),head:i.to()});r.length&&this.setSelections(r,0)})});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js\",\n \"module-type\": \"codemirror\"\n },\n \"$:/plugins/tiddlywiki/codemirror-search-replace/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/codemirror-search-replace/readme\",\n \"text\": \"This plugin enhances the [[CodeMirror|http://codemirror.net]] text editor with Search and Replace functionality. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\\n\\nIt adds these Keyboard Shortcuts to ~CodeMirror:\\n\\n|Shortcut |Function |h\\n|Ctrl-F / Cmd-F |Start searching |\\n|Ctrl-G / Cmd-G / Shift-F3 |Find next |\\n|Shift-Ctrl-G / Shift-Cmd-G / F3 |Find previous |\\n|Shift-Ctrl-F / Cmd-Option-F |Replace |\\n|Shift-Ctrl-R / Shift-Cmd-Option-F |Replace all |\\n|Alt-F |Persistent search (dialog doesn't autoclose, enter to find next, Shift-Enter to find previous) |\\n|Alt-G |Jump to line |\\n\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/comments":{"title":"$:/plugins/tiddlywiki/comments","name":"Comments","description":"Threaded tiddler comments","list":"readme config","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/Comments/EnableFilter\": {\n \"title\": \"$:/config/Comments/EnableFilter\",\n \"text\": \"[all[current]!is[system]]\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/above-story\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/above-story\",\n \"tags\": \"$:/tags/AboveStory\",\n \"text\": \"<$reveal state=\\\"$:/config/Comments/EnableWikiComments\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\">\\n\\n<$tiddler tiddler=\\\"$:/SiteTitle\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/comments/comments-template\\\" mode=\\\"inline\\\"/>\\n\\n</$tiddler>\\n\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/add-comment-button-actions\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/add-comment-button-actions\",\n \"text\": \"<$set name=\\\"username\\\" value={{$:/status/UserName}} emptyValue=\\\"(anonymous)\\\">\\n<$set name=\\\"target\\\" filter=\\\"[<currentTiddler>]\\\">\\n<$action-createtiddler $basetitle={{{ [[Comment by ']addsuffix<username>addsuffix[' on ']addsuffix<currentTiddler>addsuffix[']] }}} role=\\\"comment\\\" list=<<target>> text=\\\"\\\" edit-mode=\\\"yes\\\"/>\\n</$set>\\n</$set>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/add-comment-button\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/add-comment-button\",\n \"text\": \"<$reveal state=\\\"$:/status/IsReadOnly\\\" type=\\\"match\\\" text=\\\"no\\\" default=\\\"no\\\" tag=\\\"div\\\" class=\\\"tc-comment-button\\\">\\n<$button class=\\\"tc-btn-invisible\\\" actions={{$:/plugins/tiddlywiki/comments/add-comment-button-actions}}>\\nadd comment {{$:/core/images/add-comment}}\\n</$button>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/comments-template\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/comments-template\",\n \"text\": \"<div class=\\\"tc-comments\\\">\\n<ol class=\\\"tc-comment-list\\\">\\n<$list filter=\\\"[all[tiddlers+shadows]role[comment]contains<currentTiddler>sort[created]!has[draft.of]]\\\">\\n<li>\\n<div class=\\\"tc-comment-entry\\\">\\n<div class=\\\"tc-comment-entry-heading\\\">\\n<$link>{{!!creator}} at <$view field=\\\"modified\\\" format=\\\"date\\\" template=\\\"0hh:0mm:0ss DDD DDth MMM YYYY\\\"/></$link>\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/CommentToolbarButton]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n<$transclude tiddler=<<listItem>> mode=\\\"inline\\\"/>\\n</$list>\\n</div>\\n<div class=\\\"tc-comment-entry-body\\\">\\n<$reveal type=\\\"match\\\" state=\\\"!!edit-mode\\\" text=\\\"yes\\\">\\n<$edit-text tiddler=<<currentTiddler>> tag=\\\"textarea\\\" focus=\\\"true\\\"/>\\n</$reveal>\\n<$reveal type=\\\"nomatch\\\" state=\\\"!!edit-mode\\\" text=\\\"yes\\\">\\n<$transclude tiddler=<<currentTiddler>> mode=\\\"block\\\"/>\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/comments/add-comment-button\\\" mode=\\\"inline\\\"/>\\n</$reveal>\\n</div>\\n</div>\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/comments/comments-template\\\" mode=\\\"inline\\\"/>\\n</li>\\n</$list>\\n</ol>\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/config\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/config\",\n \"text\": \"\\\\define select(description,filter)\\n<$button>\\n<$action-setfield $tiddler=\\\"$:/config/Comments/EnableFilter\\\" $value=<<__filter__>>/>\\n$description$\\n</$button>\\n\\\\end\\n\\n! Wiki Comments\\n\\n<$checkbox tiddler=\\\"$:/config/Comments/EnableWikiComments\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> <$link to=\\\"$:/config/Comments/EnableWikiComments\\\">Allow wiki-level comments as well as tiddler comments</$link> </$checkbox>\\n\\n! Tiddler Comments\\n\\nThis filter expression determines which tiddlers will have commenting enabled:\\n\\n<$edit-text tiddler=\\\"$:/config/Comments/EnableFilter\\\" tag=\\\"input\\\"/>\\n\\nOr you can choose a preselected filter:\\n\\n* <<select \\\"All tiddlers except system tiddlers\\\" \\\"[all[current]!is[system]]\\\">>\\n* <<select \\\"Only tiddlers tagged 'commentable'\\\" \\\"[all[current]tag[commentable]]\\\">>\\n* <<select \\\"Disable all commenting\\\" \\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/filter-all-comments\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/filter-all-comments\",\n \"tags\": \"$:/tags/Filter\",\n \"filter\": \"[role[comment]!sort[modified]]\",\n \"description\": \"All comments\",\n \"text\": \"\"\n },\n \"$:/plugins/tiddlywiki/comments/footer-view-template-segment\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/footer-view-template-segment\",\n \"tags\": \"$:/tags/ViewTemplate\",\n \"list-after\": \"$:/core/ui/ViewTemplate/body\",\n \"text\": \"<$list filter={{$:/config/Comments/EnableFilter}} variable=\\\"ignore\\\">\\n<div class=\\\"tc-comments-segment\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/comments/add-comment-button\\\" mode=\\\"inline\\\"/>\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/comments/comments-template\\\" mode=\\\"inline\\\"/>\\n</div>\\n</$list>\"\n },\n \"$:/plugins/tiddlywiki/comments/header-view-template-segment\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/header-view-template-segment\",\n \"tags\": \"$:/tags/ViewTemplate\",\n \"list-before\": \"$:/core/ui/ViewTemplate/body\",\n \"text\": \"\\\\define display-original-comment()\\n<$link><$text text=<<currentTiddler>>/></$link>\\n\\\\end\\n\\n\\\\define find-original-comment(exclude)\\n<$list filter=\\\"[<currentTiddler>role[comment]]\\\" emptyMessage=<<display-original-comment>> variable=\\\"ignore\\\">\\n<$list filter=\\\"[list<currentTiddler>sort[title]] -[enlist<__exclude__>]\\\">\\n<$set name=\\\"newExclude\\\" filter=\\\"[enlist<__exclude__>] [<currentTiddler>]\\\">\\n<$macrocall $name=\\\"find-original-comment\\\" exclude=<<newExclude>>/>\\n</$set>\\n</$list>\\n</$list>\\n\\\\end\\n\\n<$list filter=\\\"[all[current]role[comment]]\\\" variable=\\\"ignore\\\">\\n<div class=\\\"tc-is-comment-header\\\">\\n<p>\\nThis tiddler is a comment on\\n<$list filter=\\\"[list<currentTiddler>sort[title]]\\\">\\n<<find-original-comment>> \\n</$list>\\n</p>\\n<$list filter=\\\"[list<currentTiddler>role[comment]sort[title]limit[1]]\\\" variable=\\\"ignore\\\">\\n<p>\\nParent comments:\\n</p>\\n<ul>\\n<$list filter=\\\"[list<currentTiddler>role[comment]sort[title]]\\\">\\n<li>\\n<$link to=<<currentTiddler>>><$text text=<<currentTiddler>>/></$link>\\n</li>\\n</$list>\\n</ul>\\n</$list>\\n</div>\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/readme\",\n \"text\": \"This plugin provides a simple means for adding threaded comments to tiddlers.\\n\\n* Click the \\\"add comment\\\" button to make a new comment, and then click the \\\"save\\\" button to save it\\n* You can comment on a tiddler itself, or add a comment to an existing comment\\n* The sidebar tab ''Comments'' lists a timeline of all comments\\n* Comments are attributed to the username stored in the system tiddler [[$:/status/UserName]]\\n* By default, comments are available on all non-system tiddlers. The ''config'' tab lets you customise which tiddlers can accept comments by specifying a filter extension\\n* The buttons for adding and editing comments are only available if the system tiddler [[$:/status/IsReadOnly]] is not set to `yes`\\n* Use the \\\"All comments\\\" option in the $:/AdvancedSearch ''Filter'' tab to see or export all comments\\n\\n!! Data Model\\n\\nThe data model employed by the comments plugin is very simple:\\n\\n* Comment tiddlers are identified by the `role` field being set to `comment`\\n* The `list` field of comment tiddlers lists the tiddlers to which this comment applies\\n** It is thus possible for a comment to be applied to multiple tiddlers at once\\n** The links between comments can be preserved when renaming them by using the relink checkbox in the edit template\\n* The `edit-mode` field of comment tiddlers is set to `yes` to display it in edit mode, or `no` to display it in view mode\\n* The `saved-text` field is updated when switching to edit mode so that it can be restored if the user cancels\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/sidebar-segment\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/sidebar-segment\",\n \"tags\": \"$:/tags/SideBarSegment\",\n \"list-after\": \"$:/core/ui/SideBarSegments/site-subtitle\",\n \"text\": \"<$reveal state=\\\"$:/config/Comments/EnableWikiComments\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\">\\n<$tiddler tiddler=\\\"$:/SiteTitle\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/comments/add-comment-button\\\" mode=\\\"inline\\\"/>\\n</$tiddler>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/sidebar\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/sidebar\",\n \"tags\": \"$:/tags/SideBar\",\n \"caption\": \"Comments\",\n \"text\": \"<div class=\\\"tc-timeline\\\">\\n<$list filter=\\\"[all[tiddlers+shadows]role[comment]has[modified]!sort[modified]eachday[modified]]\\\">\\n<div class=\\\"tc-menu-list-item\\\">\\n<$view field=\\\"modified\\\" format=\\\"date\\\" template=\\\"DDth MMM YYYY\\\"/>\\n<$list filter=\\\"[all[tiddlers+shadows]role[comment]sameday:modified{!!modified}!sort[modified]]\\\">\\n<div class=\\\"tc-menu-list-subitem\\\">\\n<$link>Comment by '<$view field=\\\"modifier\\\">(anonymous)</$view>'</$link> on\\n<$list filter=\\\"[list<currentTiddler>sort[title]]\\\">\\n<$link to=<<currentTiddler>>><$text text=<<currentTiddler>>/></$link>\\n</$list>\\n</div>\\n</$list>\\n</div>\\n</$list>\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-is-comment-header {\\n\\tpadding: 0.25em;\\n\\tborder: 2px solid #c1e1ea;\\n\\tborder-radius: 4px;\\n\\tbackground: #f1fcff;\\n}\\n\\n.tc-comments-segment {\\n\\tborder-top: 2px solid #d7eef4;\\n}\\n\\n.tc-comment-button button {\\n\\twidth: 100%;\\n\\ttext-align: right;\\n}\\n\\n.tc-sidebar-scrollable .tc-comment-button button {\\n\\twidth: auto;\\n\\ttext-align: right;\\n}\\n\\n.tc-comment-button button svg {\\n\\tfill: #26cb56;\\n\\theight: 2em;\\n\\twidth: 2em;\\n}\\n\\n.tc-comments {\\n}\\n\\n.tc-comment-list {\\n\\tlist-style: none;\\n padding-left: 0;\\n}\\n\\n.tc-comment-list .tc-comments {\\n\\tpadding-left: 1em;\\n}\\n\\n.tc-comment-entry {\\n\\tposition: relative;\\n\\tborder: 2px solid #c1e1ea;\\n\\tborder-radius: 4px;\\n\\tmargin: 0.5em 0 0 0;\\n\\tbackground: #f1fcff;\\n}\\n\\n.tc-comment-entry-heading {\\n\\tfont-size: 0.7em;\\n\\tfont-weight: bold;\\n\\ttext-transform: uppercase;\\n\\tbackground: #d7eef4;\\n\\tcolor: #5B6D80;\\n\\tpadding: 0 0.5em;\\n}\\n\\n.tc-comment-entry-body {\\n\\tfont-size: 0.8em;\\n\\tpadding: 0 0.5em;\\n}\\n\\n.tc-comment-entry-body textarea {\\n\\tfont-size: 1.1em;\\n\\twidth: 100%\\n}\\n\"\n },\n \"$:/tags/CommentToolbarButton\": {\n \"title\": \"$:/tags/CommentToolbarButton\",\n \"list\": \"[[$:/plugins/tiddlywiki/comments/toolbar-button-cancel]] [[$:/plugins/tiddlywiki/comments/toolbar-button-delete]] [[$:/plugins/tiddlywiki/comments/toolbar-button-save]] [[$:/plugins/tiddlywiki/comments/toolbar-button-edit]]\"\n },\n \"$:/plugins/tiddlywiki/comments/toolbar-button-cancel\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/toolbar-button-cancel\",\n \"tags\": \"$:/tags/CommentToolbarButton\",\n \"text\": \"<$reveal state=\\\"$:/status/IsReadOnly\\\" type=\\\"match\\\" text=\\\"no\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$reveal type=\\\"match\\\" state=\\\"!!edit-mode\\\" text=\\\"yes\\\">\\n<$button>\\n<$action-setfield $tiddler=<<currentTiddler>> $field=\\\"edit-mode\\\" $value=\\\"no\\\"/>\\n<$action-setfield $tiddler=<<currentTiddler>> $field=\\\"text\\\" $value={{!!saved-text}}/>\\ncancel\\n</$button>\\n</$reveal>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/toolbar-button-delete\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/toolbar-button-delete\",\n \"tags\": \"$:/tags/CommentToolbarButton\",\n \"text\": \"<$reveal state=\\\"$:/status/IsReadOnly\\\" type=\\\"match\\\" text=\\\"no\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$reveal type=\\\"match\\\" state=\\\"!!edit-mode\\\" text=\\\"yes\\\">\\n<$button>\\n<$action-deletetiddler $tiddler=<<currentTiddler>>/>\\ndelete\\n</$button>\\n</$reveal>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/toolbar-button-edit\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/toolbar-button-edit\",\n \"tags\": \"$:/tags/CommentToolbarButton\",\n \"text\": \"<$reveal state=\\\"$:/status/IsReadOnly\\\" type=\\\"match\\\" text=\\\"no\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$reveal type=\\\"nomatch\\\" state=\\\"!!edit-mode\\\" text=\\\"yes\\\">\\n<$button>\\n<$action-setfield $tiddler=<<currentTiddler>> $field=\\\"edit-mode\\\" $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler=<<currentTiddler>> $field=\\\"saved-text\\\" $value={{!!text}}/>\\nedit\\n</$button>\\n</$reveal>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/comments/toolbar-button-save\": {\n \"title\": \"$:/plugins/tiddlywiki/comments/toolbar-button-save\",\n \"tags\": \"$:/tags/CommentToolbarButton\",\n \"text\": \"<$reveal state=\\\"$:/status/IsReadOnly\\\" type=\\\"match\\\" text=\\\"no\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$reveal type=\\\"match\\\" state=\\\"!!edit-mode\\\" text=\\\"yes\\\">\\n<$button>\\n<$action-setfield $tiddler=<<currentTiddler>> $field=\\\"edit-mode\\\" $value=\\\"no\\\"/>\\nsave\\n</$button>\\n</$reveal>\\n</$reveal>\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/consent-banner":{"title":"$:/plugins/tiddlywiki/consent-banner","name":"Consent Banner","description":"Consent banner for GDPR etc","list":"readme docs youtube config","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/consent-banner/banner\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/banner\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"text\": \"\\\\whitespace trim\\n\\n<$reveal state=\\\"$:/state/consent-banner/accepted\\\" type=\\\"match\\\" text=\\\"\\\" tag=\\\"div\\\">\\n\\n<div class=\\\"tc-consent-backdrop\\\">\\n\\n</div>\\n\\n<div class=\\\"tc-consent-banner tc-consent-banner-left\\\">\\n\\n<$transclude tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/greeting-message\\\" mode=\\\"block\\\"/>\\n\\n<div class=\\\"tc-consent-buttons\\\">\\n\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/ConsentBanner/Button]]\\\">\\n\\n<$transclude tiddler=<<currentTiddler>> mode=\\\"inline\\\"/>\\n\\n</$list>\\n\\n</div>\\n\\n</div>\\n\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/blocked-embed-message-wrapper\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/blocked-embed-message-wrapper\",\n \"text\": \"\\\\define styles()\\nwidth:$(width)$;height:$(height)$;\\n\\\\end\\n\\n<div class=\\\"tc-blocked-embedded-content\\\" style=<<styles>>>\\n<div class=\\\"tc-blocked-embedded-content-inner\\\">\\n<div class=\\\"tc-blocked-embedded-content-inner-inner\\\">\\n<$transclude tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/blocked-embed-message\\\" mode=\\\"inline\\\"/>\\n</div>\\n</div>\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/buttons/accept\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/buttons/accept\",\n \"tags\": \"$:/tags/ConsentBanner/Button\",\n \"text\": \"<$button message=\\\"tm-consent-accept\\\" class=\\\"tc-consent-button tc-consent-button-default tc-btn-invisible\\\" tooltip={{$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/hint}}>\\n{{$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/caption}}\\n</$button>\\n\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/buttons/decline\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/buttons/decline\",\n \"tags\": \"$:/tags/ConsentBanner/Button\",\n \"text\": \"<$button message=\\\"tm-consent-decline\\\" class=\\\"tc-consent-button tc-btn-invisible\\\" tooltip={{$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/hint}}>\\n{{$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/caption}}\\n</$button>\\n\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-backdrop-background\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-backdrop-background\",\n \"text\": \"rgba(0,0,0,0.2)\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-background\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-background\",\n \"text\": \"#009677\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-button-background\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-button-background\",\n \"text\": \"transparent\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-button-border\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-button-border\",\n \"text\": \"#fff\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-button-default-background\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-button-default-background\",\n \"text\": \"#fff\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-button-default-foreground\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-button-default-foreground\",\n \"text\": \"#009677\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-button-foreground\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-button-foreground\",\n \"text\": \"#fff\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-button-hover-background\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-button-hover-background\",\n \"text\": \"#fff\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-button-hover-border\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-button-hover-border\",\n \"text\": \"#fff\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-button-hover-foreground\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-button-hover-foreground\",\n \"text\": \"#009577\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-foreground\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-foreground\",\n \"text\": \"#fff\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-hr-background\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-hr-background\",\n \"text\": \"rgba(255,255,255,.25)\"\n },\n \"$:/config/DefaultColourMappings/consent-banner-link-foreground\": {\n \"title\": \"$:/config/DefaultColourMappings/consent-banner-link-foreground\",\n \"text\": \"#fff\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/block-embedded-content\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/block-embedded-content\",\n \"text\": \"yes\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/blocked-embed-message\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/blocked-embed-message\",\n \"text\": \"Blocked embedded content from<br/><a href=<<url>> class=\\\"tc-tiddlylink-external\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\"><$text text=<<url>>/></a>\\n\\n<hr/>\\n\\n{{$:/plugins/tiddlywiki/consent-banner/buttons/accept}} cookies to unblock\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/blocked-raw-message\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/blocked-raw-message\",\n \"text\": \"<div class=\\\"tc-blocked-embedded-content\\\" style=\\\"width:100%;\\\">\\n\\n<div class=\\\"tc-blocked-embedded-content-inner\\\">\\n\\n<div class=\\\"tc-blocked-embedded-content-inner-inner\\\">\\n\\nBlocked raw content\\n\\n<hr/>\\n\\n{{$:/plugins/tiddlywiki/consent-banner/buttons/accept}} cookies to unblock\\n\\n</div>\\n\\n</div>\\n\\n</div>\\n\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/caption\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/caption\",\n \"text\": \"Accept\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/hint\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/hint\",\n \"text\": \"Accept cookies\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/buttons/clear/caption\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/buttons/clear/caption\",\n \"text\": \"Clear\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/buttons/clear/hint\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/buttons/clear/hint\",\n \"text\": \"Clear cookies\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/caption\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/caption\",\n \"text\": \"Decline\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/hint\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/hint\",\n \"text\": \"Decline cookies\"\n },\n \"$:/config/cookie-consent-required\": {\n \"title\": \"$:/config/cookie-consent-required\",\n \"text\": \"yes\"\n },\n \"$:/config/plugins/tiddlywiki/consent-banner/greeting-message\": {\n \"title\": \"$:/config/plugins/tiddlywiki/consent-banner/greeting-message\",\n \"text\": \"! Our use of cookies\\n\\nWe use necessary cookies to make our site work. We’d also like to set optional analytics to help us improve it. We won’t set optional cookies unless you enable them. Using this tool will set a cookie on your device to remember your preferences.\\n\\n---\\n\\n!! Necessary cookies\\n\\nNecessary cookies enable core functionality such as security, network management, and accessibility. You may disable these by changing your browser settings, but this may affect how the website functions.\\n\\n---\\n\\n!! Analytics cookies\\n\\nWe’d like to set non-essential cookies, such as Google Analytics, to help us to improve our website by collecting and reporting information on how you use it. The cookies collect information in a way that does not directly identify anyone.\\n\\n---\\n\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/tv-block-embedded-content\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/tv-block-embedded-content\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"<$set name=\\\"tv-block-embedded-content\\\" value={{{ [{$:/config/cookie-consent-required}else[no]match[yes]then{$:/state/consent-banner/accepted}!match[yes]then[yes]] }}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/config\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/config\",\n \"text\": \"! [[Greeting Message|$:/config/plugins/tiddlywiki/consent-banner/greeting-message]]\\n\\n<div style=\\\"\\\">\\n\\n<div style=\\\"display:inline-block;vertical-align:top;width:45%;\\\">\\n\\n<$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/greeting-message\\\" tag=\\\"textarea\\\" class=\\\"tc-edit-texteditor\\\"/>\\n\\n</div>\\n\\n<div style=\\\"display:inline-block;vertical-align:top;width:45%;margin:0.5em;border:1px solid black;padding:0.5em;\\\" class=\\\"tc-consent-banner\\\">\\n\\n<$transclude tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/greeting-message\\\" mode=\\\"block\\\"/>\\n\\n</div>\\n\\n</div>\\n\\n! Buttons\\n\\n|[[Accept caption|$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/caption]] |<$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/caption\\\" tag=\\\"input\\\"/> |\\n|[[Accept hint|$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/hint]] |<$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/hint\\\" tag=\\\"input\\\"/> |\\n|[[Decline caption|$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/caption]] |<$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/caption\\\" tag=\\\"input\\\"/> |\\n|[[Decline hint|$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/hint]] |<$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/hint\\\" tag=\\\"input\\\"/> |\\n\\n! [[Consent Accepted Status|$:/state/consent-banner/accepted]]\\n\\nCurrent status: {{$:/state/consent-banner/accepted}} (blank indicates that consent has not yet been granted or declined)\\n\\n<$button message=\\\"tm-consent-accept\\\" tooltip={{$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/hint}}>\\n{{$:/config/plugins/tiddlywiki/consent-banner/buttons/accept/caption}}\\n</$button>\\n\\n<$button message=\\\"tm-consent-decline\\\" tooltip={{$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/hint}}>\\n{{$:/config/plugins/tiddlywiki/consent-banner/buttons/decline/caption}}\\n</$button>\\n\\n<$button message=\\\"tm-consent-clear\\\" tooltip={{$:/config/plugins/tiddlywiki/consent-banner/buttons/clear/hint}}>\\n{{$:/config/plugins/tiddlywiki/consent-banner/buttons/clear/caption}}\\n</$button>\\n\\n! Embedded Content Blocking\\n\\n//Requires page reload//\\n\\n<$checkbox tiddler=\\\"$:/config/plugins/tiddlywiki/consent-banner/block-embedded-content\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> Block all embedded content such as <iframe>, <embed> and <object> unless consent has been granted</$checkbox>\\n\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/docs\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/docs\",\n \"text\": \"! Features\\n\\nIf the same wiki is opened in multiple tabs then once the warning has been accepted or declined in one tab then the other tabs will autonatically follow suit.\\n\\nConsent is automatically granted if the user logged in (ie the tiddler [[$:/status/IsLoggedIn]] is set to `yes`).\\n\\n! Consent Banner Palette Entries\\n\\nAdd these entries to your current colour palette to change the colours used by the consent banner:\\n\\n* ''consent-banner-backdrop-background'' - the colour of the backdrop behind the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-backdrop-background}})\\n* ''consent-banner-background'' - the background colour of the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-background}})\\n* ''consent-banner-button-background'' - the background colour of buttons within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-button-background}})\\n* ''consent-banner-button-border'' - the border colour of buttons within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-button-border}})\\n* ''consent-banner-button-default-background'' - the background colour for the default button within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-button-default-background}})\\n* ''consent-banner-button-default-foreground'' - the foreground colour for the default button within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-button-default-foreground}})\\n* ''consent-banner-button-foreground'' - the foreground colour of buttons within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-button-foreground}})\\n* ''consent-banner-button-hover-background'' - the background colour of hovered buttons within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-button-hover-background}})\\n* ''consent-banner-button-hover-border'' - the border colour of hovered buttons within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-button-hover-border}})\\n* ''consent-banner-button-hover-foreground'' - the foreground colour of hovered buttons within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-button-hover-foreground}})\\n* ''consent-banner-foreground'' - the foreground colour of the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-foreground}})\\n* ''consent-banner-hr-background'' - the background colour of horizontal rules within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-hr-background}})\\n* ''consent-banner-link-foreground'' - the foreground colour of tiddler links within the consent banner (defaults to {{$:/config/DefaultColourMappings/consent-banner-link-foreground}})\\n\\n! Embedded Content Blocking\\n\\nUnless disabled via the config tab, content embedded via <iframe>, <embed> or <object> is blocked until the user consents to accept cookies.\\n\\n!! Implementation Details\\n\\nEmbedded content is blocked if the variable `tv-block-embedded-content` is set to `yes`. It is set to the current consent status by a [[global macro|$:/plugins/tiddlywiki/consent-banner/tv-block-embedded-content]]:\\n\\n<$codeblock code={{$:/plugins/tiddlywiki/consent-banner/tv-block-embedded-content}}/>\\n\\n! ~YouTube macro\\n\\nA simple macro for embedding ~YouTube videos is provided to show how to adapt content according to whether consent has been granted. It works by checking the tiddler [[$:/state/consent-banner/accepted]] for the following values:\\n\\n* ''empty or missing'' - the user has yet to accept or decline to give their consent\\n* `yes` - the user has granted consent\\n* `no` - the user has declined consent\\n\\n! Customising banner buttons\\n\\nThe [[\\\"accept\\\"|$:/plugins/tiddlywiki/consent-banner/buttons/accept]] and [[\\\"decline\\\"|$:/plugins/tiddlywiki/consent-banner/buttons/decline]] buttons in the banner are individual tiddlers with the tag [[$:/tags/ConsentBanner/Button]], allowing them to be customised and extended.\\n\\nA common use case is to add a \\\"login\\\" button allowing users to login directly to bypass the banner. This could be implemented as a tiddler tagged [[$:/tags/ConsentBanner/Button]] with the following text:\\n\\n```\\n<$button message=\\\"tm-login\\\" class=\\\"tc-consent-button tc-btn-invisible\\\">\\nLogin\\n</$button>\\n```\\n\\n! Integration with other plugins\\n\\nThird party plugins that set cookies can configure themselves to defer setting cookies until the user grants consent. There are several parts to this mechanism:\\n\\n* The consent-banner plugin includes a shadow tiddler [[$:/config/cookie-consent-required]] with the text `yes`. The third-party plugin should inspect this tiddler at startup; if it is not set to \\\"yes\\\" then it can proceed to set tiddlers immediately\\n* Otherwise, the third-party plugin should listen for changes to the tiddler [[$:/state/consent-banner/accepted]] and only start setting cookies when and if the value changes to \\\"yes\\\"\\n\\nThe [[Google Analytics plugin|https://github.com/Jermolene/TiddlyWiki5/tree/master/plugins/tiddlywiki/googleanalytics]] shows an example of how this mechanism can be implemented.\\n\"\n },\n \"$:/core/modules/widgets/raw.js\": {\n \"title\": \"$:/core/modules/widgets/raw.js\",\n \"text\": \"/*\\\\\\ntitle: $:/core/modules/widgets/raw.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAn override of the raw widget that blocks raw content until the user has consented to accept cookies\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n\\nvar RawWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nRawWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nRawWidget.prototype.render = function(parent,nextSibling) {\\n\\tthis.parentDomNode = parent;\\n\\tthis.execute();\\n\\tthis.blocked = this.getVariable(\\\"tv-block-embedded-content\\\",\\\"no\\\") === \\\"yes\\\";\\n\\tif(this.blocked) {\\n\\t\\tthis.makeChildWidgets([{\\n\\t\\t\\ttype: \\\"transclude\\\",\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\ttiddler: {type: \\\"string\\\", value: \\\"$:/config/plugins/tiddlywiki/consent-banner/blocked-raw-message\\\"}\\n\\t\\t\\t}\\n\\t\\t}]);\\n\\t\\t// Render child widgets\\n\\t\\tthis.renderChildren(parent,null);\\n\\t} else {\\n\\t\\tvar div = this.document.createElement(\\\"div\\\");\\n\\t\\tdiv.innerHTML=this.parseTreeNode.html;\\n\\t\\tparent.insertBefore(div,nextSibling);\\n\\t\\tthis.domNodes.push(div);\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nRawWidget.prototype.execute = function() {\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nRawWidget.prototype.refresh = function(changedTiddlers) {\\n\\tif(this.blocked) {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t} else {\\n\\t\\treturn false;\\t\\t\\n\\t}\\n};\\n\\nexports.raw = RawWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/readme\",\n \"text\": \"The ''consent-banner'' plugin helps make websites that are compliant with \\\"cookie legislation\\\" such as the [[EU General Data Protection Regulation|https://gdpr.eu/cookies/]].\\nIt presents a banner inviting the user to accept or reject cookies, keeping track of their consent in local storage so that the banner can be hidden on subsequent visits.\\n\\nBy default, content embedded with <iframe>, <embed> and <object> is blocked unless the user consents to accept cookies.\\n\\nConsent status is available via a configuration tiddler so that it is possible to construct content that behaves differently depending upon whether consent has been granted. As an example, a macro is provided for embedding ~YouTube videos that automatically uses the youtube-nocookie.com variant of video URLs unless the user has accepted cookies.\\n\\nPlease note that using this plugin does not guarantee compliance with any particular legislation. You will need to understand the technical issues specific to your situation, and if necessary seek legal advice.\\n\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/startup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/startup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/consent-banner/startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nStartup initialisation\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"consent-banner\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.after = [\\\"startup\\\"];\\nexports.before = [\\\"render\\\"];\\nexports.synchronous = true;\\n\\nvar CHECK_CONSENT_INTERVAL = 1000, // Milliseconds between checking local storage\\n\\tIS_LOGGED_IN_TITLE = \\\"$:/status/IsLoggedIn\\\",\\n\\tCONSENT_KEY = \\\"COOKIE_CONSENT\\\", // Local storage keyname\\n\\tCONSENT_TITLE = \\\"$:/state/consent-banner/accepted\\\", // \\\"\\\": undeclared, \\\"yes\\\": accepted, \\\"no\\\": declined\\n\\tCONFIG_BLOCK_EMBEDDED_CONTENT_TITLE = \\\"$:/config/plugins/tiddlywiki/consent-banner/block-embedded-content\\\",\\n\\tEMBEDDED_MESSAGE_WRAPPER_TITLE = \\\"$:/plugins/tiddlywiki/consent-banner/blocked-embed-message-wrapper\\\";\\n\\nexports.startup = function() { \\n\\tvar consentState = \\\"\\\",\\n\\t\\tsetConsentStatus = function(state) {\\n\\t\\t\\tif(consentState !== state) {\\n\\t\\t\\t\\tconsentState = state;\\n\\t\\t\\t\\t// Write to local storage\\n\\t\\t\\t\\twindow.localStorage.setItem(CONSENT_KEY,state);\\n\\t\\t\\t\\t// Write to a state tiddler\\n\\t\\t\\t\\t$tw.wiki.addTiddler(new $tw.Tiddler({\\n\\t\\t\\t\\t\\ttitle: CONSENT_TITLE,\\n\\t\\t\\t\\t\\ttext: state\\n\\t\\t\\t\\t}));\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcalculateConsentStatus = function() {\\n\\t\\t\\t// Consent is implied for logged in users, otherwise we check local storage\\n\\t\\t\\treturn ($tw.wiki.getTiddlerText(IS_LOGGED_IN_TITLE) === \\\"yes\\\" && \\\"yes\\\") || window.localStorage.getItem(CONSENT_KEY) || \\\"\\\";\\n\\t\\t},\\n\\t\\tcheckConsentStatus = function() {\\n\\t\\t\\tsetConsentStatus(calculateConsentStatus());\\n\\t\\t\\tif(consentState === \\\"\\\") {\\n\\t\\t\\t\\tpollConsentStatus();\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tpollConsentStatus = function() {\\n\\t\\t\\tsetTimeout(checkConsentStatus,CHECK_CONSENT_INTERVAL);\\n\\t\\t};\\n\\t// Set the current consent status\\n\\tcheckConsentStatus();\\n\\t// Listen for consent messages\\n\\t$tw.rootWidget.addEventListener(\\\"tm-consent-accept\\\",function(event) {\\n\\t\\tsetConsentStatus(\\\"yes\\\");\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\"tm-consent-decline\\\",function(event) {\\n\\t\\tsetConsentStatus(\\\"no\\\");\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\"tm-consent-clear\\\",function(event) {\\n\\t\\tsetConsentStatus(\\\"\\\");\\n\\t});\\n\\t// Add our element rendering hook\\n\\tif($tw.wiki.getTiddlerText(CONFIG_BLOCK_EMBEDDED_CONTENT_TITLE,\\\"no\\\") === \\\"yes\\\") {\\n\\t\\t$tw.hooks.addHook(\\\"th-rendering-element\\\",function(parseTreeNodes,widget) {\\n\\t\\t\\tif(parseTreeNodes) {\\n\\t\\t\\t\\treturn parseTreeNodes;\\n\\t\\t\\t}\\n\\t\\t\\tif([\\\"iframe\\\",\\\"object\\\",\\\"embed\\\"].indexOf(widget.tag) !== -1 && widget.getVariable(\\\"tv-block-embedded-content\\\",\\\"no\\\") === \\\"yes\\\") {\\n\\t\\t\\t\\tvar url = widget.getAttribute(\\\"src\\\"),\\n\\t\\t\\t\\t\\taddUnitsIfMissing = function(str) {\\n\\t\\t\\t\\t\\t\\tstr = \\\"\\\" + str;\\n\\t\\t\\t\\t\\t\\treturn str + ((\\\"\\\" + parseInt(str,10)) === str ? \\\"px\\\" : \\\"\\\");\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\twidth = addUnitsIfMissing(widget.getAttribute(\\\"width\\\",\\\"\\\")),\\n\\t\\t\\t\\t\\theight = addUnitsIfMissing(widget.getAttribute(\\\"height\\\",\\\"\\\"));\\n\\t\\t\\t\\treturn [\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\ttype: \\\"vars\\\",\\n\\t\\t\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\t\\t\\turl: {type: \\\"string\\\", value: url},\\n\\t\\t\\t\\t\\t\\t\\twidth: {type: \\\"string\\\", value: width},\\n\\t\\t\\t\\t\\t\\t\\theight: {type: \\\"string\\\", value: height}\\n\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\tchildren: [\\n\\t\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\t\\ttype: \\\"transclude\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttiddler: {type: \\\"string\\\", value: EMBEDDED_MESSAGE_WRAPPER_TITLE},\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tmode: {type: \\\"string\\\", value: \\\"inline\\\"}\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t]\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t];\\n\\t\\t\\t}\\n\\t\\t\\treturn null;\\n\\t\\t});\\n\\t}\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/styles\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \".tc-consent-backdrop {\\n\\tz-index: 1999;\\n\\tposition: fixed;\\n\\tleft: 0;\\n\\tright: 0;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tbackground: <<colour consent-banner-backdrop-background>>;\\n}\\n\\n.tc-consent-banner-left {\\n\\tz-index: 2000;\\n\\tposition: fixed;\\n\\tleft: 0;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tmax-width: 500px;\\n\\toverflow-y: auto;\\n}\\n\\n.tc-consent-banner {\\n\\tpadding: 1em;\\n\\tbackground: <<colour consent-banner-background>>;\\n\\tcolor: <<colour consent-banner-foreground>>;\\n\\tbox-shadow: 0 0 20px rgba(0,0,0,.2);\\n}\\n\\n.tc-consent-banner a.tc-tiddlylink-external {\\n\\ttext-decoration: underline;\\n\\tcolor: <<colour consent-banner-link-foreground>>;\\n\\tbackground-color: inherit;\\n}\\n\\n.tc-consent-banner a.tc-tiddlylink-external:visited {\\n\\tcolor: <<colour consent-banner-link-foreground>>;\\n\\tbackground-color: inherit;\\n}\\n\\n.tc-consent-banner hr {\\n\\tclear: both;\\n\\tpadding: 0;\\n\\twidth: 100%;\\n\\toverflow: hidden;\\n\\ttext-align: left;\\n\\tborder: 0 none;\\n\\tmargin: 24px 0;\\n\\theight: 1px;\\n\\tmax-height: 1px;\\n\\tbackground: <<colour consent-banner-hr-background>>;\\n}\\n\\n.tc-consent-buttons {\\n\\t\\n}\\n\\n.tc-consent-banner .tc-consent-button {\\n\\tmargin-right: 1em;\\n}\\n\\n.tc-consent-button {\\n\\tborder: 1px solid <<colour consent-banner-button-border>>;\\n\\tmargin-top: 1em;\\n\\tpadding: 0.75em 1.5em;\\n\\tcolor: <<colour consent-banner-button-foreground>>;\\n\\tbackground: <<colour consent-banner-button-background>>;\\n\\tfont-weight: bold;\\n}\\n\\n.tc-consent-button:hover {\\n\\tcolor: <<colour consent-banner-button-hover-foreground>>;\\n\\tborder-color: <<colour consent-banner-button-hover-border>>;\\n\\tbackground: <<colour consent-banner-button-hover-background>>;\\n\\topacity: .6;\\n}\\n\\n.tc-consent-button-default {\\n\\tcolor: <<colour consent-banner-button-default-foreground>>;\\n\\tbackground: <<colour consent-banner-button-default-background>>;\\n}\\n\\n.tc-blocked-embedded-content {\\n\\tdisplay: inline-block;\\n\\toverflow: hidden;\\n\\tcolor: <<colour background>>;\\n\\tbackground: <<colour muted-foreground>>;\\n\\tborder: 1px solid <<colour foreground>>;\\n\\t<<box-shadow \\\"inset 0 0 8px rgba(0, 0, 0, 0.15)\\\">>\\n}\\n\\n.tc-blocked-embedded-content-inner {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n width: 100%;\\n height: 100%;\\n}\\n\\n.tc-blocked-embedded-content-inner-inner {\\n\\tdisplay: inline-block;\\n\\ttext-align: center;\\n}\\n\\n.tc-blocked-embedded-content-inner-inner hr {\\n background: <<colour foreground>>;\\n height: 1px;\\n width: 80%;\\n border: none;\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/consent-banner/youtube\": {\n \"title\": \"$:/plugins/tiddlywiki/consent-banner/youtube\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define embed-video-with-consent(code)\\n<$set name=\\\"tv-block-embedded-content\\\" value=\\\"no\\\">\\n<$reveal state=\\\"$:/state/consent-banner/accepted\\\" type=\\\"match\\\" text=\\\"yes\\\" tag=\\\"div\\\">\\n<iframe width=\\\"560\\\" height=\\\"315\\\" src=\\\"https://www.youtube.com/embed/$code$\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; encrypted-media\\\" allowfullscreen></iframe>\\n</$reveal>\\n<$reveal state=\\\"$:/state/consent-banner/accepted\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" tag=\\\"div\\\">\\n<iframe width=\\\"560\\\" height=\\\"315\\\" src=\\\"https://www.youtube-nocookie.com/embed/$code$\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; encrypted-media\\\" allowfullscreen></iframe>\\n</$reveal>\\n</$set>\\n\\\\end\\n\\n! Macro source\\n\\n<$codeblock code={{$:/plugins/tiddlywiki/consent-banner/youtube}}/>\\n\\n! Example\\n\\n<<embed-video-with-consent KtCUr83XgyE>>\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/d3":{"title":"$:/plugins/tiddlywiki/d3","name":"D3","description":"D3 data visualisation demo","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/d3/barwidget.js\": {\n \"title\": \"$:/plugins/tiddlywiki/d3/barwidget.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/d3/barwidget.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nA widget for displaying stacked or grouped bar charts. Derived from http://bl.ocks.org/mbostock/3943967\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget,\\n\\td3 = require(\\\"$:/plugins/tiddlywiki/d3/d3.js\\\").d3;\\n\\nvar BarWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nBarWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nBarWidget.prototype.render = function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode = parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Create the chart\\n\\tvar chart = this.createChart(parent,nextSibling);\\n\\tthis.updateChart = chart.updateChart;\\n\\tif(this.updateChart) {\\n\\t\\tthis.updateChart();\\n\\t}\\n\\t// Insert the chart into the DOM and render any children\\n\\tparent.insertBefore(chart.domNode,nextSibling);\\n\\tthis.domNodes.push(chart.domNode);\\n};\\n\\nBarWidget.prototype.createChart = function(parent,nextSibling) {\\n\\t// Get the data we're plotting\\n\\tvar data = this.wiki.getTiddlerData(this.barData),\\n\\t\\tn,m,stack,layers;\\n\\tif(data) {\\n\\t\\tn = data.layers;\\n\\t\\tm = data.samples;\\n\\t\\tlayers = data.data;\\n\\t} else { // Use randomly generated data if we don't have any\\n\\t\\tn = 4; // number of layers\\n\\t\\tm = 58; // number of samples per layer\\n\\t\\tstack = d3.layout.stack();\\n\\t\\tlayers = stack(d3.range(n).map(function() { return bumpLayer(m, 0.1); }));\\n\\t}\\n\\t// Calculate the maximum data values\\n\\tvar yGroupMax = d3.max(layers, function(layer) { return d3.max(layer, function(d) { return d.y; }); }),\\n\\t\\tyStackMax = d3.max(layers, function(layer) { return d3.max(layer, function(d) { return d.y0 + d.y; }); });\\n\\t// Calculate margins and width and height\\n\\tvar margin = {top: 40, right: 10, bottom: 20, left: 10},\\n\\t\\twidth = 960 - margin.left - margin.right,\\n\\t\\theight = 500 - margin.top - margin.bottom;\\n\\t// x-scale\\n\\tvar x = d3.scale.ordinal()\\n\\t\\t.domain(d3.range(m))\\n\\t\\t.rangeRoundBands([0, width], 0.08);\\n\\t// y-scale\\n\\tvar y = d3.scale.linear()\\n\\t\\t.domain([0, yStackMax])\\n\\t\\t.range([height, 0]);\\n\\t// Array of colour values\\n\\tvar color = d3.scale.linear()\\n\\t\\t.domain([0, n - 1])\\n\\t\\t.range([\\\"#aad\\\", \\\"#556\\\"]);\\n\\t// x-axis\\n\\tvar xAxis = d3.svg.axis()\\n\\t\\t.scale(x)\\n\\t\\t.tickSize(0)\\n\\t\\t.tickPadding(6)\\n\\t\\t.orient(\\\"bottom\\\");\\n\\t// Create SVG element\\n\\tvar svgElement = d3.select(parent).insert(\\\"svg\\\",function() {return nextSibling;})\\n\\t\\t.attr(\\\"viewBox\\\", \\\"0 0 960 500\\\")\\n\\t\\t.attr(\\\"preserveAspectRatio\\\", \\\"xMinYMin meet\\\")\\n\\t\\t.attr(\\\"width\\\", width + margin.left + margin.right)\\n\\t\\t.attr(\\\"height\\\", height + margin.top + margin.bottom);\\n\\t// Create main group\\n\\tvar mainGroup = svgElement.append(\\\"g\\\")\\n\\t\\t.attr(\\\"transform\\\", \\\"translate(\\\" + margin.left + \\\",\\\" + margin.top + \\\")\\\");\\n\\t// Create the layers\\n\\tvar layer = mainGroup.selectAll(\\\".layer\\\")\\n\\t\\t.data(layers)\\n\\t.enter().append(\\\"g\\\")\\n\\t\\t.attr(\\\"class\\\", \\\"layer\\\")\\n\\t\\t.style(\\\"fill\\\", function(d, i) { return color(i); });\\n\\t// Create the rectangles in each layer\\n\\tvar rect = layer.selectAll(\\\"rect\\\")\\n\\t\\t.data(function(d) { return d; })\\n\\t.enter().append(\\\"rect\\\")\\n\\t\\t.attr(\\\"x\\\", function(d) { return x(d.x); })\\n\\t\\t.attr(\\\"y\\\", height)\\n\\t\\t.attr(\\\"width\\\", x.rangeBand())\\n\\t\\t.attr(\\\"height\\\", 0);\\n\\t// Transition the rectangles to their final height\\n\\trect.transition()\\n\\t\\t.delay(function(d, i) { return i * 10; })\\n\\t\\t.attr(\\\"y\\\", function(d) { return y(d.y0 + d.y); })\\n\\t\\t.attr(\\\"height\\\", function(d) { return y(d.y0) - y(d.y0 + d.y); });\\n\\t// Add to the DOM\\n\\tmainGroup.append(\\\"g\\\")\\n\\t\\t.attr(\\\"class\\\", \\\"x axis\\\")\\n\\t\\t.attr(\\\"transform\\\", \\\"translate(0,\\\" + height + \\\")\\\")\\n\\t\\t.call(xAxis);\\n\\tvar self = this;\\n\\t// Return the svg node\\n\\treturn {\\n\\t\\tdomNode: svgElement[0][0],\\n\\t\\tupdateChart: function() {\\n\\t\\t\\tif (self.barGrouped !== \\\"no\\\") {\\n\\t\\t\\t\\ttransitionGrouped();\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ttransitionStacked();\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\n\\tfunction transitionGrouped() {\\n\\t\\ty.domain([0, yGroupMax]);\\n\\t\\trect.transition()\\n\\t\\t\\t.duration(500)\\n\\t\\t\\t.delay(function(d, i) { return i * 10; })\\n\\t\\t\\t.attr(\\\"x\\\", function(d, i, j) { return x(d.x) + x.rangeBand() / n * j; })\\n\\t\\t\\t.attr(\\\"width\\\", x.rangeBand() / n)\\n\\t\\t\\t.transition()\\n\\t\\t\\t.attr(\\\"y\\\", function(d) { return y(d.y); })\\n\\t\\t\\t.attr(\\\"height\\\", function(d) { return height - y(d.y); });\\n\\t}\\n\\n\\tfunction transitionStacked() {\\n\\t\\ty.domain([0, yStackMax]);\\n\\t\\trect.transition()\\n\\t\\t\\t.duration(500)\\n\\t\\t\\t.delay(function(d, i) { return i * 10; })\\n\\t\\t\\t.attr(\\\"y\\\", function(d) { return y(d.y0 + d.y); })\\n\\t\\t\\t.attr(\\\"height\\\", function(d) { return y(d.y0) - y(d.y0 + d.y); })\\n\\t\\t\\t.transition()\\n\\t\\t\\t.attr(\\\"x\\\", function(d) { return x(d.x); })\\n\\t\\t\\t.attr(\\\"width\\\", x.rangeBand());\\n\\t}\\n\\n\\t// Inspired by Lee Byron's test data generator.\\n\\tfunction bumpLayer(n, o) {\\n\\t\\tfunction bump(a) {\\n\\t\\t\\tvar x = 1 / (0.1 + Math.random()),\\n\\t\\t\\t\\ty = 2 * Math.random() - 0.5,\\n\\t\\t\\t\\tz = 10 / (0.1 + Math.random());\\n\\t\\t\\tfor (var i = 0; i < n; i++) {\\n\\t\\t\\tvar w = (i / n - y) * z;\\n\\t\\t\\ta[i] += x * Math.exp(-w * w);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar a = [], i;\\n\\t\\tfor (i = 0; i < n; ++i) a[i] = o + o * Math.random();\\n\\t\\tfor (i = 0; i < 5; ++i) bump(a);\\n\\t\\treturn a.map(function(d, i) { return {x: i, y: Math.max(0, d)}; });\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nBarWidget.prototype.execute = function() {\\n\\t// Get the parameters from the attributes\\n\\tthis.barData = this.getAttribute(\\\"data\\\");\\n\\tthis.barGrouped = this.getAttribute(\\\"grouped\\\",\\\"no\\\");\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nBarWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.data || changedTiddlers[this.barData]) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else if(changedAttributes.grouped) {\\n\\t\\tthis.execute();\\n\\t\\tif(this.updateChart) {\\n\\t\\t\\tthis.updateChart();\\n\\t\\t}\\n\\t\\treturn true;\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.d3bar = BarWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/d3/base.tid\": {\n \"title\": \"$:/plugins/tiddlywiki/d3/base.tid\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-barwidget {\\n}\\n\\n.tc-barwidget text {\\n font: 8px sans-serif;\\n}\\n\\n.tc-barwidget .axis path,\\n.tc-barwidget .axis line {\\n fill: none;\\n stroke: #000;\\n shape-rendering: crispEdges;\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/d3/cloudwidget.js\": {\n \"title\": \"$:/plugins/tiddlywiki/d3/cloudwidget.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/d3/cloudwidget.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nA widget for displaying word clouds. Derived from https://github.com/jasondavies/d3-cloud\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget,\\n\\td3 = require(\\\"$:/plugins/tiddlywiki/d3/d3.js\\\").d3;\\n\\nif($tw.browser) {\\n\\t// Frightful hack to give the cloud plugin the global d3 variable it needs\\n\\twindow.d3 = d3;\\n\\td3.layout.cloud = require(\\\"$:/plugins/tiddlywiki/d3/d3.layout.cloud.js\\\").cloud;\\n}\\n\\nvar CloudWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nCloudWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nCloudWidget.prototype.render = function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode = parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Create the chart\\n\\tvar chart = this.createChart(parent,nextSibling);\\n\\tthis.updateChart = chart.updateChart;\\n\\tif(this.updateChart) {\\n\\t\\tthis.updateChart();\\n\\t}\\n\\t// Insert the chart into the DOM and render any children\\n\\tparent.insertBefore(chart.domNode,nextSibling);\\n\\tthis.domNodes.push(chart.domNode);\\n};\\n\\nCloudWidget.prototype.createChart = function(parent,nextSibling) {\\n\\tvar self = this,\\n\\t\\tfill = d3.scale.category20(),\\n\\t\\tdata = this.wiki.getTiddlerData(this.cloudData);\\n\\t// Use dummy data if none provided\\n\\tif(!data) {\\n\\t\\tdata = \\\"This word cloud does not have any data in it\\\".split(\\\" \\\").map(function(d) {\\n\\t\\t\\treturn {text: d, size: 10 + Math.random() * 90};\\n\\t\\t});\\n\\t}\\n\\t// Create the svg element\\n\\tvar svgElement = d3.select(parent).insert(\\\"svg\\\",function() {return nextSibling;})\\n\\t\\t.attr(\\\"width\\\", 600)\\n\\t\\t.attr(\\\"height\\\", 400);\\n\\t// Create the main group\\n\\tvar mainGroup = svgElement\\n\\t\\t.append(\\\"g\\\")\\n\\t\\t.attr(\\\"transform\\\", \\\"translate(300,200)\\\");\\n\\t// Create the layout\\n\\tvar layout = d3.layout.cloud().size([600, 400])\\n\\t\\t.words(data)\\n\\t\\t.padding(5)\\n\\t\\t.rotate(function() { return ~~(Math.random() * 5) * 30 - 60; })\\n\\t\\t.font(\\\"Impact\\\")\\n\\t\\t.fontSize(function(d) { return d.size*2; })\\n\\t\\t.on(\\\"end\\\", draw)\\n\\t\\t.start();\\n\\t// Function to draw all the words\\n\\tfunction draw(words) {\\n\\t\\tmainGroup.selectAll(\\\"text\\\")\\n\\t\\t\\t.data(words)\\n\\t\\t\\t.enter().append(\\\"text\\\")\\n\\t\\t\\t.style(\\\"font-size\\\", function(d) { return d.size + \\\"px\\\"; })\\n\\t\\t\\t.style(\\\"font-family\\\", \\\"Impact\\\")\\n\\t\\t\\t.style(\\\"fill\\\", function(d, i) { return fill(i); })\\n\\t\\t\\t.attr(\\\"text-anchor\\\", \\\"middle\\\")\\n\\t\\t\\t.attr(\\\"transform\\\", function(d) {\\n\\t\\t\\t\\treturn \\\"translate(\\\" + [d.x, d.y] + \\\")rotate(\\\" + d.rotate + \\\")\\\";\\n\\t\\t\\t})\\n\\t\\t\\t.text(function(d) { return d.text; });\\n\\t}\\n\\tfunction updateChart() {\\n\\t\\tlayout.spiral(self.spiral);\\n\\t}\\n\\treturn {\\n\\t\\tdomNode: svgElement[0][0],\\n\\t\\tupdateChart: updateChart\\n\\t};\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nCloudWidget.prototype.execute = function() {\\n\\t// Get the parameters from the attributes\\n\\tthis.cloudData = this.getAttribute(\\\"data\\\");\\n\\tthis.cloudSpiral = this.getAttribute(\\\"spiral\\\",\\\"archimedean\\\");\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nCloudWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.data || changedTiddlers[this.cloudData]) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else if(changedAttributes.spiral) {\\n\\t\\tthis.execute();\\n\\t\\tif(this.updateChart) {\\n\\t\\t\\tthis.updateChart();\\n\\t\\t}\\n\\t\\treturn true;\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.d3cloud = CloudWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/d3/d3.js\": {\n \"text\": \"var d3;if($tw.browser){\\nd3=function(){function n(n){return null!=n&&!isNaN(n)}function t(n){return n.length}function e(n){for(var t=1;n*t%1;)t*=10;return t}function r(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function i(){}function u(){}function a(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function o(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=Na.length;r>e;++e){var i=Na[e]+t;if(i in n)return i}}function c(n){for(var t=-1,e=n.length,r=[];++t<e;)r.push(n[t]);return r}function l(n){return Array.prototype.slice.call(n)}function s(){}function f(){}function h(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new i;return t.on=function(t,i){var u,a=r.get(t);return arguments.length<2?a&&a.on:(a&&(a.on=null,e=e.slice(0,u=e.indexOf(a)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function g(){da.event.preventDefault()}function p(){for(var n,t=da.event;n=t.sourceEvent;)t=n;return t}function d(n){for(var t=new f,e=0,r=arguments.length;++e<r;)t[arguments[e]]=h(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=da.event;i.target=n,da.event=i,t[i.type].apply(e,r)}finally{da.event=u}}},t}function m(n){return za(n,Fa),n}function v(n){return\\\"function\\\"==typeof n?n:function(){return Da(n,this)}}function y(n){return\\\"function\\\"==typeof n?n:function(){return ja(n,this)}}function M(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=da.ns.qualify(n),null==t?n.local?r:e:\\\"function\\\"==typeof t?n.local?o:a:n.local?u:i}function x(n){return n.trim().replace(/\\\\s+/g,\\\" \\\")}function b(n){return new RegExp(\\\"(?:^|\\\\\\\\s+)\\\"+da.requote(n)+\\\"(?:\\\\\\\\s+|$)\\\",\\\"g\\\")}function _(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=n.trim().split(/\\\\s+/).map(w);var i=n.length;return\\\"function\\\"==typeof t?r:e}function w(n){var t=b(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute(\\\"class\\\")||\\\"\\\";r?(t.lastIndex=0,t.test(i)||e.setAttribute(\\\"class\\\",x(i+\\\" \\\"+n))):e.setAttribute(\\\"class\\\",x(i.replace(t,\\\" \\\")))}}function S(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:\\\"function\\\"==typeof t?u:i}function E(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:\\\"function\\\"==typeof t?i:r}function k(n){return\\\"function\\\"==typeof n?n:(n=da.ns.qualify(n)).local?function(){return ma.createElementNS(n.space,n.local)}:function(){return ma.createElementNS(this.namespaceURI,n)}}function A(n){return{__data__:n}}function N(n){return function(){return Ha(this,n)}}function q(n){return arguments.length||(n=da.ascending),function(t,e){return!t-!e||n(t.__data__,e.__data__)}}function T(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],a=0,o=u.length;o>a;a++)(i=u[a])&&t(i,a,e);return n}function C(n){return za(n,Oa),n}function z(n){var t,e;return function(r,i,u){var a,o=n[u].update,c=o.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(a=o[t])&&++t<c;);return a}}function D(n,t,e){function r(){var t=this[a];t&&(this.removeEventListener(n,t,t.$),delete this[a])}function i(){var i=c(t,qa(arguments));r.call(this),this.addEventListener(n,this[a]=i,i.$=e),i._=t}function u(){var t,e=new RegExp(\\\"^__on([^.]+)\\\"+da.requote(n)+\\\"$\\\");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var a=\\\"__on\\\"+n,o=n.indexOf(\\\".\\\"),c=j;o>0&&(n=n.substring(0,o));var l=Ra.get(n);return l&&(n=l,c=L),o?t?i:r:t?s:u}function j(n,t){return function(e){var r=da.event;da.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{da.event=r}}}function L(n,t){var e=j(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function H(){var n=\\\".dragsuppress-\\\"+ ++Ia,t=\\\"touchmove\\\"+n,e=\\\"selectstart\\\"+n,r=\\\"dragstart\\\"+n,i=\\\"click\\\"+n,u=da.select(ya).on(t,g).on(e,g).on(r,g),a=va.style,o=a[Ua];return a[Ua]=\\\"none\\\",function(t){function e(){u.on(i,null)}u.on(n,null),a[Ua]=o,t&&(u.on(i,function(){g(),e()},!0),setTimeout(e,0))}}function F(n,t){var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>Va&&(ya.scrollX||ya.scrollY)){e=da.select(\\\"body\\\").append(\\\"svg\\\").style({position:\\\"absolute\\\",top:0,left:0,margin:0,padding:0,border:\\\"none\\\"},\\\"important\\\");var i=e[0][0].getScreenCTM();Va=!(i.f||i.e),e.remove()}return Va?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var u=n.getBoundingClientRect();return[t.clientX-u.left-n.clientLeft,t.clientY-u.top-n.clientTop]}function P(){}function O(n,t,e){return new Y(n,t,e)}function Y(n,t,e){this.h=n,this.s=t,this.l=e}function R(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(a-u)*n/60:180>n?a:240>n?u+(a-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,a;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,a=.5>=e?e*(1+t):e+t-e*t,u=2*e-a,it(i(n+120),i(n),i(n-120))}function U(n){return n>0?1:0>n?-1:0}function I(n){return n>1?0:-1>n?Wa:Math.acos(n)}function V(n){return n>1?Wa/2:-1>n?-Wa/2:Math.asin(n)}function X(n){return(Math.exp(n)-Math.exp(-n))/2}function Z(n){return(Math.exp(n)+Math.exp(-n))/2}function B(n){return(n=Math.sin(n/2))*n}function $(n,t,e){return new W(n,t,e)}function W(n,t,e){this.h=n,this.c=t,this.l=e}function J(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),G(e,Math.cos(n*=Ka)*t,Math.sin(n)*t)}function G(n,t,e){return new K(n,t,e)}function K(n,t,e){this.l=n,this.a=t,this.b=e}function Q(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=tt(i)*eo,r=tt(r)*ro,u=tt(u)*io,it(rt(3.2404542*i-1.5371385*r-.4985314*u),rt(-.969266*i+1.8760108*r+.041556*u),rt(.0556434*i-.2040259*r+1.0572252*u))}function nt(n,t,e){return n>0?$(Math.atan2(e,t)*Qa,Math.sqrt(t*t+e*e),n):$(0/0,0/0,n)}function tt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function et(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function rt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function it(n,t,e){return new ut(n,t,e)}function ut(n,t,e){this.r=n,this.g=t,this.b=e}function at(n){return 16>n?\\\"0\\\"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function ot(n,t,e){var r,i,u,a=0,o=0,c=0;if(r=/([a-z]+)\\\\((.*)\\\\)/i.exec(n))switch(i=r[2].split(\\\",\\\"),r[1]){case\\\"hsl\\\":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case\\\"rgb\\\":return t(ft(i[0]),ft(i[1]),ft(i[2]))}return(u=oo.get(n))?t(u.r,u.g,u.b):(null!=n&&\\\"#\\\"===n.charAt(0)&&(4===n.length?(a=n.charAt(1),a+=a,o=n.charAt(2),o+=o,c=n.charAt(3),c+=c):7===n.length&&(a=n.substring(1,3),o=n.substring(3,5),c=n.substring(5,7)),a=parseInt(a,16),o=parseInt(o,16),c=parseInt(c,16)),t(a,o,c))}function ct(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),a=Math.max(n,t,e),o=a-u,c=(a+u)/2;return o?(i=.5>c?o/(a+u):o/(2-a-u),r=n==a?(t-e)/o+(e>t?6:0):t==a?(e-n)/o+2:(n-t)/o+4,r*=60):(r=0/0,i=c>0&&1>c?0:r),O(r,i,c)}function lt(n,t,e){n=st(n),t=st(t),e=st(e);var r=et((.4124564*n+.3575761*t+.1804375*e)/eo),i=et((.2126729*n+.7151522*t+.072175*e)/ro),u=et((.0193339*n+.119192*t+.9503041*e)/io);return G(116*i-16,500*(r-i),200*(i-u))}function st(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function ft(n){var t=parseFloat(n);return\\\"%\\\"===n.charAt(n.length-1)?Math.round(2.55*t):t}function ht(n){return\\\"function\\\"==typeof n?n:function(){return n}}function gt(n){return n}function pt(n){return function(t,e,r){return 2===arguments.length&&\\\"function\\\"==typeof e&&(r=e,e=null),dt(t,e,n,r)}}function dt(n,t,e,r){function i(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(u,c)}catch(r){return a.error.call(u,r),void 0}a.load.call(u,n)}else a.error.call(u,c)}var u={},a=da.dispatch(\\\"progress\\\",\\\"load\\\",\\\"error\\\"),o={},c=new XMLHttpRequest,l=null;return!ya.XDomainRequest||\\\"withCredentials\\\"in c||!/^(http(s)?:)?\\\\/\\\\//.test(n)||(c=new XDomainRequest),\\\"onload\\\"in c?c.onload=c.onerror=i:c.onreadystatechange=function(){c.readyState>3&&i()},c.onprogress=function(n){var t=da.event;da.event=n;try{a.progress.call(u,c)}finally{da.event=t}},u.header=function(n,t){return n=(n+\\\"\\\").toLowerCase(),arguments.length<2?o[n]:(null==t?delete o[n]:o[n]=t+\\\"\\\",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+\\\"\\\",u):t},u.responseType=function(n){return arguments.length?(l=n,u):l},u.response=function(n){return e=n,u},[\\\"get\\\",\\\"post\\\"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(qa(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&\\\"function\\\"==typeof r&&(i=r,r=null),c.open(e,n,!0),null==t||\\\"accept\\\"in o||(o.accept=t+\\\",*/*\\\"),c.setRequestHeader)for(var a in o)c.setRequestHeader(a,o[a]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=i&&u.on(\\\"error\\\",i).on(\\\"load\\\",function(n){i(null,n)}),c.send(null==r?null:r),u},u.abort=function(){return c.abort(),u},da.rebind(u,a,\\\"on\\\"),null==r?u:u.get(mt(r))}function mt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function vt(){var n=yt(),t=Mt()-n;t>24?(isFinite(t)&&(clearTimeout(fo),fo=setTimeout(vt,t)),so=0):(so=1,ho(vt))}function yt(){for(var n=Date.now(),t=co;t;)n>=t.time&&(t.flush=t.callback(n-t.time)),t=t.next;return n}function Mt(){for(var n,t=co,e=1/0;t;)t.flush?t=n?n.next=t.next:co=t.next:(t.time<e&&(e=t.time),t=(n=t).next);return lo=n,e}function xt(n,t){var e=Math.pow(10,3*Math.abs(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function bt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function _t(n){return n+\\\"\\\"}function wt(){}function St(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function Et(n,t){n&&Eo.hasOwnProperty(n.type)&&Eo[n.type](n,t)}function kt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1]);t.lineEnd()}function At(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)kt(n[e],t,1);t.polygonEnd()}function Nt(){function n(n,t){n*=Ka,t=t*Ka/2+Wa/4;var e=n-r,a=Math.cos(t),o=Math.sin(t),c=u*o,l=i*a+c*Math.cos(e),s=c*Math.sin(e);Ao.add(Math.atan2(s,l)),r=n,i=a,u=o}var t,e,r,i,u;No.point=function(a,o){No.point=n,r=(t=a)*Ka,i=Math.cos(o=(e=o)*Ka/2+Wa/4),u=Math.sin(o)},No.lineEnd=function(){n(t,e)}}function qt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function Tt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function Ct(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function zt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function Dt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function jt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function Lt(n){return[Math.atan2(n[1],n[0]),V(n[2])]}function Ht(n,t){return Math.abs(n[0]-t[0])<Ja&&Math.abs(n[1]-t[1])<Ja}function Ft(n,t){n*=Ka;var e=Math.cos(t*=Ka);Pt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function Pt(n,t,e){++qo,Co+=(n-Co)/qo,zo+=(t-zo)/qo,Do+=(e-Do)/qo}function Ot(){function n(n,i){n*=Ka;var u=Math.cos(i*=Ka),a=u*Math.cos(n),o=u*Math.sin(n),c=Math.sin(i),l=Math.atan2(Math.sqrt((l=e*c-r*o)*l+(l=r*a-t*c)*l+(l=t*o-e*a)*l),t*a+e*o+r*c);To+=l,jo+=l*(t+(t=a)),Lo+=l*(e+(e=o)),Ho+=l*(r+(r=c)),Pt(t,e,r)}var t,e,r;Yo.point=function(i,u){i*=Ka;var a=Math.cos(u*=Ka);t=a*Math.cos(i),e=a*Math.sin(i),r=Math.sin(u),Yo.point=n,Pt(t,e,r)}}function Yt(){Yo.point=Ft}function Rt(){function n(n,t){n*=Ka;var e=Math.cos(t*=Ka),a=e*Math.cos(n),o=e*Math.sin(n),c=Math.sin(t),l=i*c-u*o,s=u*a-r*c,f=r*o-i*a,h=Math.sqrt(l*l+s*s+f*f),g=r*a+i*o+u*c,p=h&&-I(g)/h,d=Math.atan2(h,g);Fo+=p*l,Po+=p*s,Oo+=p*f,To+=d,jo+=d*(r+(r=a)),Lo+=d*(i+(i=o)),Ho+=d*(u+(u=c)),Pt(r,i,u)}var t,e,r,i,u;Yo.point=function(a,o){t=a,e=o,Yo.point=n,a*=Ka;var c=Math.cos(o*=Ka);r=c*Math.cos(a),i=c*Math.sin(a),u=Math.sin(o),Pt(r,i,u)},Yo.lineEnd=function(){n(t,e),Yo.lineEnd=Yt,Yo.point=Ft}}function Ut(){return!0}function It(n,t,e,r,i){var u=[],a=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(Ht(e,r)){i.lineStart();for(var o=0;t>o;++o)i.point((e=n[o])[0],e[1]);return i.lineEnd(),void 0}var c={point:e,points:n,other:null,visited:!1,entry:!0,subject:!0},l={point:e,points:[e],other:c,visited:!1,entry:!1,subject:!1};c.other=l,u.push(c),a.push(l),c={point:r,points:[r],other:null,visited:!1,entry:!1,subject:!0},l={point:r,points:[r],other:c,visited:!1,entry:!0,subject:!1},c.other=l,u.push(c),a.push(l)}}),a.sort(t),Vt(u),Vt(a),u.length){if(e)for(var o=1,c=!e(a[0].point),l=a.length;l>o;++o)a[o].entry=c=!c;for(var s,f,h,g=u[0];;){for(s=g;s.visited;)if((s=s.next)===g)return;f=s.points,i.lineStart();do{if(s.visited=s.other.visited=!0,s.entry){if(s.subject)for(var o=0;o<f.length;o++)i.point((h=f[o])[0],h[1]);else r(s.point,s.next.point,1,i);s=s.next}else{if(s.subject){f=s.prev.points;for(var o=f.length;--o>=0;)i.point((h=f[o])[0],h[1])}else r(s.point,s.prev.point,-1,i);s=s.prev}s=s.other,f=s.points}while(!s.visited);i.lineEnd()}}}function Vt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.next=e=n[r],e.prev=i,i=e;i.next=e=n[0],e.prev=i}}function Xt(n,t,e,r){return function(i){function u(t,e){n(t,e)&&i.point(t,e)}function a(n,t){d.point(n,t)}function o(){m.point=a,d.lineStart()}function c(){m.point=u,d.lineEnd()}function l(n,t){y.point(n,t),p.push([n,t])}function s(){y.lineStart(),p=[]}function f(){l(p[0][0],p[0][1]),y.lineEnd();var n,t=y.clean(),e=v.buffer(),r=e.length;if(p.pop(),g.push(p),p=null,r){if(1&t){n=e[0];var u,r=n.length-1,a=-1;for(i.lineStart();++a<r;)i.point((u=n[a])[0],u[1]);return i.lineEnd(),void 0}r>1&&2&t&&e.push(e.pop().concat(e.shift())),h.push(e.filter(Zt))}}var h,g,p,d=t(i),m={point:u,lineStart:o,lineEnd:c,polygonStart:function(){m.point=l,m.lineStart=s,m.lineEnd=f,h=[],g=[],i.polygonStart()},polygonEnd:function(){m.point=u,m.lineStart=o,m.lineEnd=c,h=da.merge(h),h.length?It(h,$t,null,e,i):r(g)&&(i.lineStart(),e(null,null,1,i),i.lineEnd()),i.polygonEnd(),h=g=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},v=Bt(),y=t(v);return m}}function Zt(n){return n.length>1}function Bt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:s,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function $t(n,t){return((n=n.point)[0]<0?n[1]-Wa/2-Ja:Wa/2-n[1])-((t=t.point)[0]<0?t[1]-Wa/2-Ja:Wa/2-t[1])}function Wt(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,a=!1,o=!1,c=0;Ao.reset();for(var l=0,s=t.length;s>l;++l){var f=t[l],h=f.length;if(h){for(var g=f[0],p=g[0],d=g[1]/2+Wa/4,m=Math.sin(d),v=Math.cos(d),y=1;;){y===h&&(y=0),n=f[y];var M=n[0],x=n[1]/2+Wa/4,b=Math.sin(x),_=Math.cos(x),w=M-p,S=Math.abs(w)>Wa,E=m*b;if(Ao.add(Math.atan2(E*Math.sin(w),v*_+E*Math.cos(w))),Math.abs(x)<Ja&&(o=!0),u+=S?w+(w>=0?2:-2)*Wa:w,S^p>=e^M>=e){var k=Ct(qt(g),qt(n));jt(k);var A=Ct(i,k);jt(A);var N=(S^w>=0?-1:1)*V(A[2]);r>N&&(c+=S^w>=0?1:-1)}if(!y++)break;p=M,m=b,v=_,g=n}Math.abs(u)>Ja&&(a=!0)}}return(!o&&!a&&0>Ao||-Ja>u)^1&c}function Jt(n){var t,e=0/0,r=0/0,i=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(u,a){var o=u>0?Wa:-Wa,c=Math.abs(u-e);Math.abs(c-Wa)<Ja?(n.point(e,r=(r+a)/2>0?Wa/2:-Wa/2),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(o,r),n.point(u,r),t=0):i!==o&&c>=Wa&&(Math.abs(e-i)<Ja&&(e-=i*Ja),Math.abs(u-o)<Ja&&(u-=o*Ja),r=Gt(e,r,u,a),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(o,r),t=0),n.point(e=u,r=a),i=o},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function Gt(n,t,e,r){var i,u,a=Math.sin(n-e);return Math.abs(a)>Ja?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*a)):(t+r)/2}function Kt(n,t,e,r){var i;if(null==n)i=e*Wa/2,r.point(-Wa,i),r.point(0,i),r.point(Wa,i),r.point(Wa,0),r.point(Wa,-i),r.point(0,-i),r.point(-Wa,-i),r.point(-Wa,0),r.point(-Wa,i);else if(Math.abs(n[0]-t[0])>Ja){var u=(n[0]<t[0]?1:-1)*Wa;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Qt(n){return Wt(Uo,n)}function ne(n){function t(n,t){return Math.cos(n)*Math.cos(t)>a}function e(n){var e,u,a,c,s;return{lineStart:function(){c=a=!1,s=1},point:function(f,h){var g,p=[f,h],d=t(f,h),m=o?d?0:i(f,h):d?i(f+(0>f?Wa:-Wa),h):0;if(!e&&(c=a=d)&&n.lineStart(),d!==a&&(g=r(e,p),(Ht(e,g)||Ht(p,g))&&(p[0]+=Ja,p[1]+=Ja,d=t(p[0],p[1]))),d!==a)s=0,d?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(l&&e&&o^d){var v;m&u||!(v=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(v[0][0],v[0][1]),n.point(v[1][0],v[1][1]),n.lineEnd()):(n.point(v[1][0],v[1][1]),n.lineEnd(),n.lineStart(),n.point(v[0][0],v[0][1])))}!d||e&&Ht(e,p)||n.point(p[0],p[1]),e=p,a=d,u=m},lineEnd:function(){a&&n.lineEnd(),e=null},clean:function(){return s|(c&&a)<<1}}}function r(n,t,e){var r=qt(n),i=qt(t),u=[1,0,0],o=Ct(r,i),c=Tt(o,o),l=o[0],s=c-l*l;if(!s)return!e&&n;var f=a*c/s,h=-a*l/s,g=Ct(u,o),p=Dt(u,f),d=Dt(o,h);zt(p,d);var m=g,v=Tt(p,m),y=Tt(m,m),M=v*v-y*(Tt(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=Dt(m,(-v-x)/y);if(zt(b,p),b=Lt(b),!e)return b;var _,w=n[0],S=t[0],E=n[1],k=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=Math.abs(A-Wa)<Ja,q=N||Ja>A;if(!N&&E>k&&(_=E,E=k,k=_),q?N?E+k>0^b[1]<(Math.abs(b[0]-w)<Ja?E:k):E<=b[1]&&b[1]<=k:A>Wa^(w<=b[0]&&b[0]<=S)){var T=Dt(m,(-v+x)/y);return zt(T,p),[b,Lt(T)]}}}function i(t,e){var r=o?n:Wa-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}function u(n){return Wt(c,n)}var a=Math.cos(n),o=a>0,c=[n,0],l=Math.abs(a)>Ja,s=Ee(n,6*Ka);return Xt(t,e,s,u)}function te(n,t,e,r){function i(r,i){return Math.abs(r[0]-n)<Ja?i>0?0:3:Math.abs(r[0]-e)<Ja?i>0?2:1:Math.abs(r[1]-t)<Ja?i>0?1:0:i>0?3:2}function u(n,t){return a(n.point,t.point)}function a(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}function o(i,u){var a=u[0]-i[0],o=u[1]-i[1],c=[0,1];return Math.abs(a)<Ja&&Math.abs(o)<Ja?n<=i[0]&&i[0]<=e&&t<=i[1]&&i[1]<=r:ee(n-i[0],a,c)&&ee(i[0]-e,-a,c)&&ee(t-i[1],o,c)&&ee(i[1]-r,-o,c)?(c[1]<1&&(u[0]=i[0]+c[1]*a,u[1]=i[1]+c[1]*o),c[0]>0&&(i[0]+=c[0]*a,i[1]+=c[0]*o),!0):!1}return function(c){function l(u){var a=i(u,-1),o=s([0===a||3===a?n:e,a>1?r:t]);return o}function s(n){for(var t=0,e=M.length,r=n[1],i=0;e>i;++i)for(var u,a=1,o=M[i],c=o.length,l=o[0];c>a;++a)u=o[a],l[1]<=r?u[1]>r&&f(l,u,n)>0&&++t:u[1]<=r&&f(l,u,n)<0&&--t,l=u;return 0!==t}function f(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(e[0]-n[0])*(t[1]-n[1])}function h(u,o,c,l){var s=0,f=0;if(null==u||(s=i(u,c))!==(f=i(o,c))||a(u,o)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(o[0],o[1])}function g(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function p(n,t){g(n,t)&&c.point(n,t)}function d(){T.point=v,M&&M.push(x=[]),A=!0,k=!1,S=E=0/0}function m(){y&&(v(b,_),w&&k&&q.rejoin(),y.push(q.buffer())),T.point=p,k&&c.lineEnd()}function v(n,t){n=Math.max(-Io,Math.min(Io,n)),t=Math.max(-Io,Math.min(Io,t));var e=g(n,t);if(M&&x.push([n,t]),A)b=n,_=t,w=e,A=!1,e&&(c.lineStart(),c.point(n,t));else if(e&&k)c.point(n,t);else{var r=[S,E],i=[n,t];o(r,i)?(k||(c.lineStart(),c.point(r[0],r[1])),c.point(i[0],i[1]),e||c.lineEnd()):e&&(c.lineStart(),c.point(n,t))}S=n,E=t,k=e}var y,M,x,b,_,w,S,E,k,A,N=c,q=Bt(),T={point:p,lineStart:d,lineEnd:m,polygonStart:function(){c=q,y=[],M=[]},polygonEnd:function(){c=N,(y=da.merge(y)).length?(c.polygonStart(),It(y,u,l,h,c),c.polygonEnd()):s([n,t])&&(c.polygonStart(),c.lineStart(),h(null,null,1,c),c.lineEnd(),c.polygonEnd()),y=M=x=null}};return T}}function ee(n,t,e){if(Math.abs(t)<Ja)return 0>=n;var r=n/t;if(t>0){if(r>e[1])return!1;r>e[0]&&(e[0]=r)}else{if(r<e[0])return!1;r<e[1]&&(e[1]=r)}return!0}function re(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function ie(n){var t=0,e=Wa/3,r=ye(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Wa/180,e=n[1]*Wa/180):[180*(t/Wa),180*(e/Wa)]},i}function ue(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),a-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),a=Math.sqrt(u)/i;return e.invert=function(n,t){var e=a-t;return[Math.atan2(n,e)/i,V((u-(n*n+e*e)*i*i)/(2*i))]},e}function ae(){function n(n,t){Xo+=i*n-r*t,r=n,i=t}var t,e,r,i;Jo.point=function(u,a){Jo.point=n,t=r=u,e=i=a},Jo.lineEnd=function(){n(t,e)}}function oe(n,t){Zo>n&&(Zo=n),n>$o&&($o=n),Bo>t&&(Bo=t),t>Wo&&(Wo=t)}function ce(){function n(n,t){a.push(\\\"M\\\",n,\\\",\\\",t,u)}function t(n,t){a.push(\\\"M\\\",n,\\\",\\\",t),o.point=e}function e(n,t){a.push(\\\"L\\\",n,\\\",\\\",t)}function r(){o.point=n}function i(){a.push(\\\"Z\\\")}var u=le(4.5),a=[],o={point:n,lineStart:function(){o.point=t},lineEnd:r,polygonStart:function(){o.lineEnd=i},polygonEnd:function(){o.lineEnd=r,o.point=n},pointRadius:function(n){return u=le(n),o},result:function(){if(a.length){var n=a.join(\\\"\\\");return a=[],n}}};return o}function le(n){return\\\"m0,\\\"+n+\\\"a\\\"+n+\\\",\\\"+n+\\\" 0 1,1 0,\\\"+-2*n+\\\"a\\\"+n+\\\",\\\"+n+\\\" 0 1,1 0,\\\"+2*n+\\\"z\\\"}function se(n,t){Co+=n,zo+=t,++Do}function fe(){function n(n,r){var i=n-t,u=r-e,a=Math.sqrt(i*i+u*u);jo+=a*(t+n)/2,Lo+=a*(e+r)/2,Ho+=a,se(t=n,e=r)}var t,e;Ko.point=function(r,i){Ko.point=n,se(t=r,e=i)}}function he(){Ko.point=se}function ge(){function n(n,t){var e=n-r,u=t-i,a=Math.sqrt(e*e+u*u);jo+=a*(r+n)/2,Lo+=a*(i+t)/2,Ho+=a,a=i*n-r*t,Fo+=a*(r+n),Po+=a*(i+t),Oo+=3*a,se(r=n,i=t)}var t,e,r,i;Ko.point=function(u,a){Ko.point=n,se(t=r=u,e=i=a)},Ko.lineEnd=function(){n(t,e)}}function pe(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,a,0,2*Wa)}function e(t,e){n.moveTo(t,e),o.point=r}function r(t,e){n.lineTo(t,e)}function i(){o.point=t}function u(){n.closePath()}var a=4.5,o={point:t,lineStart:function(){o.point=e},lineEnd:i,polygonStart:function(){o.lineEnd=u},polygonEnd:function(){o.lineEnd=i,o.point=t},pointRadius:function(n){return a=n,o},result:s};return o}function de(n){function t(t){function r(e,r){e=n(e,r),t.point(e[0],e[1])}function i(){M=0/0,S.point=a,t.lineStart()}function a(r,i){var a=qt([r,i]),o=n(r,i);e(M,x,y,b,_,w,M=o[0],x=o[1],y=r,b=a[0],_=a[1],w=a[2],u,t),t.point(M,x)}function o(){S.point=r,t.lineEnd()}function c(){i(),S.point=l,S.lineEnd=s}function l(n,t){a(f=n,h=t),g=M,p=x,d=b,m=_,v=w,S.point=a}function s(){e(M,x,y,b,_,w,g,p,f,d,m,v,u,t),S.lineEnd=o,o()}var f,h,g,p,d,m,v,y,M,x,b,_,w,S={point:r,lineStart:i,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=i}};return S}function e(t,u,a,o,c,l,s,f,h,g,p,d,m,v){var y=s-t,M=f-u,x=y*y+M*M;if(x>4*r&&m--){var b=o+g,_=c+p,w=l+d,S=Math.sqrt(b*b+_*_+w*w),E=Math.asin(w/=S),k=Math.abs(Math.abs(w)-1)<Ja?(a+h)/2:Math.atan2(_,b),A=n(k,E),N=A[0],q=A[1],T=N-t,C=q-u,z=M*T-y*C;(z*z/x>r||Math.abs((y*T+M*C)/x-.5)>.3||i>o*g+c*p+l*d)&&(e(t,u,a,o,c,l,N,q,k,b/=S,_/=S,w,m,v),v.point(N,q),e(N,q,k,b,_,w,s,f,h,g,p,d,m,v))}}var r=.5,i=Math.cos(30*Ka),u=16;return t.precision=function(n){return arguments.length?(u=(r=n*n)>0&&16,t):Math.sqrt(r)},t}function me(n){var t=de(function(t,e){return n([t*Qa,e*Qa])});return function(n){return n=t(n),{point:function(t,e){n.point(t*Ka,e*Ka)},sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}}function ve(n){return ye(function(){return n})()}function ye(n){function t(n){return n=o(n[0]*Ka,n[1]*Ka),[n[0]*h+c,l-n[1]*h]}function e(n){return n=o.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Qa,n[1]*Qa]}function r(){o=re(a=be(v,y,M),u);var n=u(d,m);return c=g-n[0]*h,l=p+n[1]*h,i()}function i(){return s&&(s.valid=!1,s=null),t}var u,a,o,c,l,s,f=de(function(n,t){return n=u(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,d=0,m=0,v=0,y=0,M=0,x=Ro,b=gt,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=Me(a,x(f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Ro):ne((_=+n)*Ka),i()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=null==n?gt:te(n[0][0],n[0][1],n[1][0],n[1][1]),i()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(d=n[0]%360*Ka,m=n[1]%360*Ka,r()):[d*Qa,m*Qa]},t.rotate=function(n){return arguments.length?(v=n[0]%360*Ka,y=n[1]%360*Ka,M=n.length>2?n[2]%360*Ka:0,r()):[v*Qa,y*Qa,M*Qa]},da.rebind(t,f,\\\"precision\\\"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function Me(n,t){return{point:function(e,r){r=n(e*Ka,r*Ka),e=r[0],t.point(e>Wa?e-2*Wa:-Wa>e?e+2*Wa:e,r[1])},sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function xe(n,t){return[n,t]}function be(n,t,e){return n?t||e?re(we(n),Se(t,e)):we(n):t||e?Se(t,e):xe}function _e(n){return function(t,e){return t+=n,[t>Wa?t-2*Wa:-Wa>t?t+2*Wa:t,e]}}function we(n){var t=_e(n);return t.invert=_e(-n),t}function Se(n,t){function e(n,t){var e=Math.cos(t),o=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+o*i;return[Math.atan2(c*u-s*a,o*r-l*i),V(s*u+c*a)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),a=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),o=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*u-c*a;return[Math.atan2(c*u+l*a,o*r+s*i),V(s*r-o*i)]},e}function Ee(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,a,o){null!=i?(i=ke(e,i),u=ke(e,u),(a>0?u>i:i>u)&&(i+=2*a*Wa)):(i=n+2*a*Wa,u=n);for(var c,l=a*t,s=i;a>0?s>u:u>s;s-=l)o.point((c=Lt([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],c[1])}}function ke(n,t){var e=qt(t);e[0]-=n,jt(e);var r=I(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ja)%(2*Math.PI)}function Ae(n,t,e){var r=da.range(n,t-Ja,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function Ne(n,t,e){var r=da.range(n,t-Ja,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function qe(n){return n.source}function Te(n){return n.target}function Ce(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),a=Math.cos(r),o=Math.sin(r),c=i*Math.cos(n),l=i*Math.sin(n),s=a*Math.cos(e),f=a*Math.sin(e),h=2*Math.asin(Math.sqrt(B(r-t)+i*a*B(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,i=e*l+t*f,a=e*u+t*o;return[Math.atan2(i,r)*Qa,Math.atan2(a,Math.sqrt(r*r+i*i))*Qa]}:function(){return[n*Qa,t*Qa]};return p.distance=h,p}function ze(){function n(n,i){var u=Math.sin(i*=Ka),a=Math.cos(i),o=Math.abs((n*=Ka)-t),c=Math.cos(o);Qo+=Math.atan2(Math.sqrt((o=a*Math.sin(o))*o+(o=r*u-e*a*c)*o),e*u+r*a*c),t=n,e=u,r=a}var t,e,r;nc.point=function(i,u){t=i*Ka,e=Math.sin(u*=Ka),r=Math.cos(u),nc.point=n},nc.lineEnd=function(){nc.point=nc.lineEnd=s}}function De(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),a=Math.cos(i);return[Math.atan2(n*u,r*a),Math.asin(r&&e*u/r)]},e}function je(n,t){function e(n,t){var e=Math.abs(Math.abs(t)-Wa/2)<Ja?0:a/Math.pow(i(t),u);return[e*Math.sin(u*n),a-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Wa/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),a=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=a-t,r=U(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(a/r,1/u))-Wa/2]},e):He}function Le(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return Math.abs(i)<Ja?xe:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-U(i)*Math.sqrt(n*n+e*e)]},e)}function He(n,t){return[n,Math.log(Math.tan(Wa/4+t/2))]}function Fe(n){var t,e=ve(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var a=u.apply(e,arguments);if(a===e){if(t=null==n){var o=Wa*r(),c=i();u([[c[0]-o,c[1]-o],[c[0]+o,c[1]+o]])}}else t&&(a=null);return a},e.clipExtent(null)}function Pe(n,t){var e=Math.cos(t)*Math.sin(n);return[Math.log((1+e)/(1-e))/2,Math.atan2(Math.tan(t),Math.cos(n))]}function Oe(n){function t(t){function a(){l.push(\\\"M\\\",u(n(s),o))}for(var c,l=[],s=[],f=-1,h=t.length,g=ht(e),p=ht(r);++f<h;)i.call(this,c=t[f],f)?s.push([+g.call(this,c,f),+p.call(this,c,f)]):s.length&&(a(),s=[]);return s.length&&a(),l.length?l.join(\\\"\\\"):null}var e=Ye,r=Re,i=Ut,u=Ue,a=u.key,o=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(a=\\\"function\\\"==typeof n?u=n:(u=ac.get(n)||Ue).key,t):a},t.tension=function(n){return arguments.length?(o=n,t):o},t}function Ye(n){return n[0]}function Re(n){return n[1]}function Ue(n){return n.join(\\\"L\\\")}function Ie(n){return Ue(n)+\\\"Z\\\"}function Ve(n){for(var t=0,e=n.length,r=n[0],i=[r[0],\\\",\\\",r[1]];++t<e;)i.push(\\\"H\\\",(r[0]+(r=n[t])[0])/2,\\\"V\\\",r[1]);return e>1&&i.push(\\\"H\\\",r[0]),i.join(\\\"\\\")}function Xe(n){for(var t=0,e=n.length,r=n[0],i=[r[0],\\\",\\\",r[1]];++t<e;)i.push(\\\"V\\\",(r=n[t])[1],\\\"H\\\",r[0]);return i.join(\\\"\\\")}function Ze(n){for(var t=0,e=n.length,r=n[0],i=[r[0],\\\",\\\",r[1]];++t<e;)i.push(\\\"H\\\",(r=n[t])[0],\\\"V\\\",r[1]);return i.join(\\\"\\\")}function Be(n,t){return n.length<4?Ue(n):n[1]+Je(n.slice(1,n.length-1),Ge(n,t))}function $e(n,t){return n.length<3?Ue(n):n[0]+Je((n.push(n[0]),n),Ge([n[n.length-2]].concat(n,[n[1]]),t))}function We(n,t){return n.length<3?Ue(n):n[0]+Je(n,Ge(n,t))}function Je(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return Ue(n);var e=n.length!=t.length,r=\\\"\\\",i=n[0],u=n[1],a=t[0],o=a,c=1;if(e&&(r+=\\\"Q\\\"+(u[0]-2*a[0]/3)+\\\",\\\"+(u[1]-2*a[1]/3)+\\\",\\\"+u[0]+\\\",\\\"+u[1],i=n[1],c=2),t.length>1){o=t[1],u=n[c],c++,r+=\\\"C\\\"+(i[0]+a[0])+\\\",\\\"+(i[1]+a[1])+\\\",\\\"+(u[0]-o[0])+\\\",\\\"+(u[1]-o[1])+\\\",\\\"+u[0]+\\\",\\\"+u[1];for(var l=2;l<t.length;l++,c++)u=n[c],o=t[l],r+=\\\"S\\\"+(u[0]-o[0])+\\\",\\\"+(u[1]-o[1])+\\\",\\\"+u[0]+\\\",\\\"+u[1]}if(e){var s=n[c];r+=\\\"Q\\\"+(u[0]+2*o[0]/3)+\\\",\\\"+(u[1]+2*o[1]/3)+\\\",\\\"+s[0]+\\\",\\\"+s[1]}return r}function Ge(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],a=n[1],o=1,c=n.length;++o<c;)e=u,u=a,a=n[o],r.push([i*(a[0]-e[0]),i*(a[1]-e[1])]);return r}function Ke(n){if(n.length<3)return Ue(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],a=[i,i,i,(r=n[1])[0]],o=[u,u,u,r[1]],c=[i,\\\",\\\",u,\\\"L\\\",er(lc,a),\\\",\\\",er(lc,o)];for(n.push(n[e-1]);++t<=e;)r=n[t],a.shift(),a.push(r[0]),o.shift(),o.push(r[1]),rr(c,a,o);return n.pop(),c.push(\\\"L\\\",r),c.join(\\\"\\\")}function Qe(n){if(n.length<4)return Ue(n);for(var t,e=[],r=-1,i=n.length,u=[0],a=[0];++r<3;)t=n[r],u.push(t[0]),a.push(t[1]);for(e.push(er(lc,u)+\\\",\\\"+er(lc,a)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),a.shift(),a.push(t[1]),rr(e,u,a);return e.join(\\\"\\\")}function nr(n){for(var t,e,r=-1,i=n.length,u=i+4,a=[],o=[];++r<4;)e=n[r%i],a.push(e[0]),o.push(e[1]);for(t=[er(lc,a),\\\",\\\",er(lc,o)],--r;++r<u;)e=n[r%i],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),rr(t,a,o);return t.join(\\\"\\\")}function tr(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],a=n[0][1],o=n[e][0]-u,c=n[e][1]-a,l=-1;++l<=e;)r=n[l],i=l/e,r[0]=t*r[0]+(1-t)*(u+i*o),r[1]=t*r[1]+(1-t)*(a+i*c);return Ke(n)}function er(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function rr(n,t,e){n.push(\\\"C\\\",er(oc,t),\\\",\\\",er(oc,e),\\\",\\\",er(cc,t),\\\",\\\",er(cc,e),\\\",\\\",er(lc,t),\\\",\\\",er(lc,e))}function ir(n,t){return(t[1]-n[1])/(t[0]-n[0])\\n}function ur(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],a=r[0]=ir(i,u);++t<e;)r[t]=(a+(a=ir(i=u,u=n[t+1])))/2;return r[t]=a,r}function ar(n){for(var t,e,r,i,u=[],a=ur(n),o=-1,c=n.length-1;++o<c;)t=ir(n[o],n[o+1]),Math.abs(t)<1e-6?a[o]=a[o+1]=0:(e=a[o]/t,r=a[o+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),a[o]=i*e,a[o+1]=i*r));for(o=-1;++o<=c;)i=(n[Math.min(c,o+1)][0]-n[Math.max(0,o-1)][0])/(6*(1+a[o]*a[o])),u.push([i||0,a[o]*i||0]);return u}function or(n){return n.length<3?Ue(n):n[0]+Je(n,ar(n))}function cr(n,t,e,r){var i,u,a,o,c,l,s;return i=r[n],u=i[0],a=i[1],i=r[t],o=i[0],c=i[1],i=r[e],l=i[0],s=i[1],(s-a)*(o-u)-(c-a)*(l-u)>0}function lr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function sr(n,t,e,r){var i=n[0],u=e[0],a=t[0]-i,o=r[0]-u,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(o*(c-l)-f*(i-u))/(f*a-o*s);return[i+h*a,c+h*s]}function fr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function hr(n,t){var e={list:n.map(function(n,t){return{index:t,x:n[0],y:n[1]}}).sort(function(n,t){return n.y<t.y?-1:n.y>t.y?1:n.x<t.x?-1:n.x>t.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,\\\"l\\\"),r.rightEnd=r.createHalfEdge(null,\\\"l\\\"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(n,t){return{edge:n,side:t,vertex:null,l:null,r:null}},insert:function(n,t){t.l=n,t.r=n.r,n.r.l=t,n.r=t},leftBound:function(n){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&i.rightOf(t,n));return t=t.l},del:function(n){n.l.r=n.r,n.r.l=n.l,n.edge=null},right:function(n){return n.r},left:function(n){return n.l},leftRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[n.side]},rightRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[fc[n.side]]}},i={bisect:function(n,t){var e={region:{l:n,r:t},ep:{l:null,r:null}},r=t.x-n.x,i=t.y-n.y,u=r>0?r:-r,a=i>0?i:-i;return e.c=n.x*r+n.y*i+.5*(r*r+i*i),u>a?(e.a=1,e.b=i/r,e.c/=r):(e.b=1,e.a=r/i,e.c/=i),e},intersect:function(n,t){var e=n.edge,r=t.edge;if(!e||!r||e.region.r==r.region.r)return null;var i=e.a*r.b-e.b*r.a;if(Math.abs(i)<1e-10)return null;var u,a,o=(e.c*r.b-r.c*e.b)/i,c=(r.c*e.a-e.c*r.a)/i,l=e.region.r,s=r.region.r;l.y<s.y||l.y==s.y&&l.x<s.x?(u=n,a=e):(u=t,a=r);var f=o>=a.region.r.x;return f&&\\\"l\\\"===u.side||!f&&\\\"r\\\"===u.side?null:{x:o,y:c}},rightOf:function(n,t){var e=n.edge,r=e.region.r,i=t.x>r.x;if(i&&\\\"l\\\"===n.side)return 1;if(!i&&\\\"r\\\"===n.side)return 0;if(1===e.a){var u=t.y-r.y,a=t.x-r.x,o=0,c=0;if(!i&&e.b<0||i&&e.b>=0?c=o=u>=e.b*a:(c=t.x+t.y*e.b>e.c,e.b<0&&(c=!c),c||(o=1)),!o){var l=r.x-e.region.l.x;c=e.b*(a*a-u*u)<l*u*(1+2*a/l+e.b*e.b),e.b<0&&(c=!c)}}else{var s=e.c-e.a*t.x,f=t.y-s,h=t.x-r.x,g=s-r.y;c=f*f>h*h+g*g}return\\\"l\\\"===n.side?c:!c},endPoint:function(n,e,r){n.ep[e]=r,n.ep[fc[e]]&&t(n)},distance:function(n,t){var e=n.x-t.x,r=n.y-t.y;return Math.sqrt(e*e+r*r)}},u={list:[],insert:function(n,t,e){n.vertex=t,n.ystar=t.y+e;for(var r=0,i=u.list,a=i.length;a>r;r++){var o=i[r];if(!(n.ystar>o.ystar||n.ystar==o.ystar&&t.x>o.vertex.x))break}i.splice(r,0,n)},del:function(n){for(var t=0,e=u.list,r=e.length;r>t&&e[t]!=n;++t);e.splice(t,1)},empty:function(){return 0===u.list.length},nextEvent:function(n){for(var t=0,e=u.list,r=e.length;r>t;++t)if(e[t]==n)return e[t+1];return null},min:function(){var n=u.list[0];return{x:n.vertex.x,y:n.ystar}},extractMin:function(){return u.list.shift()}};r.init(),e.bottomSite=e.list.shift();for(var a,o,c,l,s,f,h,g,p,d,m,v,y,M=e.list.shift();;)if(u.empty()||(a=u.min()),M&&(u.empty()||M.y<a.y||M.y==a.y&&M.x<a.x))o=r.leftBound(M),c=r.right(o),h=r.rightRegion(o),v=i.bisect(h,M),f=r.createHalfEdge(v,\\\"l\\\"),r.insert(o,f),d=i.intersect(o,f),d&&(u.del(o),u.insert(o,d,i.distance(d,M))),o=f,f=r.createHalfEdge(v,\\\"r\\\"),r.insert(o,f),d=i.intersect(f,c),d&&u.insert(f,d,i.distance(d,M)),M=e.list.shift();else{if(u.empty())break;o=u.extractMin(),l=r.left(o),c=r.right(o),s=r.right(c),h=r.leftRegion(o),g=r.rightRegion(c),m=o.vertex,i.endPoint(o.edge,o.side,m),i.endPoint(c.edge,c.side,m),r.del(o),u.del(c),r.del(c),y=\\\"l\\\",h.y>g.y&&(p=h,h=g,g=p,y=\\\"r\\\"),v=i.bisect(h,g),f=r.createHalfEdge(v,y),r.insert(l,f),i.endPoint(v,fc[y],m),d=i.intersect(l,f),d&&(u.del(l),u.insert(l,d,i.distance(d,h))),d=i.intersect(f,s),d&&u.insert(f,d,i.distance(d,h))}for(o=r.right(r.leftEnd);o!=r.rightEnd;o=r.right(o))t(o.edge)}function gr(n){return n.x}function pr(n){return n.y}function dr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function mr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var a=.5*(e+i),o=.5*(r+u),c=t.nodes;c[0]&&mr(n,c[0],e,r,a,o),c[1]&&mr(n,c[1],a,r,i,o),c[2]&&mr(n,c[2],e,o,a,u),c[3]&&mr(n,c[3],a,o,i,u)}}function vr(n,t){n=da.rgb(n),t=da.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,a=t.g-r,o=t.b-i;return function(t){return n.r=Math.round(e+u*t),n.g=Math.round(r+a*t),n.b=Math.round(i+o*t),n}}function yr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=br(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function Mr(n,t){return t-=n=+n,function(e){return n+t*e}}function xr(n,t){var e,r,i,u,a,o=0,c=0,l=[],s=[];for(n+=\\\"\\\",t+=\\\"\\\",hc.lastIndex=0,r=0;e=hc.exec(t);++r)e.index&&l.push(t.substring(o,c=e.index)),s.push({i:l.length,x:e[0]}),l.push(null),o=hc.lastIndex;for(o<t.length&&l.push(t.substring(o)),r=0,u=s.length;(e=hc.exec(n))&&u>r;++r)if(a=s[r],a.x==e[0]){if(a.i)if(null==l[a.i+1])for(l[a.i-1]+=a.x,l.splice(a.i,1),i=r+1;u>i;++i)s[i].i--;else for(l[a.i-1]+=a.x+l[a.i+1],l.splice(a.i,2),i=r+1;u>i;++i)s[i].i-=2;else if(null==l[a.i+1])l[a.i]=a.x;else for(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1),i=r+1;u>i;++i)s[i].i--;s.splice(r,1),u--,r--}else a.x=Mr(parseFloat(e[0]),parseFloat(a.x));for(;u>r;)a=s.pop(),null==l[a.i+1]?l[a.i]=a.x:(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1)),u--;return 1===l.length?null==l[0]?(a=s[0].x,function(n){return a(n)+\\\"\\\"}):function(){return t}:function(n){for(r=0;u>r;++r)l[(a=s[r]).i]=a.x(n);return l.join(\\\"\\\")}}function br(n,t){for(var e,r=da.interpolators.length;--r>=0&&!(e=da.interpolators[r](n,t)););return e}function _r(n,t){var e,r=[],i=[],u=n.length,a=t.length,o=Math.min(n.length,t.length);for(e=0;o>e;++e)r.push(br(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;a>e;++e)i[e]=t[e];return function(n){for(e=0;o>e;++e)i[e]=r[e](n);return i}}function wr(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function Sr(n){return function(t){return 1-n(1-t)}}function Er(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function kr(n){return n*n}function Ar(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function qr(n){return function(t){return Math.pow(t,n)}}function Tr(n){return 1-Math.cos(n*Wa/2)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Dr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/(2*Wa)*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,10*-r)*Math.sin(2*(r-e)*Wa/t)}}function jr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Lr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Hr(n,t){n=da.hcl(n),t=da.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,a=t.c-r,o=t.l-i;return isNaN(a)&&(a=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(t){return n.h=e+u*t,n.c=r+a*t,n.l=i+o*t,n}}function Fr(n,t){n=da.hsl(n),t=da.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,a=t.s-r,o=t.l-i;return isNaN(a)&&(a=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(t){return n.h=e+u*t,n.s=r+a*t,n.l=i+o*t,n}}function Pr(n,t){n=da.lab(n),t=da.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,a=t.a-r,o=t.b-i;return function(t){return n.l=e+u*t,n.a=r+a*t,n.b=i+o*t,n}}function Or(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Yr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Ur(t),i=Rr(t,e),u=Ur(Ir(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Qa,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Qa:0}function Rr(n,t){return n[0]*t[0]+n[1]*t[1]}function Ur(n){var t=Math.sqrt(Rr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Ir(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Vr(n,t){var e,r=[],i=[],u=da.transform(n),a=da.transform(t),o=u.translate,c=a.translate,l=u.rotate,s=a.rotate,f=u.skew,h=a.skew,g=u.scale,p=a.scale;return o[0]!=c[0]||o[1]!=c[1]?(r.push(\\\"translate(\\\",null,\\\",\\\",null,\\\")\\\"),i.push({i:1,x:Mr(o[0],c[0])},{i:3,x:Mr(o[1],c[1])})):c[0]||c[1]?r.push(\\\"translate(\\\"+c+\\\")\\\"):r.push(\\\"\\\"),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),i.push({i:r.push(r.pop()+\\\"rotate(\\\",null,\\\")\\\")-2,x:Mr(l,s)})):s&&r.push(r.pop()+\\\"rotate(\\\"+s+\\\")\\\"),f!=h?i.push({i:r.push(r.pop()+\\\"skewX(\\\",null,\\\")\\\")-2,x:Mr(f,h)}):h&&r.push(r.pop()+\\\"skewX(\\\"+h+\\\")\\\"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+\\\"scale(\\\",null,\\\",\\\",null,\\\")\\\"),i.push({i:e-4,x:Mr(g[0],p[0])},{i:e-2,x:Mr(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+\\\"scale(\\\"+p+\\\")\\\"),e=i.length,function(n){for(var t,u=-1;++u<e;)r[(t=i[u]).i]=t.x(n);return r.join(\\\"\\\")}}function Xr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Zr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function Br(n){for(var t=n.source,e=n.target,r=Wr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function $r(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Wr(n,t){if(n===t)return n;for(var e=$r(n),r=$r(t),i=e.pop(),u=r.pop(),a=null;i===u;)a=i,i=e.pop(),u=r.pop();return a}function Jr(n){n.fixed|=2}function Gr(n){n.fixed&=-7}function Kr(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Qr(n){n.fixed&=-5}function ni(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,a=n.nodes,o=a.length,c=-1;++c<o;)u=a[c],null!=u&&(ni(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var l=t*e[n.point.index];n.charge+=n.pointCharge=l,r+=l*n.point.x,i+=l*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ti(n,t){return da.rebind(n,t,\\\"sort\\\",\\\"children\\\",\\\"value\\\"),n.nodes=n,n.links=ui,n}function ei(n){return n.children}function ri(n){return n.value}function ii(n,t){return t.value-n.value}function ui(n){return da.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ai(n){return n.x}function oi(n){return n.y}function ci(n,t,e){n.y0=t,n.y=e}function li(n){return da.range(n.length)}function si(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function fi(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function hi(n){return n.reduce(gi,0)}function gi(n,t){return n+t[1]}function pi(n,t){return di(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function di(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function mi(n){return[da.min(n),da.max(n)]}function vi(n,t){return n.parent==t.parent?1:2}function yi(n){var t=n.children;return t&&t.length?t[0]:n._tree.thread}function Mi(n){var t,e=n.children;return e&&(t=e.length)?e[t-1]:n._tree.thread}function xi(n,t){var e=n.children;if(e&&(i=e.length))for(var r,i,u=-1;++u<i;)t(r=xi(e[u],t),n)>0&&(n=r);return n}function bi(n,t){return n.x-t.x}function _i(n,t){return t.x-n.x}function wi(n,t){return n.depth-t.depth}function Si(n,t){function e(n,r){var i=n.children;if(i&&(a=i.length))for(var u,a,o=null,c=-1;++c<a;)u=i[c],e(u,o),o=u;t(n,r)}e(n,null)}function Ei(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u]._tree,t.prelim+=e,t.mod+=e,e+=t.shift+(r+=t.change)}function ki(n,t,e){n=n._tree,t=t._tree;var r=e/(t.number-n.number);n.change+=r,t.change-=r,t.shift+=e,t.prelim+=e,t.mod+=e}function Ai(n,t,e){return n._tree.ancestor.parent==t.parent?n._tree.ancestor:e}function Ni(n,t){return n.value-t.value}function qi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Ti(n,t){n._pack_next=t,t._pack_prev=n}function Ci(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function zi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,i,u,a,o,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(Di),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(i=e[1],i.x=i.r,i.y=0,t(i),l>2))for(u=e[2],Hi(r,i,u),t(u),qi(r,u),r._pack_prev=u,qi(u,i),i=r._pack_next,a=3;l>a;a++){Hi(r,i,u=e[a]);var p=0,d=1,m=1;for(o=i._pack_next;o!==i;o=o._pack_next,d++)if(Ci(o,u)){p=1;break}if(1==p)for(c=r._pack_prev;c!==o._pack_prev&&!Ci(c,u);c=c._pack_prev,m++);p?(m>d||d==m&&i.r<r.r?Ti(r,i=o):Ti(r=c,i),a--):(qi(r,u),i=u,t(u))}var v=(s+f)/2,y=(h+g)/2,M=0;for(a=0;l>a;a++)u=e[a],u.x-=v,u.y-=y,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(ji)}}function Di(n){n._pack_next=n._pack_prev=n}function ji(n){delete n._pack_next,delete n._pack_prev}function Li(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,a=i.length;++u<a;)Li(i[u],t,e,r)}function Hi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var a=t.r+e.r,o=i*i+u*u;a*=a,r*=r;var c=.5+(r-a)/(2*o),l=Math.sqrt(Math.max(0,2*a*(r+o)-(r-=o)*r-a*a))/(2*o);e.x=n.x+c*i+l*u,e.y=n.y+c*u-l*i}else e.x=n.x+r,e.y=n.y}function Fi(n){return 1+da.max(n,function(n){return n.y})}function Pi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Oi(n){var t=n.children;return t&&t.length?Oi(t[0]):n}function Yi(n){var t,e=n.children;return e&&(t=e.length)?Yi(e[t-1]):n}function Ri(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ui(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Ii(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Vi(n){return n.rangeExtent?n.rangeExtent():Ii(n.range())}function Xi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Zi(n,t){var e,r=0,i=n.length-1,u=n[r],a=n[i];return u>a&&(e=r,r=i,i=e,e=u,u=a,a=e),n[r]=t.floor(u),n[i]=t.ceil(a),n}function Bi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:_c}function $i(n,t,e,r){var i=[],u=[],a=0,o=Math.min(n.length,t.length)-1;for(n[o]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++a<=o;)i.push(e(n[a-1],n[a])),u.push(r(t[a-1],t[a]));return function(t){var e=da.bisect(n,t,1,o)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?$i:Xi,c=r?Zr:Xr;return a=i(n,t,c,e),o=i(t,n,c,br),u}function u(n){return a(n)}var a,o;return u.invert=function(n){return o(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Or)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return nu(n,t)},u.tickFormat=function(t,e){return tu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return da.rebind(n,t,\\\"range\\\",\\\"rangeRound\\\",\\\"interpolate\\\",\\\"clamp\\\")}function Gi(n,t){return Zi(n,Bi(t?Qi(n,t)[2]:Ki(n)))}function Ki(n){var t=Ii(n),e=t[1]-t[0];return Math.pow(10,Math.round(Math.log(e)/Math.LN10)-1)}function Qi(n,t){var e=Ii(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function nu(n,t){return da.range.apply(da,Qi(n,t))}function tu(n,t,e){var r=-Math.floor(Math.log(Qi(n,t)[2])/Math.LN10+.01);return da.format(e?e.replace(Mo,function(n,t,e,i,u,a,o,c,l,s){return[t,e,i,u,a,o,c,l||\\\".\\\"+(r-2*(\\\"%\\\"===s)),s].join(\\\"\\\")}):\\\",.\\\"+r+\\\"f\\\")}function eu(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function a(t){return n(i(t))}return a.invert=function(t){return u(n.invert(t))},a.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),a):r},a.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),a):t},a.nice=function(){var t=Zi(r.map(i),e?Math:Sc);return n.domain(t),r=t.map(u),a},a.ticks=function(){var n=Ii(r),a=[];if(n.every(isFinite)){var o=n[0],c=n[1],l=Math.floor(i(o)),s=Math.ceil(i(c)),f=t%1?2:t;if(e){for(;s>l;l++)for(var h=1;f>h;h++)a.push(u(l)*h);a.push(u(l))}else for(a.push(u(l));l++<s;)for(var h=f-1;h>0;h--)a.push(u(l)*h);for(l=0;a[l]<o;l++);for(s=a.length;a[s-1]>c;s--);a=a.slice(l,s)}return a},a.tickFormat=function(n,t){if(!arguments.length)return wc;arguments.length<2?t=wc:\\\"function\\\"!=typeof t&&(t=da.format(t));var r,o=Math.max(.1,n/a.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/u(c(i(n)+r))<=o?t(n):\\\"\\\"}},a.copy=function(){return eu(n.copy(),t,e,r)},Ji(a,n)}function ru(n,t,e){function r(t){return n(i(t))}var i=iu(t),u=iu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return nu(e,n)},r.tickFormat=function(n,t){return tu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(a){return arguments.length?(i=iu(t=a),u=iu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return ru(n.copy(),t,e)},Ji(r,n)}function iu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function uu(n,t){function e(t){return a[((u.get(t)||u.set(t,n.push(t)))-1)%a.length]}function r(t,e){return da.range(n.length).map(function(n){return t+e*n})}var u,a,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new i;for(var a,o=-1,c=r.length;++o<c;)u.has(a=r[o])||u.set(a,n.push(a));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(a=n,o=0,t={t:\\\"range\\\",a:arguments},e):a},e.rangePoints=function(i,u){arguments.length<2&&(u=0);var c=i[0],l=i[1],s=(l-c)/(Math.max(1,n.length-1)+u);return a=r(n.length<2?(c+l)/2:c+s*u/2,s),o=0,t={t:\\\"rangePoints\\\",a:arguments},e},e.rangeBands=function(i,u,c){arguments.length<2&&(u=0),arguments.length<3&&(c=u);var l=i[1]<i[0],s=i[l-0],f=i[1-l],h=(f-s)/(n.length-u+2*c);return a=r(s+h*c,h),l&&a.reverse(),o=h*(1-u),t={t:\\\"rangeBands\\\",a:arguments},e},e.rangeRoundBands=function(i,u,c){arguments.length<2&&(u=0),arguments.length<3&&(c=u);var l=i[1]<i[0],s=i[l-0],f=i[1-l],h=Math.floor((f-s)/(n.length-u+2*c)),g=f-s-(n.length-u)*h;return a=r(s+Math.round(g/2),h),l&&a.reverse(),o=Math.round(h*(1-u)),t={t:\\\"rangeRoundBands\\\",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Ii(t.a[0])},e.copy=function(){return uu(n,t)},e.domain(n)}function au(n,t){function e(){var e=0,u=t.length;for(i=[];++e<u;)i[e-1]=da.quantile(n,e/u);return r}function r(n){return isNaN(n=+n)?void 0:t[da.bisect(i,n)]}var i;return r.domain=function(t){return arguments.length?(n=t.filter(function(n){return!isNaN(n)}).sort(da.ascending),e()):n},r.range=function(n){return arguments.length?(t=n,e()):t},r.quantiles=function(){return i},r.invertExtent=function(e){return e=t.indexOf(e),0>e?[0/0,0/0]:[e>0?i[e-1]:n[0],e<i.length?i[e]:n[n.length-1]]},r.copy=function(){return au(n,t)},e()}function ou(n,t,e){function r(t){return e[Math.max(0,Math.min(a,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),a=e.length-1,r}var u,a;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/u+n,[t,t+1/u]},r.copy=function(){return ou(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[da.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function lu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return nu(n,t)},t.tickFormat=function(t,e){return tu(n,t,e)},t.copy=function(){return lu(n)},t}function su(n){return n.innerRadius}function fu(n){return n.outerRadius}function hu(n){return n.startAngle}function gu(n){return n.endAngle}function pu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]+qc,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function du(n){function t(t){function c(){d.push(\\\"M\\\",o(n(v),f),s,l(n(m.reverse()),f),\\\"Z\\\")}for(var h,g,p,d=[],m=[],v=[],y=-1,M=t.length,x=ht(e),b=ht(i),_=e===r?function(){return g}:ht(r),w=i===u?function(){return p}:ht(u);++y<M;)a.call(this,h=t[y],y)?(m.push([g=+x.call(this,h,y),p=+b.call(this,h,y)]),v.push([+_.call(this,h,y),+w.call(this,h,y)])):m.length&&(c(),m=[],v=[]);return m.length&&c(),d.length?d.join(\\\"\\\"):null}var e=Ye,r=Ye,i=0,u=Re,a=Ut,o=Ue,c=o.key,l=o,s=\\\"L\\\",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(a=n,t):a},t.interpolate=function(n){return arguments.length?(c=\\\"function\\\"==typeof n?o=n:(o=ac.get(n)||Ue).key,l=o.reverse||o,s=o.closed?\\\"M\\\":\\\"L\\\",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function mu(n){return n.radius}function vu(n){return[n.x,n.y]}function yu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+qc;return[e*Math.cos(r),e*Math.sin(r)]}}function Mu(){return 64}function xu(){return\\\"circle\\\"}function bu(n){var t=Math.sqrt(n/Wa);return\\\"M0,\\\"+t+\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 1,1 0,\\\"+-t+\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 1,1 0,\\\"+t+\\\"Z\\\"}function _u(n,t){return za(n,Hc),n.id=t,n}function wu(n,t,e,r){var i=n.id;return T(n,\\\"function\\\"==typeof e?function(n,u,a){n.__transition__[i].tween.set(t,r(e.call(n,n.__data__,u,a)))}:(e=r(e),function(n){n.__transition__[i].tween.set(t,e)}))}function Su(n){return null==n&&(n=\\\"\\\"),function(){this.textContent=n}}function Eu(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),a=u[e];if(!a){var o=r.time;return a=u[e]={tween:new i,time:o,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,da.timer(function(r){function i(r){return u.active>e?l():(u.active=e,a.event&&a.event.start.call(n,s,t),a.tween.forEach(function(e,r){(r=r.call(n,s,t))&&p.push(r)}),c(r)||da.timer(c,0,o),1)}function c(r){if(u.active!==e)return l();for(var i=(r-h)/g,o=f(i),c=p.length;c>0;)p[--c].call(n,o);return i>=1?(l(),a.event&&a.event.end.call(n,s,t),1):void 0}function l(){return--u.count?delete u[e]:delete n.__transition__,1}var s=n.__data__,f=a.ease,h=a.delay,g=a.duration,p=[];return r>=h?i(r):da.timer(i,h,o),1},0,o),a}}function ku(n,t){n.attr(\\\"transform\\\",function(n){return\\\"translate(\\\"+t(n)+\\\",0)\\\"})}function Au(n,t){n.attr(\\\"transform\\\",function(n){return\\\"translate(0,\\\"+t(n)+\\\")\\\"})}function Nu(n,t,e){if(r=[],e&&t.length>1){for(var r,i,u,a=Ii(n.domain()),o=-1,c=t.length,l=(t[1]-t[0])/++e;++o<c;)for(i=e;--i>0;)(u=+t[o]-i*l)>=a[0]&&r.push(u);for(--o,i=0;++i<e&&(u=+t[o]+i*l)<a[1];)r.push(u)}return r}function qu(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Tu(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new Uc(e-1)),1),e}function u(n,e){return t(n=new Uc(+n),e),n}function a(n,r,u){var a=i(n),o=[];if(u>1)for(;r>a;)e(a)%u||o.push(new Date(+a)),t(a,1);else for(;r>a;)o.push(new Date(+a)),t(a,1);return o}function o(n,t,e){try{Uc=qu;var r=new qu;return r._=n,a(r,t,e)}finally{Uc=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=a;var c=n.utc=Cu(n);return c.floor=c,c.round=Cu(r),c.ceil=Cu(i),c.offset=Cu(u),c.range=o,n}function Cu(n){return function(t,e){try{Uc=qu;var r=new qu;return r._=t,n(r,e)._}finally{Uc=Date}}}function zu(n,t,e,r){for(var i,u,a=0,o=t.length,c=e.length;o>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(u=ll[t.charAt(a++)],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function Du(n){return new RegExp(\\\"^(?:\\\"+n.map(da.requote).join(\\\"|\\\")+\\\")\\\",\\\"i\\\")}function ju(n){for(var t=new i,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Lu(n,t,e){var r=0>n?\\\"-\\\":\\\"\\\",i=(r?-n:n)+\\\"\\\",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Hu(n,t,e){nl.lastIndex=0;var r=nl.exec(t.substring(e));return r?(n.w=tl.get(r[0].toLowerCase()),e+r[0].length):-1}function Fu(n,t,e){Kc.lastIndex=0;var r=Kc.exec(t.substring(e));return r?(n.w=Qc.get(r[0].toLowerCase()),e+r[0].length):-1}function Pu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Ou(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function Yu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Ru(n,t,e){il.lastIndex=0;var r=il.exec(t.substring(e));return r?(n.m=ul.get(r[0].toLowerCase()),e+r[0].length):-1}function Uu(n,t,e){el.lastIndex=0;var r=el.exec(t.substring(e));return r?(n.m=rl.get(r[0].toLowerCase()),e+r[0].length):-1}function Iu(n,t,e){return zu(n,cl.c.toString(),t,e)}function Vu(n,t,e){return zu(n,cl.x.toString(),t,e)}function Xu(n,t,e){return zu(n,cl.X.toString(),t,e)}function Zu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Bu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.y=$u(+r[0]),e+r[0].length):-1}function $u(n){return n+(n>68?1900:2e3)}function Wu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Ju(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Gu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Ku(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Qu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function na(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ta(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ea(n,t,e){var r=fl.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}function ra(n){var t=n.getTimezoneOffset(),e=t>0?\\\"-\\\":\\\"+\\\",r=~~(Math.abs(t)/60),i=Math.abs(t)%60;return e+Lu(r,\\\"0\\\",2)+Lu(i,\\\"0\\\",2)}function ia(n,t,e){al.lastIndex=0;var r=al.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function ua(n){return n.toISOString()}function aa(n,t,e){function r(t){return n(t)}return r.invert=function(t){return oa(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(oa)},r.nice=function(n){return r.domain(Zi(r.domain(),n))},r.ticks=function(e,i){var u=Ii(r.domain());if(\\\"function\\\"!=typeof e){var a=u[1]-u[0],o=a/e,c=da.bisect(gl,o);if(c==gl.length)return t.year(u,e);if(!c)return n.ticks(e).map(oa);Math.log(o/gl[c-1])<Math.log(gl[c]/o)&&--c,e=t[c],i=e[1],e=e[0].range}return e(u[0],new Date(+u[1]+1),i)},r.tickFormat=function(){return e},r.copy=function(){return aa(n.copy(),t,e)},Ji(r,n)}function oa(n){return new Date(n)}function ca(n){return function(t){for(var e=n.length-1,r=n[e];!r[1](t);)r=n[--e];return r[0](t)}}function la(n){var t=new Date(n,0,1);return t.setFullYear(n),t}function sa(n){var t=n.getFullYear(),e=la(t),r=la(t+1);return t+(n-e)/(r-e)}function fa(n){var t=new Date(Date.UTC(n,0,1));return t.setUTCFullYear(n),t}function ha(n){var t=n.getUTCFullYear(),e=fa(t),r=fa(t+1);return t+(n-e)/(r-e)}function ga(n){return JSON.parse(n.responseText)}function pa(n){var t=ma.createRange();return t.selectNode(ma.body),t.createContextualFragment(n.responseText)}var da={version:\\\"3.2.6\\\"};Date.now||(Date.now=function(){return+new Date});var ma=document,va=ma.documentElement,ya=window;try{ma.createElement(\\\"div\\\").style.setProperty(\\\"opacity\\\",0,\\\"\\\")}catch(Ma){var xa=ya.Element.prototype,ba=xa.setAttribute,_a=xa.setAttributeNS,wa=ya.CSSStyleDeclaration.prototype,Sa=wa.setProperty;xa.setAttribute=function(n,t){ba.call(this,n,t+\\\"\\\")},xa.setAttributeNS=function(n,t,e){_a.call(this,n,t,e+\\\"\\\")},wa.setProperty=function(n,t,e){Sa.call(this,n,t+\\\"\\\",e)}}da.ascending=function(n,t){return t>n?-1:n>t?1:n>=t?0:0/0},da.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},da.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u&&!(null!=(e=n[i])&&e>=e);)e=void 0;for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u&&!(null!=(e=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},da.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u&&!(null!=(e=n[i])&&e>=e);)e=void 0;for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u&&!(null!=(e=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},da.extent=function(n,t){var e,r,i,u=-1,a=n.length;if(1===arguments.length){for(;++u<a&&!(null!=(e=i=n[u])&&e>=e);)e=i=void 0;for(;++u<a;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<a&&!(null!=(e=i=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<a;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},da.sum=function(n,t){var e,r=0,i=n.length,u=-1;if(1===arguments.length)for(;++u<i;)isNaN(e=+n[u])||(r+=e);else for(;++u<i;)isNaN(e=+t.call(n,n[u],u))||(r+=e);return r},da.mean=function(t,e){var r,i=t.length,u=0,a=-1,o=0;if(1===arguments.length)for(;++a<i;)n(r=t[a])&&(u+=(r-u)/++o);else for(;++a<i;)n(r=e.call(t,t[a],a))&&(u+=(r-u)/++o);return o?u:void 0},da.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},da.median=function(t,e){return arguments.length>1&&(t=t.map(e)),t=t.filter(n),t.length?da.quantile(t.sort(da.ascending),.5):void 0},da.bisector=function(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n.call(t,t[u],u)<e?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;e<n.call(t,t[u],u)?i=u:r=u+1}return r}}};var Ea=da.bisector(function(n){return n});da.bisectLeft=Ea.left,da.bisect=da.bisectRight=Ea.right,da.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},da.permute=function(n,t){for(var e=[],r=-1,i=t.length;++r<i;)e[r]=n[t[r]];return e},da.zip=function(){if(!(i=arguments.length))return[];for(var n=-1,e=da.min(arguments,t),r=new Array(e);++n<e;)for(var i,u=-1,a=r[n]=new Array(i);++u<i;)a[u]=arguments[u][n];return r},da.transpose=function(n){return da.zip.apply(da,n)},da.keys=function(n){var t=[];for(var e in n)t.push(e);return t},da.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},da.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},da.merge=function(n){return Array.prototype.concat.apply([],n)},da.range=function(n,t,r){if(arguments.length<3&&(r=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/r)throw new Error(\\\"infinite range\\\");var i,u=[],a=e(Math.abs(r)),o=-1;if(n*=a,t*=a,r*=a,0>r)for(;(i=n+r*++o)>t;)u.push(i/a);else for(;(i=n+r*++o)<t;)u.push(i/a);return u},da.map=function(n){var t=new i;for(var e in n)t.set(e,n[e]);return t},r(i,{has:function(n){return ka+n in this},get:function(n){return this[ka+n]},set:function(n,t){return this[ka+n]=t},remove:function(n){return n=ka+n,n in this&&delete this[n]},keys:function(){var n=[];return this.forEach(function(t){n.push(t)}),n},values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},forEach:function(n){for(var t in this)t.charCodeAt(0)===Aa&&n.call(this,t.substring(1),this[t])\\n}});var ka=\\\"\\\\0\\\",Aa=ka.charCodeAt(0);da.nest=function(){function n(t,o,c){if(c>=a.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,d=a[c++],m=new i;++g<p;)(h=m.get(l=d(s=o[g])))?h.push(s):m.set(l,[s]);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,c))}):(s={},f=function(e,r){s[e]=n(t,r,c)}),m.forEach(f),s}function t(n,e){if(e>=a.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,u={},a=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(da.map,e,0),0)},u.key=function(n){return a.push(n),u},u.sortKeys=function(n){return o[a.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},da.set=function(n){var t=new u;if(n)for(var e=0;e<n.length;e++)t.add(n[e]);return t},r(u,{has:function(n){return ka+n in this},add:function(n){return this[ka+n]=!0,n},remove:function(n){return n=ka+n,n in this&&delete this[n]},values:function(){var n=[];return this.forEach(function(t){n.push(t)}),n},forEach:function(n){for(var t in this)t.charCodeAt(0)===Aa&&n.call(this,t.substring(1))}}),da.behavior={},da.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=a(n,t,t[e]);return n};var Na=[\\\"webkit\\\",\\\"ms\\\",\\\"moz\\\",\\\"Moz\\\",\\\"o\\\",\\\"O\\\"],qa=l;try{qa(va.childNodes)[0].nodeType}catch(Ta){qa=c}da.dispatch=function(){for(var n=new f,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=h(n);return n},f.prototype.on=function(n,t){var e=n.indexOf(\\\".\\\"),r=\\\"\\\";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},da.event=null,da.requote=function(n){return n.replace(Ca,\\\"\\\\\\\\$&\\\")};var Ca=/[\\\\\\\\\\\\^\\\\$\\\\*\\\\+\\\\?\\\\|\\\\[\\\\]\\\\(\\\\)\\\\.\\\\{\\\\}]/g,za={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},Da=function(n,t){return t.querySelector(n)},ja=function(n,t){return t.querySelectorAll(n)},La=va[o(va,\\\"matchesSelector\\\")],Ha=function(n,t){return La.call(n,t)};\\\"function\\\"==typeof Sizzle&&(Da=function(n,t){return Sizzle(n,t)[0]||null},ja=function(n,t){return Sizzle.uniqueSort(Sizzle(n,t))},Ha=Sizzle.matchesSelector),da.selection=function(){return Ya};var Fa=da.selection.prototype=[];Fa.select=function(n){var t,e,r,i,u=[];n=v(n);for(var a=-1,o=this.length;++a<o;){u.push(t=[]),t.parentNode=(r=this[a]).parentNode;for(var c=-1,l=r.length;++c<l;)(i=r[c])?(t.push(e=n.call(i,i.__data__,c,a)),e&&\\\"__data__\\\"in i&&(e.__data__=i.__data__)):t.push(null)}return m(u)},Fa.selectAll=function(n){var t,e,r=[];n=y(n);for(var i=-1,u=this.length;++i<u;)for(var a=this[i],o=-1,c=a.length;++o<c;)(e=a[o])&&(r.push(t=qa(n.call(e,e.__data__,o,i))),t.parentNode=e);return m(r)};var Pa={svg:\\\"http://www.w3.org/2000/svg\\\",xhtml:\\\"http://www.w3.org/1999/xhtml\\\",xlink:\\\"http://www.w3.org/1999/xlink\\\",xml:\\\"http://www.w3.org/XML/1998/namespace\\\",xmlns:\\\"http://www.w3.org/2000/xmlns/\\\"};da.ns={prefix:Pa,qualify:function(n){var t=n.indexOf(\\\":\\\"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),Pa.hasOwnProperty(e)?{space:Pa[e],local:n}:n}},Fa.attr=function(n,t){if(arguments.length<2){if(\\\"string\\\"==typeof n){var e=this.node();return n=da.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(M(t,n[t]));return this}return this.each(M(n,t))},Fa.classed=function(n,t){if(arguments.length<2){if(\\\"string\\\"==typeof n){var e=this.node(),r=(n=n.trim().split(/^|\\\\s+/g)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute(\\\"class\\\");++i<r;)if(!b(n[i]).test(t))return!1;return!0}for(t in n)this.each(_(t,n[t]));return this}return this.each(_(n,t))},Fa.style=function(n,t,e){var r=arguments.length;if(3>r){if(\\\"string\\\"!=typeof n){2>r&&(t=\\\"\\\");for(e in n)this.each(S(e,n[e],t));return this}if(2>r)return ya.getComputedStyle(this.node(),null).getPropertyValue(n);e=\\\"\\\"}return this.each(S(n,t,e))},Fa.property=function(n,t){if(arguments.length<2){if(\\\"string\\\"==typeof n)return this.node()[n];for(t in n)this.each(E(t,n[t]));return this}return this.each(E(n,t))},Fa.text=function(n){return arguments.length?this.each(\\\"function\\\"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?\\\"\\\":t}:null==n?function(){this.textContent=\\\"\\\"}:function(){this.textContent=n}):this.node().textContent},Fa.html=function(n){return arguments.length?this.each(\\\"function\\\"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?\\\"\\\":t}:null==n?function(){this.innerHTML=\\\"\\\"}:function(){this.innerHTML=n}):this.node().innerHTML},Fa.append=function(n){return n=k(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Fa.insert=function(n,t){return n=k(n),t=v(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments))})},Fa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},Fa.data=function(n,t){function e(n,e){var r,u,a,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),d=new Array(o);if(t){var m,v=new i,y=new i,M=[];for(r=-1;++r<o;)m=t.call(u=n[r],u.__data__,r),v.has(m)?d[r]=u:v.set(m,u),M.push(m);for(r=-1;++r<f;)m=t.call(e,a=e[r],r),(u=v.get(m))?(g[r]=u,u.__data__=a):y.has(m)||(p[r]=A(a)),y.set(m,a),v.remove(m);for(r=-1;++r<o;)v.has(M[r])&&(d[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],a=e[r],u?(u.__data__=a,g[r]=u):p[r]=A(a);for(;f>r;++r)p[r]=A(e[r]);for(;o>r;++r)d[r]=n[r]}p.update=g,p.parentNode=g.parentNode=d.parentNode=n.parentNode,c.push(p),l.push(g),s.push(d)}var r,u,a=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++a<o;)(u=r[a])&&(n[a]=u.__data__);return n}var c=C([]),l=m([]),s=m([]);if(\\\"function\\\"==typeof n)for(;++a<o;)e(r=this[a],n.call(r,r.parentNode.__data__,a));else for(;++a<o;)e(r=this[a],n);return l.enter=function(){return c},l.exit=function(){return s},l},Fa.datum=function(n){return arguments.length?this.property(\\\"__data__\\\",n):this.property(\\\"__data__\\\")},Fa.filter=function(n){var t,e,r,i=[];\\\"function\\\"!=typeof n&&(n=N(n));for(var u=0,a=this.length;a>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var o=0,c=e.length;c>o;o++)(r=e[o])&&n.call(r,r.__data__,o)&&t.push(r)}return m(i)},Fa.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Fa.sort=function(n){n=q.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Fa.each=function(n){return T(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Fa.call=function(n){var t=qa(arguments);return n.apply(t[0]=this,t),this},Fa.empty=function(){return!this.node()},Fa.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Fa.size=function(){var n=0;return this.each(function(){++n}),n};var Oa=[];da.selection.enter=C,da.selection.enter.prototype=Oa,Oa.append=Fa.append,Oa.empty=Fa.empty,Oa.node=Fa.node,Oa.call=Fa.call,Oa.size=Fa.size,Oa.select=function(n){for(var t,e,r,i,u,a=[],o=-1,c=this.length;++o<c;){r=(i=this[o]).update,a.push(t=[]),t.parentNode=i.parentNode;for(var l=-1,s=i.length;++l<s;)(u=i[l])?(t.push(r[l]=e=n.call(i.parentNode,u.__data__,l,o)),e.__data__=u.__data__):t.push(null)}return m(a)},Oa.insert=function(n,t){return arguments.length<2&&(t=z(this)),Fa.insert.call(this,n,t)},Fa.transition=function(){for(var n,t,e=zc||++Fc,r=[],i=Dc||{time:Date.now(),ease:Nr,delay:0,duration:250},u=-1,a=this.length;++u<a;){r.push(n=[]);for(var o=this[u],c=-1,l=o.length;++c<l;)(t=o[c])&&Eu(t,c,e,i),n.push(t)}return _u(r,e)},da.select=function(n){var t=[\\\"string\\\"==typeof n?Da(n,ma):n];return t.parentNode=va,m([t])},da.selectAll=function(n){var t=qa(\\\"string\\\"==typeof n?ja(n,ma):n);return t.parentNode=va,m([t])};var Ya=da.select(va);Fa.on=function(n,t,e){var r=arguments.length;if(3>r){if(\\\"string\\\"!=typeof n){2>r&&(t=!1);for(e in n)this.each(D(e,n[e],t));return this}if(2>r)return(r=this.node()[\\\"__on\\\"+n])&&r._;e=!1}return this.each(D(n,t,e))};var Ra=da.map({mouseenter:\\\"mouseover\\\",mouseleave:\\\"mouseout\\\"});Ra.forEach(function(n){\\\"on\\\"+n in ma&&Ra.remove(n)});var Ua=o(va.style,\\\"userSelect\\\"),Ia=0;da.mouse=function(n){return F(n,p())};var Va=/WebKit/.test(ya.navigator.userAgent)?-1:0;da.touches=function(n,t){return arguments.length<2&&(t=p().touches),t?qa(t).map(function(t){var e=F(n,t);return e.identifier=t.identifier,e}):[]},da.behavior.drag=function(){function n(){this.on(\\\"mousedown.drag\\\",a).on(\\\"touchstart.drag\\\",o)}function t(){return da.event.changedTouches[0].identifier}function e(n,t){return da.touches(n).filter(function(n){return n.identifier===t})[0]}function r(n,t,e,r){return function(){function a(){if(!s)return o();var n=t(s,g),e=n[0]-d[0],r=n[1]-d[1];m|=e|r,d=n,f({type:\\\"drag\\\",x:n[0]+c[0],y:n[1]+c[1],dx:e,dy:r})}function o(){v.on(e+\\\".\\\"+p,null).on(r+\\\".\\\"+p,null),y(m&&da.event.target===h),f({type:\\\"dragend\\\"})}var c,l=this,s=l.parentNode,f=i.of(l,arguments),h=da.event.target,g=n(),p=null==g?\\\"drag\\\":\\\"drag-\\\"+g,d=t(s,g),m=0,v=da.select(ya).on(e+\\\".\\\"+p,a).on(r+\\\".\\\"+p,o),y=H();u?(c=u.apply(l,arguments),c=[c.x-d[0],c.y-d[1]]):c=[0,0],f({type:\\\"dragstart\\\"})}}var i=d(n,\\\"drag\\\",\\\"dragstart\\\",\\\"dragend\\\"),u=null,a=r(s,da.mouse,\\\"mousemove\\\",\\\"mouseup\\\"),o=r(t,e,\\\"touchmove\\\",\\\"touchend\\\");return n.origin=function(t){return arguments.length?(u=t,n):u},da.rebind(n,i,\\\"on\\\")},da.behavior.zoom=function(){function n(){this.on(E,o).on(Ba+\\\".zoom\\\",l).on(k,s).on(\\\"dblclick.zoom\\\",f).on(\\\"touchstart.zoom\\\",c)}function t(n){return[(n[0]-_[0])/w,(n[1]-_[1])/w]}function e(n){return[n[0]*w+_[0],n[1]*w+_[1]]}function r(n){w=Math.max(S[0],Math.min(S[1],n))}function i(n,t){t=e(t),_[0]+=n[0]-t[0],_[1]+=n[1]-t[1]}function u(){y&&y.domain(v.range().map(function(n){return(n-_[0])/w}).map(v.invert)),x&&x.domain(M.range().map(function(n){return(n-_[1])/w}).map(M.invert))}function a(n){u(),n({type:\\\"zoom\\\",scale:w,translate:_})}function o(){function n(){c=1,i(da.mouse(r),f),a(u)}function e(){l.on(k,ya===r?s:null).on(A,null),h(c&&da.event.target===o)}var r=this,u=N.of(r,arguments),o=da.event.target,c=0,l=da.select(ya).on(k,n).on(A,e),f=t(da.mouse(r)),h=H()}function c(){function n(){var n=da.touches(u),t=n[0],e=h[t.identifier];if(c=n[1]){var c,l=h[c.identifier],s=da.event.scale;if(null==s){var f=(f=c[0]-t[0])*f+(f=c[1]-t[1])*f;s=p&&Math.sqrt(f/p)}t=[(t[0]+c[0])/2,(t[1]+c[1])/2],e=[(e[0]+l[0])/2,(e[1]+l[1])/2],r(s*m)}b=null,i(t,e),a(o)}function e(){v.on(f,null).on(d,null),y()}var u=this,o=N.of(u,arguments),c=da.touches(u),l=Date.now(),s=\\\"zoom-\\\"+da.event.changedTouches[0].identifier,f=\\\"touchmove.\\\"+s,d=\\\"touchend.\\\"+s,v=da.select(ya).on(f,n).on(d,e).on(E,null).on(k,null),y=H();if(m=w,h={},p=0,c.forEach(function(n){h[n.identifier]=t(n)}),1===c.length){if(500>l-b){var M=c[0],x=t(c[0]);r(2*w),i(M,x),g(),a(o)}b=l}else if(c.length>1){var M=c[0],_=c[1],S=M[0]-_[0],A=M[1]-_[1];p=S*S+A*A}}function l(){g(),h||(h=t(da.mouse(this))),r(Math.pow(2,.002*Xa())*w),i(da.mouse(this),h),a(N.of(this,arguments))}function s(){h=null}function f(){var n=da.mouse(this),e=t(n),u=Math.log(w)/Math.LN2;r(Math.pow(2,da.event.shiftKey?Math.ceil(u)-1:Math.floor(u)+1)),i(n,e),a(N.of(this,arguments))}var h,p,m,v,y,M,x,b,_=[0,0],w=1,S=Za,E=\\\"mousedown.zoom\\\",k=\\\"mousemove.zoom\\\",A=\\\"mouseup.zoom\\\",N=d(n,\\\"zoom\\\");return n.translate=function(t){return arguments.length?(_=t.map(Number),u(),n):_},n.scale=function(t){return arguments.length?(w=+t,u(),n):w},n.scaleExtent=function(t){return arguments.length?(S=null==t?Za:t.map(Number),n):S},n.x=function(t){return arguments.length?(y=t,v=t.copy(),_=[0,0],w=1,n):y},n.y=function(t){return arguments.length?(x=t,M=t.copy(),_=[0,0],w=1,n):x},da.rebind(n,N,\\\"on\\\")};var Xa,Za=[0,1/0],Ba=\\\"onwheel\\\"in ma?(Xa=function(){return-da.event.deltaY*(da.event.deltaMode?120:1)},\\\"wheel\\\"):\\\"onmousewheel\\\"in ma?(Xa=function(){return da.event.wheelDelta},\\\"mousewheel\\\"):(Xa=function(){return-da.event.detail},\\\"MozMousePixelScroll\\\");P.prototype.toString=function(){return this.rgb()+\\\"\\\"},da.hsl=function(n,t,e){return 1===arguments.length?n instanceof Y?O(n.h,n.s,n.l):ot(\\\"\\\"+n,ct,O):O(+n,+t,+e)};var $a=Y.prototype=new P;$a.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),O(this.h,this.s,this.l/n)},$a.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),O(this.h,this.s,n*this.l)},$a.rgb=function(){return R(this.h,this.s,this.l)};var Wa=Math.PI,Ja=1e-6,Ga=Ja*Ja,Ka=Wa/180,Qa=180/Wa;da.hcl=function(n,t,e){return 1===arguments.length?n instanceof W?$(n.h,n.c,n.l):n instanceof K?nt(n.l,n.a,n.b):nt((n=lt((n=da.rgb(n)).r,n.g,n.b)).l,n.a,n.b):$(+n,+t,+e)};var no=W.prototype=new P;no.brighter=function(n){return $(this.h,this.c,Math.min(100,this.l+to*(arguments.length?n:1)))},no.darker=function(n){return $(this.h,this.c,Math.max(0,this.l-to*(arguments.length?n:1)))},no.rgb=function(){return J(this.h,this.c,this.l).rgb()},da.lab=function(n,t,e){return 1===arguments.length?n instanceof K?G(n.l,n.a,n.b):n instanceof W?J(n.l,n.c,n.h):lt((n=da.rgb(n)).r,n.g,n.b):G(+n,+t,+e)};var to=18,eo=.95047,ro=1,io=1.08883,uo=K.prototype=new P;uo.brighter=function(n){return G(Math.min(100,this.l+to*(arguments.length?n:1)),this.a,this.b)},uo.darker=function(n){return G(Math.max(0,this.l-to*(arguments.length?n:1)),this.a,this.b)},uo.rgb=function(){return Q(this.l,this.a,this.b)},da.rgb=function(n,t,e){return 1===arguments.length?n instanceof ut?it(n.r,n.g,n.b):ot(\\\"\\\"+n,it,R):it(~~n,~~t,~~e)};var ao=ut.prototype=new P;ao.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),it(Math.min(255,Math.floor(t/n)),Math.min(255,Math.floor(e/n)),Math.min(255,Math.floor(r/n)))):it(i,i,i)},ao.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),it(Math.floor(n*this.r),Math.floor(n*this.g),Math.floor(n*this.b))},ao.hsl=function(){return ct(this.r,this.g,this.b)},ao.toString=function(){return\\\"#\\\"+at(this.r)+at(this.g)+at(this.b)};var oo=da.map({aliceblue:\\\"#f0f8ff\\\",antiquewhite:\\\"#faebd7\\\",aqua:\\\"#00ffff\\\",aquamarine:\\\"#7fffd4\\\",azure:\\\"#f0ffff\\\",beige:\\\"#f5f5dc\\\",bisque:\\\"#ffe4c4\\\",black:\\\"#000000\\\",blanchedalmond:\\\"#ffebcd\\\",blue:\\\"#0000ff\\\",blueviolet:\\\"#8a2be2\\\",brown:\\\"#a52a2a\\\",burlywood:\\\"#deb887\\\",cadetblue:\\\"#5f9ea0\\\",chartreuse:\\\"#7fff00\\\",chocolate:\\\"#d2691e\\\",coral:\\\"#ff7f50\\\",cornflowerblue:\\\"#6495ed\\\",cornsilk:\\\"#fff8dc\\\",crimson:\\\"#dc143c\\\",cyan:\\\"#00ffff\\\",darkblue:\\\"#00008b\\\",darkcyan:\\\"#008b8b\\\",darkgoldenrod:\\\"#b8860b\\\",darkgray:\\\"#a9a9a9\\\",darkgreen:\\\"#006400\\\",darkgrey:\\\"#a9a9a9\\\",darkkhaki:\\\"#bdb76b\\\",darkmagenta:\\\"#8b008b\\\",darkolivegreen:\\\"#556b2f\\\",darkorange:\\\"#ff8c00\\\",darkorchid:\\\"#9932cc\\\",darkred:\\\"#8b0000\\\",darksalmon:\\\"#e9967a\\\",darkseagreen:\\\"#8fbc8f\\\",darkslateblue:\\\"#483d8b\\\",darkslategray:\\\"#2f4f4f\\\",darkslategrey:\\\"#2f4f4f\\\",darkturquoise:\\\"#00ced1\\\",darkviolet:\\\"#9400d3\\\",deeppink:\\\"#ff1493\\\",deepskyblue:\\\"#00bfff\\\",dimgray:\\\"#696969\\\",dimgrey:\\\"#696969\\\",dodgerblue:\\\"#1e90ff\\\",firebrick:\\\"#b22222\\\",floralwhite:\\\"#fffaf0\\\",forestgreen:\\\"#228b22\\\",fuchsia:\\\"#ff00ff\\\",gainsboro:\\\"#dcdcdc\\\",ghostwhite:\\\"#f8f8ff\\\",gold:\\\"#ffd700\\\",goldenrod:\\\"#daa520\\\",gray:\\\"#808080\\\",green:\\\"#008000\\\",greenyellow:\\\"#adff2f\\\",grey:\\\"#808080\\\",honeydew:\\\"#f0fff0\\\",hotpink:\\\"#ff69b4\\\",indianred:\\\"#cd5c5c\\\",indigo:\\\"#4b0082\\\",ivory:\\\"#fffff0\\\",khaki:\\\"#f0e68c\\\",lavender:\\\"#e6e6fa\\\",lavenderblush:\\\"#fff0f5\\\",lawngreen:\\\"#7cfc00\\\",lemonchiffon:\\\"#fffacd\\\",lightblue:\\\"#add8e6\\\",lightcoral:\\\"#f08080\\\",lightcyan:\\\"#e0ffff\\\",lightgoldenrodyellow:\\\"#fafad2\\\",lightgray:\\\"#d3d3d3\\\",lightgreen:\\\"#90ee90\\\",lightgrey:\\\"#d3d3d3\\\",lightpink:\\\"#ffb6c1\\\",lightsalmon:\\\"#ffa07a\\\",lightseagreen:\\\"#20b2aa\\\",lightskyblue:\\\"#87cefa\\\",lightslategray:\\\"#778899\\\",lightslategrey:\\\"#778899\\\",lightsteelblue:\\\"#b0c4de\\\",lightyellow:\\\"#ffffe0\\\",lime:\\\"#00ff00\\\",limegreen:\\\"#32cd32\\\",linen:\\\"#faf0e6\\\",magenta:\\\"#ff00ff\\\",maroon:\\\"#800000\\\",mediumaquamarine:\\\"#66cdaa\\\",mediumblue:\\\"#0000cd\\\",mediumorchid:\\\"#ba55d3\\\",mediumpurple:\\\"#9370db\\\",mediumseagreen:\\\"#3cb371\\\",mediumslateblue:\\\"#7b68ee\\\",mediumspringgreen:\\\"#00fa9a\\\",mediumturquoise:\\\"#48d1cc\\\",mediumvioletred:\\\"#c71585\\\",midnightblue:\\\"#191970\\\",mintcream:\\\"#f5fffa\\\",mistyrose:\\\"#ffe4e1\\\",moccasin:\\\"#ffe4b5\\\",navajowhite:\\\"#ffdead\\\",navy:\\\"#000080\\\",oldlace:\\\"#fdf5e6\\\",olive:\\\"#808000\\\",olivedrab:\\\"#6b8e23\\\",orange:\\\"#ffa500\\\",orangered:\\\"#ff4500\\\",orchid:\\\"#da70d6\\\",palegoldenrod:\\\"#eee8aa\\\",palegreen:\\\"#98fb98\\\",paleturquoise:\\\"#afeeee\\\",palevioletred:\\\"#db7093\\\",papayawhip:\\\"#ffefd5\\\",peachpuff:\\\"#ffdab9\\\",peru:\\\"#cd853f\\\",pink:\\\"#ffc0cb\\\",plum:\\\"#dda0dd\\\",powderblue:\\\"#b0e0e6\\\",purple:\\\"#800080\\\",red:\\\"#ff0000\\\",rosybrown:\\\"#bc8f8f\\\",royalblue:\\\"#4169e1\\\",saddlebrown:\\\"#8b4513\\\",salmon:\\\"#fa8072\\\",sandybrown:\\\"#f4a460\\\",seagreen:\\\"#2e8b57\\\",seashell:\\\"#fff5ee\\\",sienna:\\\"#a0522d\\\",silver:\\\"#c0c0c0\\\",skyblue:\\\"#87ceeb\\\",slateblue:\\\"#6a5acd\\\",slategray:\\\"#708090\\\",slategrey:\\\"#708090\\\",snow:\\\"#fffafa\\\",springgreen:\\\"#00ff7f\\\",steelblue:\\\"#4682b4\\\",tan:\\\"#d2b48c\\\",teal:\\\"#008080\\\",thistle:\\\"#d8bfd8\\\",tomato:\\\"#ff6347\\\",turquoise:\\\"#40e0d0\\\",violet:\\\"#ee82ee\\\",wheat:\\\"#f5deb3\\\",white:\\\"#ffffff\\\",whitesmoke:\\\"#f5f5f5\\\",yellow:\\\"#ffff00\\\",yellowgreen:\\\"#9acd32\\\"});oo.forEach(function(n,t){oo.set(n,ot(t,it,R))}),da.functor=ht,da.xhr=pt(gt),da.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var a=da.xhr(n,t,u);return a.row=function(n){return arguments.length?a.response(null==(e=n)?r:i(n)):e},a.row(e)}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function a(t){return t.map(o).join(n)}function o(n){return c.test(n)?'\\\"'+n.replace(/\\\\\\\"/g,'\\\"\\\"')+'\\\"':n}var c=new RegExp('[\\\"'+n+\\\"\\\\n]\\\"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function(\\\"d\\\",\\\"return {\\\"+n.map(function(n,t){return JSON.stringify(n)+\\\": d[\\\"+t+\\\"]\\\"}).join(\\\",\\\")+\\\"}\\\");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(s>=c)return a;if(i)return i=!1,u;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(i=!0),n.substring(t+1,e).replace(/\\\"\\\"/g,'\\\"')}for(;c>s;){var r=n.charCodeAt(s++),o=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(s)&&(++s,++o);else if(r!==l)continue;return n.substring(t,s-o)}return n.substring(t)}for(var r,i,u={},a={},o=[],c=n.length,s=0,f=0;(r=e())!==a;){for(var h=[];r!==u&&r!==a;)h.push(r),r=e();(!t||(h=t(h,f++)))&&o.push(h)}return o},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new u,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join(\\\"\\\\n\\\")},e.formatRows=function(n){return n.map(a).join(\\\"\\\\n\\\")},e},da.csv=da.dsv(\\\",\\\",\\\"text/csv\\\"),da.tsv=da.dsv(\\\"\\t\\\",\\\"text/tab-separated-values\\\");var co,lo,so,fo;da.timer=function(n,t,e){if(arguments.length<3){if(arguments.length<2)t=0;else if(!isFinite(t))return;e=Date.now()}var r=e+t,i={callback:n,time:r,next:null};lo?lo.next=i:co=i,lo=i,so||(fo=clearTimeout(fo),so=1,ho(vt))},da.timer.flush=function(){yt(),Mt()};var ho=ya[o(ya,\\\"requestAnimationFrame\\\")]||function(n){setTimeout(n,17)},go=\\\".\\\",po=\\\",\\\",mo=[3,3],vo=\\\"$\\\",yo=[\\\"y\\\",\\\"z\\\",\\\"a\\\",\\\"f\\\",\\\"p\\\",\\\"n\\\",\\\"µ\\\",\\\"m\\\",\\\"\\\",\\\"k\\\",\\\"M\\\",\\\"G\\\",\\\"T\\\",\\\"P\\\",\\\"E\\\",\\\"Z\\\",\\\"Y\\\"].map(xt);da.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=da.round(n,bt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((0>=e?e+1:e-1)/3)))),yo[8+e/3]},da.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)},da.format=function(n){var t=Mo.exec(n),e=t[1]||\\\" \\\",r=t[2]||\\\">\\\",i=t[3]||\\\"\\\",u=t[4]||\\\"\\\",a=t[5],o=+t[6],c=t[7],l=t[8],s=t[9],f=1,h=\\\"\\\",g=!1;switch(l&&(l=+l.substring(1)),(a||\\\"0\\\"===e&&\\\"=\\\"===r)&&(a=e=\\\"0\\\",r=\\\"=\\\",c&&(o-=Math.floor((o-1)/4))),s){case\\\"n\\\":c=!0,s=\\\"g\\\";break;case\\\"%\\\":f=100,h=\\\"%\\\",s=\\\"f\\\";break;case\\\"p\\\":f=100,h=\\\"%\\\",s=\\\"r\\\";break;case\\\"b\\\":case\\\"o\\\":case\\\"x\\\":case\\\"X\\\":\\\"#\\\"===u&&(u=\\\"0\\\"+s.toLowerCase());case\\\"c\\\":case\\\"d\\\":g=!0,l=0;break;case\\\"s\\\":f=-1,s=\\\"r\\\"}\\\"#\\\"===u?u=\\\"\\\":\\\"$\\\"===u&&(u=vo),\\\"r\\\"!=s||l||(s=\\\"g\\\"),null!=l&&(\\\"g\\\"==s?l=Math.max(1,Math.min(21,l)):(\\\"e\\\"==s||\\\"f\\\"==s)&&(l=Math.max(0,Math.min(20,l)))),s=xo.get(s)||_t;var p=a&&c;return function(n){if(g&&n%1)return\\\"\\\";var t=0>n||0===n&&0>1/n?(n=-n,\\\"-\\\"):i;if(0>f){var d=da.formatPrefix(n,l);n=d.scale(n),h=d.symbol}else n*=f;n=s(n,l);var m=n.lastIndexOf(\\\".\\\"),v=0>m?n:n.substring(0,m),y=0>m?\\\"\\\":go+n.substring(m+1);!a&&c&&(v=bo(v));var M=u.length+v.length+y.length+(p?0:t.length),x=o>M?new Array(M=o-M+1).join(e):\\\"\\\";return p&&(v=bo(x+v)),t+=u,n=v+y,(\\\"<\\\"===r?t+n+x:\\\">\\\"===r?x+t+n:\\\"^\\\"===r?x.substring(0,M>>=1)+t+n+x.substring(M):t+(p?n:x+n))+h}};var Mo=/(?:([^{])?([<>=^]))?([+\\\\- ])?([$#])?(0)?(\\\\d+)?(,)?(\\\\.-?\\\\d+)?([a-z%])?/i,xo=da.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=da.round(n,bt(n,t))).toFixed(Math.max(0,Math.min(20,bt(n*(1+1e-15),t))))}}),bo=gt;if(mo){var _o=mo.length;bo=function(n){for(var t=n.length,e=[],r=0,i=mo[0];t>0&&i>0;)e.push(n.substring(t-=i,t+i)),i=mo[r=(r+1)%_o];return e.reverse().join(po)}}da.geo={},wt.prototype={s:0,t:0,add:function(n){St(n,this.t,wo),St(wo.s,this.s,this),this.s?this.t+=wo.t:this.s=wo.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var wo=new wt;da.geo.stream=function(n,t){n&&So.hasOwnProperty(n.type)?So[n.type](n,t):Et(n,t)};var So={Feature:function(n,t){Et(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)Et(e[r].geometry,t)}},Eo={Sphere:function(n,t){t.sphere()},Point:function(n,t){var e=n.coordinates;t.point(e[0],e[1])},MultiPoint:function(n,t){for(var e,r=n.coordinates,i=-1,u=r.length;++i<u;)e=r[i],t.point(e[0],e[1])},LineString:function(n,t){kt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)kt(e[r],t,0)},Polygon:function(n,t){At(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)At(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)Et(e[r],t)}};da.geo.area=function(n){return ko=0,da.geo.stream(n,No),ko};var ko,Ao=new wt,No={sphere:function(){ko+=4*Wa},point:s,lineStart:s,lineEnd:s,polygonStart:function(){Ao.reset(),No.lineStart=Nt},polygonEnd:function(){var n=2*Ao;ko+=0>n?4*Wa+n:n,No.lineStart=No.lineEnd=No.point=s}};da.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=qt([t*Ka,e*Ka]);if(v){var i=Ct(v,r),u=[i[1],-i[0],0],a=Ct(u,i);jt(a),a=Lt(a);var c=t-p,l=c>0?1:-1,d=a[0]*Qa*l,m=Math.abs(c)>180;if(m^(d>l*p&&l*t>d)){var y=a[1]*Qa;y>g&&(g=y)}else if(d=(d+360)%360-180,m^(d>l*p&&l*t>d)){var y=-a[1]*Qa;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);m?p>t?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t)}else n(t,e);v=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,v=null}function i(n,e){if(v){var r=n-p;y+=Math.abs(r)>180?r+(r>0?360:-360):r}else d=n,m=e;No.point(n,e),t(n,e)}function u(){No.lineStart()}function a(){i(d,m),No.lineEnd(),Math.abs(y)>Ja&&(s=-(h=180)),x[0]=s,x[1]=h,v=null}function o(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var s,f,h,g,p,d,m,v,y,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=a,y=0,No.polygonStart()},polygonEnd:function(){No.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>Ao?(s=-(h=180),f=-(g=90)):y>Ja?g=90:-Ja>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],da.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],l(e[0],i)||l(e[1],i)?(o(i[0],e[1])>o(i[0],i[1])&&(i[1]=e[1]),o(e[0],i[1])>o(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var a,e,p=-1/0,t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(a=o(i[1],e[0]))>p&&(p=a,s=e[0],h=i[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),da.geo.centroid=function(n){qo=To=Co=zo=Do=jo=Lo=Ho=Fo=Po=Oo=0,da.geo.stream(n,Yo);var t=Fo,e=Po,r=Oo,i=t*t+e*e+r*r;return Ga>i&&(t=jo,e=Lo,r=Ho,Ja>To&&(t=Co,e=zo,r=Do),i=t*t+e*e+r*r,Ga>i)?[0/0,0/0]:[Math.atan2(e,t)*Qa,V(r/Math.sqrt(i))*Qa]};var qo,To,Co,zo,Do,jo,Lo,Ho,Fo,Po,Oo,Yo={sphere:s,point:Ft,lineStart:Ot,lineEnd:Yt,polygonStart:function(){Yo.lineStart=Rt},polygonEnd:function(){Yo.lineStart=Ot}},Ro=Xt(Ut,Jt,Kt,Qt),Uo=[-Wa,0],Io=1e9;(da.geo.conicEqualArea=function(){return ie(ue)}).raw=ue,da.geo.albers=function(){return da.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},da.geo.albersUsa=function(){function n(n){var u=n[0],a=n[1];return t=null,e(u,a),t||(r(u,a),t)||i(u,a),t}var t,e,r,i,u=da.geo.albers(),a=da.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),o=da.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?a:i>=.166&&.234>i&&r>=-.214&&-.115>r?o:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=a.stream(n),r=o.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),a.precision(t),o.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),a.scale(.35*t),o.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var l=u.scale(),s=+t[0],f=+t[1];return e=u.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=a.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ja,f+.12*l+Ja],[s-.214*l-Ja,f+.234*l-Ja]]).stream(c).point,i=o.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ja,f+.166*l+Ja],[s-.115*l-Ja,f+.234*l-Ja]]).stream(c).point,n},n.scale(1070)};var Vo,Xo,Zo,Bo,$o,Wo,Jo={point:s,lineStart:s,lineEnd:s,polygonStart:function(){Xo=0,Jo.lineStart=ae},polygonEnd:function(){Jo.lineStart=Jo.lineEnd=Jo.point=s,Vo+=Math.abs(Xo/2)}},Go={point:oe,lineStart:s,lineEnd:s,polygonStart:s,polygonEnd:s},Ko={point:se,lineStart:fe,lineEnd:he,polygonStart:function(){Ko.lineStart=ge},polygonEnd:function(){Ko.point=se,Ko.lineStart=fe,Ko.lineEnd=he}};da.geo.path=function(){function n(n){return n&&(\\\"function\\\"==typeof o&&u.pointRadius(+o.apply(this,arguments)),a&&a.valid||(a=i(u)),da.geo.stream(n,a)),u.result()}function t(){return a=null,n}var e,r,i,u,a,o=4.5;return n.area=function(n){return Vo=0,da.geo.stream(n,i(Jo)),Vo},n.centroid=function(n){return Co=zo=Do=jo=Lo=Ho=Fo=Po=Oo=0,da.geo.stream(n,i(Ko)),Oo?[Fo/Oo,Po/Oo]:Ho?[jo/Ho,Lo/Ho]:Do?[Co/Do,zo/Do]:[0/0,0/0]},n.bounds=function(n){return $o=Wo=-(Zo=Bo=1/0),da.geo.stream(n,i(Go)),[[Zo,Bo],[$o,Wo]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||me(n):gt,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new ce:new pe(n),\\\"function\\\"!=typeof o&&u.pointRadius(o),t()):r},n.pointRadius=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:(u.pointRadius(+t),+t),n):o},n.projection(da.geo.albersUsa()).context(null)},da.geo.projection=ve,da.geo.projectionMutator=ye,(da.geo.equirectangular=function(){return ve(xe)}).raw=xe.invert=xe,da.geo.rotation=function(n){function t(t){return t=n(t[0]*Ka,t[1]*Ka),t[0]*=Qa,t[1]*=Qa,t}return n=be(n[0]%360*Ka,n[1]*Ka,n.length>2?n[2]*Ka:0),t.invert=function(t){return t=n.invert(t[0]*Ka,t[1]*Ka),t[0]*=Qa,t[1]*=Qa,t},t},da.geo.circle=function(){function n(){var n=\\\"function\\\"==typeof r?r.apply(this,arguments):r,t=be(-n[0]*Ka,-n[1]*Ka,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Qa,n[1]*=Qa}}),{type:\\\"Polygon\\\",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=Ee((t=+r)*Ka,i*Ka),n):t},n.precision=function(r){return arguments.length?(e=Ee(t*Ka,(i=+r)*Ka),n):i},n.angle(90)},da.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Ka,i=n[1]*Ka,u=t[1]*Ka,a=Math.sin(r),o=Math.cos(r),c=Math.sin(i),l=Math.cos(i),s=Math.sin(u),f=Math.cos(u);return Math.atan2(Math.sqrt((e=f*a)*e+(e=l*s-c*f*o)*e),c*s+l*f*o)},da.geo.graticule=function(){function n(){return{type:\\\"MultiLineString\\\",coordinates:t()}}function t(){return da.range(Math.ceil(u/m)*m,i,m).map(h).concat(da.range(Math.ceil(l/v)*v,c,v).map(g)).concat(da.range(Math.ceil(r/p)*p,e,p).filter(function(n){return Math.abs(n%m)>Ja}).map(s)).concat(da.range(Math.ceil(o/d)*d,a,d).filter(function(n){return Math.abs(n%v)>Ja}).map(f))}var e,r,i,u,a,o,c,l,s,f,h,g,p=10,d=p,m=90,v=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:\\\"LineString\\\",coordinates:n}})},n.outline=function(){return{type:\\\"Polygon\\\",coordinates:[h(u).concat(g(c).slice(1),h(i).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],l=+t[0][1],c=+t[1][1],u>i&&(t=u,u=i,i=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[u,l],[i,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],o=+t[0][1],a=+t[1][1],r>e&&(t=r,r=e,e=t),o>a&&(t=o,o=a,a=t),n.precision(y)):[[r,o],[e,a]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(m=+t[0],v=+t[1],n):[m,v]},n.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],n):[p,d]},n.precision=function(t){return arguments.length?(y=+t,s=Ae(o,a,90),f=Ne(r,e,y),h=Ae(l,c,90),g=Ne(u,i,y),n):y},n.majorExtent([[-180,-90+Ja],[180,90-Ja]]).minorExtent([[-180,-80-Ja],[180,80+Ja]])},da.geo.greatArc=function(){function n(){return{type:\\\"LineString\\\",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=qe,i=Te;return n.distance=function(){return da.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t=\\\"function\\\"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e=\\\"function\\\"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},da.geo.interpolate=function(n,t){return Ce(n[0]*Ka,n[1]*Ka,t[0]*Ka,t[1]*Ka)},da.geo.length=function(n){return Qo=0,da.geo.stream(n,nc),Qo};var Qo,nc={sphere:s,point:s,lineStart:ze,lineEnd:s,polygonStart:s,polygonEnd:s},tc=De(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(da.geo.azimuthalEqualArea=function(){return ve(tc)}).raw=tc;var ec=De(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},gt);(da.geo.azimuthalEquidistant=function(){return ve(ec)}).raw=ec,(da.geo.conicConformal=function(){return ie(je)}).raw=je,(da.geo.conicEquidistant=function(){return ie(Le)}).raw=Le;var rc=De(function(n){return 1/n},Math.atan);(da.geo.gnomonic=function(){return ve(rc)}).raw=rc,He.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Wa/2]},(da.geo.mercator=function(){return Fe(He)}).raw=He;var ic=De(function(){return 1},Math.asin);(da.geo.orthographic=function(){return ve(ic)}).raw=ic;var uc=De(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(da.geo.stereographic=function(){return ve(uc)}).raw=uc,Pe.invert=function(n,t){return[Math.atan2(X(n),Math.cos(t)),V(Math.sin(t)/Z(n))]},(da.geo.transverseMercator=function(){return Fe(Pe)}).raw=Pe,da.geom={},da.svg={},da.svg.line=function(){return Oe(gt)\\n};var ac=da.map({linear:Ue,\\\"linear-closed\\\":Ie,step:Ve,\\\"step-before\\\":Xe,\\\"step-after\\\":Ze,basis:Ke,\\\"basis-open\\\":Qe,\\\"basis-closed\\\":nr,bundle:tr,cardinal:We,\\\"cardinal-open\\\":Be,\\\"cardinal-closed\\\":$e,monotone:or});ac.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var oc=[0,2/3,1/3,0],cc=[0,1/3,2/3,0],lc=[0,1/6,2/3,1/6];da.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i,u,a,o,c,l,s,f,h,g,p,d=ht(e),m=ht(r),v=n.length,y=v-1,M=[],x=[],b=0;if(d===Ye&&r===Re)t=n;else for(u=0,t=[];v>u;++u)t.push([+d.call(this,i=n[u],u),+m.call(this,i,u)]);for(u=1;v>u;++u)(t[u][1]<t[b][1]||t[u][1]==t[b][1]&&t[u][0]<t[b][0])&&(b=u);for(u=0;v>u;++u)u!==b&&(c=t[u][1]-t[b][1],o=t[u][0]-t[b][0],M.push({angle:Math.atan2(c,o),index:u}));for(M.sort(function(n,t){return n.angle-t.angle}),g=M[0].angle,h=M[0].index,f=0,u=1;y>u;++u){if(a=M[u].index,g==M[u].angle){if(o=t[h][0]-t[b][0],c=t[h][1]-t[b][1],l=t[a][0]-t[b][0],s=t[a][1]-t[b][1],o*o+c*c>=l*l+s*s){M[u].index=-1;continue}M[f].index=-1}g=M[u].angle,f=u,h=a}for(x.push(b),u=0,a=0;2>u;++a)M[a].index>-1&&(x.push(M[a].index),u++);for(p=x.length;y>a;++a)if(!(M[a].index<0)){for(;!cr(x[p-2],x[p-1],M[a].index,t);)--p;x[p++]=M[a].index}var _=[];for(u=p-1;u>=0;--u)_.push(n[x[u]]);return _}var e=Ye,r=Re;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},da.geom.polygon=function(n){return za(n,sc),n};var sc=da.geom.polygon.prototype=[];sc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},sc.centroid=function(n){var t,e,r=-1,i=this.length,u=0,a=0,o=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=o,o=this[r],e=t[0]*o[1]-o[0]*t[1],u+=(t[0]+o[0])*e,a+=(t[1]+o[1])*e;return[u*n,a*n]},sc.clip=function(n){for(var t,e,r,i,u,a,o=fr(n),c=-1,l=this.length-fr(this),s=this[l-1];++c<l;){for(t=n.slice(),n.length=0,i=this[c],u=t[(r=t.length-o)-1],e=-1;++e<r;)a=t[e],lr(a,s,i)?(lr(u,s,i)||n.push(sr(u,a,s,i)),n.push(a)):lr(u,s,i)&&n.push(sr(u,a,s,i)),u=a;o&&n.push(n[0]),s=i}return n},da.geom.delaunay=function(n){var t=n.map(function(){return[]}),e=[];return hr(n,function(e){t[e.region.l.index].push(n[e.region.r.index])}),t.forEach(function(t,r){var i=n[r],u=i[0],a=i[1];t.forEach(function(n){n.angle=Math.atan2(n[0]-u,n[1]-a)}),t.sort(function(n,t){return n.angle-t.angle});for(var o=0,c=t.length-1;c>o;o++)e.push([i,t[o],t[o+1]])}),e},da.geom.voronoi=function(n){function t(n){var t,u,a,o=n.map(function(){return[]}),c=ht(e),l=ht(r),s=n.length,f=1e6;if(c===Ye&&l===Re)t=n;else for(t=new Array(s),a=0;s>a;++a)t[a]=[+c.call(this,u=n[a],a),+l.call(this,u,a)];if(hr(t,function(n){var t,e,r,i,u,a;1===n.a&&n.b>=0?(t=n.ep.r,e=n.ep.l):(t=n.ep.l,e=n.ep.r),1===n.a?(u=t?t.y:-f,r=n.c-n.b*u,a=e?e.y:f,i=n.c-n.b*a):(r=t?t.x:-f,u=n.c-n.a*r,i=e?e.x:f,a=n.c-n.a*i);var c=[r,u],l=[i,a];o[n.region.l.index].push(c,l),o[n.region.r.index].push(c,l)}),o=o.map(function(n,e){var r=t[e][0],i=t[e][1],u=n.map(function(n){return Math.atan2(n[0]-r,n[1]-i)}),a=da.range(n.length).sort(function(n,t){return u[n]-u[t]});return a.filter(function(n,t){return!t||u[n]-u[a[t-1]]>Ja}).map(function(t){return n[t]})}),o.forEach(function(n,e){var r=n.length;if(!r)return n.push([-f,-f],[-f,f],[f,f],[f,-f]);if(!(r>2)){var i=t[e],u=n[0],a=n[1],o=i[0],c=i[1],l=u[0],s=u[1],h=a[0],g=a[1],p=Math.abs(h-l),d=g-s;if(Math.abs(d)<Ja){var m=s>c?-f:f;n.push([-f,m],[f,m])}else if(Ja>p){var v=l>o?-f:f;n.push([v,-f],[v,f])}else{var m=(l-o)*(g-s)>(h-l)*(s-c)?f:-f,y=Math.abs(d)-p;Math.abs(y)<Ja?n.push([0>d?m:-m,m]):(y>0&&(m*=-1),n.push([-f,m],[f,m]))}}}),i)for(a=0;s>a;++a)i.clip(o[a]);for(a=0;s>a;++a)o[a].point=n[a];return o}var e=Ye,r=Re,i=null;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.clipExtent=function(n){if(!arguments.length)return i&&[i[0],i[2]];if(null==n)i=null;else{var e=+n[0][0],r=+n[0][1],u=+n[1][0],a=+n[1][1];i=da.geom.polygon([[e,r],[e,a],[u,a],[u,r]])}return t},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):i&&i[2]},t.links=function(n){var t,i,u,a=n.map(function(){return[]}),o=[],c=ht(e),l=ht(r),s=n.length;if(c===Ye&&l===Re)t=n;else for(t=new Array(s),u=0;s>u;++u)t[u]=[+c.call(this,i=n[u],u),+l.call(this,i,u)];return hr(t,function(t){var e=t.region.l.index,r=t.region.r.index;a[e][r]||(a[e][r]=a[r][e]=!0,o.push({source:n[e],target:n[r]}))}),o},t.triangles=function(n){if(e===Ye&&r===Re)return da.geom.delaunay(n);for(var t,i=new Array(c),u=ht(e),a=ht(r),o=-1,c=n.length;++o<c;)(i[o]=[+u.call(this,t=n[o],o),+a.call(this,t,o)]).data=t;return da.geom.delaunay(i).map(function(n){return n.map(function(n){return n.data})})},t)};var fc={l:\\\"r\\\",r:\\\"l\\\"};da.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,a,o){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,s=n.y;if(null!=c)if(Math.abs(c-e)+Math.abs(s-r)<.01)l(n,t,e,r,i,u,a,o);else{var f=n.point;n.x=n.y=n.point=null,l(n,f,c,s,i,u,a,o),l(n,t,e,r,i,u,a,o)}else n.x=e,n.y=r,n.point=t}else l(n,t,e,r,i,u,a,o)}function l(n,t,e,r,i,a,o,c){var l=.5*(i+o),s=.5*(a+c),f=e>=l,h=r>=s,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=dr()),f?i=l:o=l,h?a=s:c=s,u(n,t,e,r,i,a,o,c)}var s,f,h,g,p,d,m,v,y,M=ht(o),x=ht(c);if(null!=t)d=t,m=e,v=r,y=i;else if(v=y=-(d=m=1/0),f=[],h=[],p=n.length,a)for(g=0;p>g;++g)s=n[g],s.x<d&&(d=s.x),s.y<m&&(m=s.y),s.x>v&&(v=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);d>b&&(d=b),m>_&&(m=_),b>v&&(v=b),_>y&&(y=_),f.push(b),h.push(_)}var w=v-d,S=y-m;w>S?y=m+w:v=d+S;var E=dr();if(E.add=function(n){u(E,n,+M(n,++g),+x(n,g),d,m,v,y)},E.visit=function(n){mr(n,E,d,m,v,y)},g=-1,null==t){for(;++g<p;)u(E,n[g],f[g],h[g],d,m,v,y);--g}else n.forEach(E.add);return f=h=n=s=null,E}var a,o=Ye,c=Re;return(a=arguments.length)?(o=gr,c=pr,3===a&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(o=n,u):o},u.y=function(n){return arguments.length?(c=n,u):c},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},da.interpolateRgb=vr,da.interpolateObject=yr,da.interpolateNumber=Mr,da.interpolateString=xr;var hc=/[-+]?(?:\\\\d+\\\\.?\\\\d*|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?/g;da.interpolate=br,da.interpolators=[function(n,t){var e=typeof t;return(\\\"string\\\"===e?oo.has(t)||/^(#|rgb\\\\(|hsl\\\\()/.test(t)?vr:xr:t instanceof P?vr:\\\"object\\\"===e?Array.isArray(t)?_r:yr:Mr)(n,t)}],da.interpolateArray=_r;var gc=function(){return gt},pc=da.map({linear:gc,poly:qr,quad:function(){return kr},cubic:function(){return Ar},sin:function(){return Tr},exp:function(){return Cr},circle:function(){return zr},elastic:Dr,back:jr,bounce:function(){return Lr}}),dc=da.map({\\\"in\\\":gt,out:Sr,\\\"in-out\\\":Er,\\\"out-in\\\":function(n){return Er(Sr(n))}});da.ease=function(n){var t=n.indexOf(\\\"-\\\"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):\\\"in\\\";return e=pc.get(e)||gc,r=dc.get(r)||gt,wr(r(e.apply(null,Array.prototype.slice.call(arguments,1))))},da.interpolateHcl=Hr,da.interpolateHsl=Fr,da.interpolateLab=Pr,da.interpolateRound=Or,da.transform=function(n){var t=ma.createElementNS(da.ns.prefix.svg,\\\"g\\\");return(da.transform=function(n){if(null!=n){t.setAttribute(\\\"transform\\\",n);var e=t.transform.baseVal.consolidate()}return new Yr(e?e.matrix:mc)})(n)},Yr.prototype.toString=function(){return\\\"translate(\\\"+this.translate+\\\")rotate(\\\"+this.rotate+\\\")skewX(\\\"+this.skew+\\\")scale(\\\"+this.scale+\\\")\\\"};var mc={a:1,b:0,c:0,d:1,e:0,f:0};da.interpolateTransform=Vr,da.layout={},da.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Br(n[e]));return t}},da.layout.chord=function(){function n(){var n,l,f,h,g,p={},d=[],m=da.range(u),v=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(l=0,g=-1;++g<u;)l+=i[h][g];d.push(l),v.push(da.range(u)),n+=l}for(a&&m.sort(function(n,t){return a(d[n],d[t])}),o&&v.forEach(function(n,t){n.sort(function(n,e){return o(i[t][n],i[t][e])})}),n=(2*Wa-s*u)/n,l=0,h=-1;++h<u;){for(f=l,g=-1;++g<u;){var y=m[h],M=v[y][g],x=i[y][M],b=l,_=l+=x*n;p[y+\\\"-\\\"+M]={index:y,subindex:M,startAngle:b,endAngle:_,value:x}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/n},l+=s}for(h=-1;++h<u;)for(g=h-1;++g<u;){var w=p[h+\\\"-\\\"+g],S=p[g+\\\"-\\\"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,a,o,c,l={},s=0;return l.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,l):i},l.padding=function(n){return arguments.length?(s=n,e=r=null,l):s},l.sortGroups=function(n){return arguments.length?(a=n,e=r=null,l):a},l.sortSubgroups=function(n){return arguments.length?(o=n,e=null,l):o},l.sortChords=function(n){return arguments.length?(c=n,e&&t(),l):c},l.chords=function(){return e||n(),e},l.groups=function(){return r||n(),r},l},da.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,a=t.cy-n.y,o=1/Math.sqrt(u*u+a*a);if(d>(i-e)*o){var c=t.charge*o*o;return n.px-=u*c,n.py-=a*c,!0}if(t.point&&isFinite(o)){var c=t.pointCharge*o*o;n.px-=u*c,n.py-=a*c}}return!t.charge}}function t(n){n.px=da.event.x,n.py=da.event.y,o.resume()}var e,r,i,u,a,o={},c=da.dispatch(\\\"start\\\",\\\"tick\\\",\\\"end\\\"),l=[1,1],s=.9,f=vc,h=yc,g=-30,p=.1,d=.8,m=[],v=[];return o.tick=function(){if((r*=.99)<.005)return c.end({type:\\\"end\\\",alpha:r=0}),!0;var t,e,o,f,h,d,y,M,x,b=m.length,_=v.length;for(e=0;_>e;++e)o=v[e],f=o.source,h=o.target,M=h.x-f.x,x=h.y-f.y,(d=M*M+x*x)&&(d=r*u[e]*((d=Math.sqrt(d))-i[e])/d,M*=d,x*=d,h.x-=M*(y=f.weight/(h.weight+f.weight)),h.y-=x*y,f.x+=M*(y=1-y),f.y+=x*y);if((y=r*p)&&(M=l[0]/2,x=l[1]/2,e=-1,y))for(;++e<b;)o=m[e],o.x+=(M-o.x)*y,o.y+=(x-o.y)*y;if(g)for(ni(t=da.geom.quadtree(m),r,a),e=-1;++e<b;)(o=m[e]).fixed||t.visit(n(o));for(e=-1;++e<b;)o=m[e],o.fixed?(o.x=o.px,o.y=o.py):(o.x-=(o.px-(o.px=o.x))*s,o.y-=(o.py-(o.py=o.y))*s);c.tick({type:\\\"tick\\\",alpha:r})},o.nodes=function(n){return arguments.length?(m=n,o):m},o.links=function(n){return arguments.length?(v=n,o):v},o.size=function(n){return arguments.length?(l=n,o):l},o.linkDistance=function(n){return arguments.length?(f=\\\"function\\\"==typeof n?n:+n,o):f},o.distance=o.linkDistance,o.linkStrength=function(n){return arguments.length?(h=\\\"function\\\"==typeof n?n:+n,o):h},o.friction=function(n){return arguments.length?(s=+n,o):s},o.charge=function(n){return arguments.length?(g=\\\"function\\\"==typeof n?n:+n,o):g},o.gravity=function(n){return arguments.length?(p=+n,o):p},o.theta=function(n){return arguments.length?(d=+n,o):d},o.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:\\\"start\\\",alpha:r=n}),da.timer(o.tick)),o):r},o.start=function(){function n(n,r){for(var i,u=t(e),a=-1,o=u.length;++a<o;)if(!isNaN(i=u[a][n]))return i;return Math.random()*r}function t(){if(!c){for(c=[],r=0;p>r;++r)c[r]=[];for(r=0;d>r;++r){var n=v[r];c[n.source.index].push(n.target),c[n.target.index].push(n.source)}}return c[e]}var e,r,c,s,p=m.length,d=v.length,y=l[0],M=l[1];for(e=0;p>e;++e)(s=m[e]).index=e,s.weight=0;for(e=0;d>e;++e)s=v[e],\\\"number\\\"==typeof s.source&&(s.source=m[s.source]),\\\"number\\\"==typeof s.target&&(s.target=m[s.target]),++s.source.weight,++s.target.weight;for(e=0;p>e;++e)s=m[e],isNaN(s.x)&&(s.x=n(\\\"x\\\",y)),isNaN(s.y)&&(s.y=n(\\\"y\\\",M)),isNaN(s.px)&&(s.px=s.x),isNaN(s.py)&&(s.py=s.y);if(i=[],\\\"function\\\"==typeof f)for(e=0;d>e;++e)i[e]=+f.call(this,v[e],e);else for(e=0;d>e;++e)i[e]=f;if(u=[],\\\"function\\\"==typeof h)for(e=0;d>e;++e)u[e]=+h.call(this,v[e],e);else for(e=0;d>e;++e)u[e]=h;if(a=[],\\\"function\\\"==typeof g)for(e=0;p>e;++e)a[e]=+g.call(this,m[e],e);else for(e=0;p>e;++e)a[e]=g;return o.resume()},o.resume=function(){return o.alpha(.1)},o.stop=function(){return o.alpha(0)},o.drag=function(){return e||(e=da.behavior.drag().origin(gt).on(\\\"dragstart.force\\\",Jr).on(\\\"drag.force\\\",t).on(\\\"dragend.force\\\",Gr)),arguments.length?(this.on(\\\"mouseover.force\\\",Kr).on(\\\"mouseout.force\\\",Qr).call(e),void 0):e},da.rebind(o,c,\\\"on\\\")};var vc=20,yc=1;da.layout.hierarchy=function(){function n(t,a,o){var c=i.call(e,t,a);if(t.depth=a,o.push(t),c&&(l=c.length)){for(var l,s,f=-1,h=t.children=[],g=0,p=a+1;++f<l;)s=n(c[f],p,o),s.parent=t,h.push(s),g+=s.value;r&&h.sort(r),u&&(t.value=g)}else u&&(t.value=+u.call(e,t,a)||0);return t}function t(n,r){var i=n.children,a=0;if(i&&(o=i.length))for(var o,c=-1,l=r+1;++c<o;)a+=t(i[c],l);else u&&(a=+u.call(e,n,r)||0);return u&&(n.value=a),a}function e(t){var e=[];return n(t,0,e),e}var r=ii,i=ei,u=ri;return e.sort=function(n){return arguments.length?(r=n,e):r},e.children=function(n){return arguments.length?(i=n,e):i},e.value=function(n){return arguments.length?(u=n,e):u},e.revalue=function(n){return t(n,0),n},e},da.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(a=u.length)){var a,o,c,l=-1;for(r=t.value?r/t.value:0;++l<a;)n(o=u[l],e,c=o.value*r,i),e+=c}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var a=r.call(this,e,u);return n(a[0],0,i[0],i[1]/t(a[0])),a}var r=da.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ti(e,r)},da.layout.pie=function(){function n(u){var a=u.map(function(e,r){return+t.call(n,e,r)}),o=+(\\\"function\\\"==typeof r?r.apply(this,arguments):r),c=((\\\"function\\\"==typeof i?i.apply(this,arguments):i)-o)/da.sum(a),l=da.range(u.length);null!=e&&l.sort(e===Mc?function(n,t){return a[t]-a[n]}:function(n,t){return e(u[n],u[t])});var s=[];return l.forEach(function(n){var t;s[n]={data:u[n],value:t=a[n],startAngle:o,endAngle:o+=t*c}}),s}var t=Number,e=Mc,r=0,i=2*Wa;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n};var Mc={};da.layout.stack=function(){function n(o,c){var l=o.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),a.call(n,t,e)]})}),f=e.call(n,s,c);l=da.permute(l,f),s=da.permute(s,f);var h,g,p,d=r.call(n,s,c),m=l.length,v=l[0].length;for(g=0;v>g;++g)for(i.call(n,l[0][g],p=d[g],s[0][g][1]),h=1;m>h;++h)i.call(n,l[h][g],p+=s[h-1][g][1],s[h][g][1]);return o}var t=gt,e=li,r=si,i=ci,u=ai,a=oi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e=\\\"function\\\"==typeof t?t:xc.get(t)||li,n):e},n.offset=function(t){return arguments.length?(r=\\\"function\\\"==typeof t?t:bc.get(t)||si,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(a=t,n):a},n.out=function(t){return arguments.length?(i=t,n):i},n};var xc=da.map({\\\"inside-out\\\":function(n){var t,e,r=n.length,i=n.map(fi),u=n.map(hi),a=da.range(r).sort(function(n,t){return i[n]-i[t]}),o=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=a[t],c>o?(o+=u[e],l.push(e)):(c+=u[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return da.range(n.length).reverse()},\\\"default\\\":li}),bc=da.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,a=[],o=0,c=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>o&&(o=r),a.push(r)}for(e=0;u>e;++e)c[e]=(o-a[e])/2;return c},wiggle:function(n){var t,e,r,i,u,a,o,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,i=0;s>t;++t)i+=n[t][e][1];for(t=0,u=0,o=f[e][0]-f[e-1][0];s>t;++t){for(r=0,a=(n[t][e][1]-n[t][e-1][1])/(2*o);t>r;++r)a+=(n[r][e][1]-n[r][e-1][1])/o;u+=a*n[t][e][1]}g[e]=c-=i?u/i*o:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,i=n.length,u=n[0].length,a=1/i,o=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=a}for(e=0;u>e;++e)o[e]=0;return o},zero:si});da.layout.histogram=function(){function n(n,u){for(var a,o,c=[],l=n.map(e,this),s=r.call(this,l,u),f=i.call(this,s,l,u),u=-1,h=l.length,g=f.length-1,p=t?1:1/h;++u<g;)a=c[u]=[],a.dx=f[u+1]-(a.x=f[u]),a.y=0;if(g>0)for(u=-1;++u<h;)o=l[u],o>=s[0]&&o<=s[1]&&(a=c[da.bisect(f,o,1,g)-1],a.y+=p,a.push(n[u]));return c}var t=!0,e=Number,r=mi,i=pi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=ht(t),n):r},n.bins=function(t){return arguments.length?(i=\\\"number\\\"==typeof t?function(n){return di(n,t)}:ht(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},da.layout.tree=function(){function n(n,u){function a(n,t){var r=n.children,i=n._tree;if(r&&(u=r.length)){for(var u,o,l,s=r[0],f=s,h=-1;++h<u;)l=r[h],a(l,o),f=c(l,o,f),o=l;Ei(n);var g=.5*(s._tree.prelim+l._tree.prelim);t?(i.prelim=t._tree.prelim+e(n,t),i.mod=i.prelim-g):i.prelim=g}else t&&(i.prelim=t._tree.prelim+e(n,t))}function o(n,t){n.x=n._tree.prelim+t;var e=n.children;if(e&&(r=e.length)){var r,i=-1;for(t+=n._tree.mod;++i<r;)o(e[i],t)}}function c(n,t,r){if(t){for(var i,u=n,a=n,o=t,c=n.parent.children[0],l=u._tree.mod,s=a._tree.mod,f=o._tree.mod,h=c._tree.mod;o=Mi(o),u=yi(u),o&&u;)c=yi(c),a=Mi(a),a._tree.ancestor=n,i=o._tree.prelim+f-u._tree.prelim-l+e(o,u),i>0&&(ki(Ai(o,n,r),n,i),l+=i,s+=i),f+=o._tree.mod,l+=u._tree.mod,h+=c._tree.mod,s+=a._tree.mod;o&&!Mi(a)&&(a._tree.thread=o,a._tree.mod+=f-s),u&&!yi(c)&&(c._tree.thread=u,c._tree.mod+=l-h,r=n)}return r}var l=t.call(this,n,u),s=l[0];Si(s,function(n,t){n._tree={ancestor:n,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),a(s),o(s,-s._tree.prelim);var f=xi(s,_i),h=xi(s,bi),g=xi(s,wi),p=f.x-e(f,h)/2,d=h.x+e(h,f)/2,m=g.depth||1;return Si(s,i?function(n){n.x*=r[0],n.y=n.depth*r[1],delete n._tree}:function(n){n.x=(n.x-p)/(d-p)*r[0],n.y=n.depth/m*r[1],delete n._tree}),l}var t=da.layout.hierarchy().sort(null).value(null),e=vi,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ti(n,t)},da.layout.pack=function(){function n(n,u){var a=e.call(this,n,u),o=a[0],c=i[0],l=i[1],s=null==t?Math.sqrt:\\\"function\\\"==typeof t?t:function(){return t};if(o.x=o.y=0,Si(o,function(n){n.r=+s(n.value)}),Si(o,zi),r){var f=r*(t?1:Math.max(2*o.r/c,2*o.r/l))/2;Si(o,function(n){n.r+=f}),Si(o,zi),Si(o,function(n){n.r-=f})}return Li(o,c/2,l/2,t?1:1/Math.max(2*o.r/c,2*o.r/l)),a}var t,e=da.layout.hierarchy().sort(Ni),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||\\\"function\\\"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ti(n,e)},da.layout.cluster=function(){function n(n,u){var a,o=t.call(this,n,u),c=o[0],l=0;Si(c,function(n){var t=n.children;t&&t.length?(n.x=Pi(t),n.y=Fi(t)):(n.x=a?l+=e(n,a):0,n.y=0,a=n)});var s=Oi(c),f=Yi(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Si(c,i?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),o}var t=da.layout.hierarchy().sort(null).value(null),e=vi,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ti(n,t)},da.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var a,o,c,l=f(e),s=[],h=u.slice(),p=1/0,d=\\\"slice\\\"===g?l.dx:\\\"dice\\\"===g?l.dy:\\\"slice-dice\\\"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(a=h[c-1]),s.area+=a.area,\\\"squarify\\\"!==g||(o=r(s,d))<=p?(h.pop(),p=o):(s.area-=s.pop().area,i(s,d,l,!1),d=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(i(s,d,l,!0),s.length=s.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,a=f(t),o=r.slice(),c=[];for(n(o,a.dx*a.dy/t.value),c.area=0;u=o.pop();)c.push(u),c.area+=u.area,null!=u.z&&(i(c,u.z?a.dx:a.dy,a,!o.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,a=-1,o=n.length;++a<o;)(e=n[a].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*p/r,r/(t*u*p)):1/0}function i(n,t,e,r){var i,u=-1,a=n.length,o=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++u<a;)i=n[u],i.x=o,i.y=l,i.dy=s,o+=i.dx=Math.min(e.x+e.dx-o,s?c(i.area/s):0);i.z=!0,i.dx+=e.x+e.dx-o,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++u<a;)i=n[u],i.x=o,i.y=l,i.dx=s,l+=i.dy=Math.min(e.y+e.dy-l,s?c(i.area/s):0);i.z=!1,i.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function u(r){var i=a||o(r),u=i[0];return u.x=0,u.y=0,u.dx=l[0],u.dy=l[1],a&&o.revalue(u),n([u],u.dx*u.dy/u.value),(a?e:t)(u),h&&(a=i),i}var a,o=da.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=Ri,h=!1,g=\\\"squarify\\\",p=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(l=n,u):l},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Ri(t):Ui(t,\\\"number\\\"==typeof e?[e,e,e,e]:e)}function e(t){return Ui(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?Ri:\\\"function\\\"==(r=typeof n)?t:\\\"number\\\"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(c=n?Math.round:Number,u):c!=Number},u.sticky=function(n){return arguments.length?(h=n,a=null,u):h},u.ratio=function(n){return arguments.length?(p=n,u):p},u.mode=function(n){return arguments.length?(g=n+\\\"\\\",u):g},ti(u,o)},da.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=da.random.normal.apply(da,arguments);return function(){return Math.exp(n())}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t/n}}},da.scale={};var _c={floor:gt,ceil:gt};da.scale.linear=function(){return Wi([0,1],[0,1],br,!1)},da.scale.log=function(){return eu(da.scale.linear().domain([0,1]),10,!0,[1,10])};var wc=da.format(\\\".0e\\\"),Sc={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};da.scale.pow=function(){return ru(da.scale.linear(),1,[0,1])},da.scale.sqrt=function(){return da.scale.pow().exponent(.5)},da.scale.ordinal=function(){return uu([],{t:\\\"range\\\",a:[[]]})},da.scale.category10=function(){return da.scale.ordinal().range(Ec)},da.scale.category20=function(){return da.scale.ordinal().range(kc)},da.scale.category20b=function(){return da.scale.ordinal().range(Ac)},da.scale.category20c=function(){return da.scale.ordinal().range(Nc)};var Ec=[\\\"#1f77b4\\\",\\\"#ff7f0e\\\",\\\"#2ca02c\\\",\\\"#d62728\\\",\\\"#9467bd\\\",\\\"#8c564b\\\",\\\"#e377c2\\\",\\\"#7f7f7f\\\",\\\"#bcbd22\\\",\\\"#17becf\\\"],kc=[\\\"#1f77b4\\\",\\\"#aec7e8\\\",\\\"#ff7f0e\\\",\\\"#ffbb78\\\",\\\"#2ca02c\\\",\\\"#98df8a\\\",\\\"#d62728\\\",\\\"#ff9896\\\",\\\"#9467bd\\\",\\\"#c5b0d5\\\",\\\"#8c564b\\\",\\\"#c49c94\\\",\\\"#e377c2\\\",\\\"#f7b6d2\\\",\\\"#7f7f7f\\\",\\\"#c7c7c7\\\",\\\"#bcbd22\\\",\\\"#dbdb8d\\\",\\\"#17becf\\\",\\\"#9edae5\\\"],Ac=[\\\"#393b79\\\",\\\"#5254a3\\\",\\\"#6b6ecf\\\",\\\"#9c9ede\\\",\\\"#637939\\\",\\\"#8ca252\\\",\\\"#b5cf6b\\\",\\\"#cedb9c\\\",\\\"#8c6d31\\\",\\\"#bd9e39\\\",\\\"#e7ba52\\\",\\\"#e7cb94\\\",\\\"#843c39\\\",\\\"#ad494a\\\",\\\"#d6616b\\\",\\\"#e7969c\\\",\\\"#7b4173\\\",\\\"#a55194\\\",\\\"#ce6dbd\\\",\\\"#de9ed6\\\"],Nc=[\\\"#3182bd\\\",\\\"#6baed6\\\",\\\"#9ecae1\\\",\\\"#c6dbef\\\",\\\"#e6550d\\\",\\\"#fd8d3c\\\",\\\"#fdae6b\\\",\\\"#fdd0a2\\\",\\\"#31a354\\\",\\\"#74c476\\\",\\\"#a1d99b\\\",\\\"#c7e9c0\\\",\\\"#756bb1\\\",\\\"#9e9ac8\\\",\\\"#bcbddc\\\",\\\"#dadaeb\\\",\\\"#636363\\\",\\\"#969696\\\",\\\"#bdbdbd\\\",\\\"#d9d9d9\\\"];da.scale.quantile=function(){return au([],[])},da.scale.quantize=function(){return ou(0,1,[0,1])},da.scale.threshold=function(){return cu([.5],[0,1])},da.scale.identity=function(){return lu([0,1])},da.svg.arc=function(){function n(){var n=t.apply(this,arguments),u=e.apply(this,arguments),a=r.apply(this,arguments)+qc,o=i.apply(this,arguments)+qc,c=(a>o&&(c=a,a=o,o=c),o-a),l=Wa>c?\\\"0\\\":\\\"1\\\",s=Math.cos(a),f=Math.sin(a),h=Math.cos(o),g=Math.sin(o);return c>=Tc?n?\\\"M0,\\\"+u+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 1,1 0,\\\"+-u+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 1,1 0,\\\"+u+\\\"M0,\\\"+n+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 1,0 0,\\\"+-n+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 1,0 0,\\\"+n+\\\"Z\\\":\\\"M0,\\\"+u+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 1,1 0,\\\"+-u+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 1,1 0,\\\"+u+\\\"Z\\\":n?\\\"M\\\"+u*s+\\\",\\\"+u*f+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 \\\"+l+\\\",1 \\\"+u*h+\\\",\\\"+u*g+\\\"L\\\"+n*h+\\\",\\\"+n*g+\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 \\\"+l+\\\",0 \\\"+n*s+\\\",\\\"+n*f+\\\"Z\\\":\\\"M\\\"+u*s+\\\",\\\"+u*f+\\\"A\\\"+u+\\\",\\\"+u+\\\" 0 \\\"+l+\\\",1 \\\"+u*h+\\\",\\\"+u*g+\\\"L0,0\\\"+\\\"Z\\\"}var t=su,e=fu,r=hu,i=gu;return n.innerRadius=function(e){return arguments.length?(t=ht(e),n):t},n.outerRadius=function(t){return arguments.length?(e=ht(t),n):e},n.startAngle=function(t){return arguments.length?(r=ht(t),n):r},n.endAngle=function(t){return arguments.length?(i=ht(t),n):i},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,u=(r.apply(this,arguments)+i.apply(this,arguments))/2+qc;return[Math.cos(u)*n,Math.sin(u)*n]},n};var qc=-Wa/2,Tc=2*Wa-1e-6;da.svg.line.radial=function(){var n=Oe(pu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},Xe.reverse=Ze,Ze.reverse=Xe,da.svg.area=function(){return du(gt)},da.svg.area.radial=function(){var n=du(pu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},da.svg.chord=function(){function n(n,o){var c=t(this,u,n,o),l=t(this,a,n,o);return\\\"M\\\"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?i(c.r,c.p1,c.r,c.p0):i(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+i(l.r,l.p1,c.r,c.p0))+\\\"Z\\\"}function t(n,t,e,r){var i=t.call(n,e,r),u=o.call(n,i,r),a=c.call(n,i,r)+qc,s=l.call(n,i,r)+qc;return{r:u,a0:a,a1:s,p0:[u*Math.cos(a),u*Math.sin(a)],p1:[u*Math.cos(s),u*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return\\\"A\\\"+n+\\\",\\\"+n+\\\" 0 \\\"+ +(e>Wa)+\\\",1 \\\"+t}function i(n,t,e,r){return\\\"Q 0,0 \\\"+r}var u=qe,a=Te,o=mu,c=hu,l=gu;return n.radius=function(t){return arguments.length?(o=ht(t),n):o},n.source=function(t){return arguments.length?(u=ht(t),n):u},n.target=function(t){return arguments.length?(a=ht(t),n):a},n.startAngle=function(t){return arguments.length?(c=ht(t),n):c},n.endAngle=function(t){return arguments.length?(l=ht(t),n):l},n},da.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),a=e.call(this,n,i),o=(u.y+a.y)/2,c=[u,{x:u.x,y:o},{x:a.x,y:o},a];return c=c.map(r),\\\"M\\\"+c[0]+\\\"C\\\"+c[1]+\\\" \\\"+c[2]+\\\" \\\"+c[3]}var t=qe,e=Te,r=vu;return n.source=function(e){return arguments.length?(t=ht(e),n):t},n.target=function(t){return arguments.length?(e=ht(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},da.svg.diagonal.radial=function(){var n=da.svg.diagonal(),t=vu,e=n.projection;return n.projection=function(n){return arguments.length?e(yu(t=n)):t},n},da.svg.symbol=function(){function n(n,r){return(Cc.get(t.call(this,n,r))||bu)(e.call(this,n,r))}var t=xu,e=Mu;return n.type=function(e){return arguments.length?(t=ht(e),n):t},n.size=function(t){return arguments.length?(e=ht(t),n):e},n};var Cc=da.map({circle:bu,cross:function(n){var t=Math.sqrt(n/5)/2;return\\\"M\\\"+-3*t+\\\",\\\"+-t+\\\"H\\\"+-t+\\\"V\\\"+-3*t+\\\"H\\\"+t+\\\"V\\\"+-t+\\\"H\\\"+3*t+\\\"V\\\"+t+\\\"H\\\"+t+\\\"V\\\"+3*t+\\\"H\\\"+-t+\\\"V\\\"+t+\\\"H\\\"+-3*t+\\\"Z\\\"},diamond:function(n){var t=Math.sqrt(n/(2*Lc)),e=t*Lc;return\\\"M0,\\\"+-t+\\\"L\\\"+e+\\\",0\\\"+\\\" 0,\\\"+t+\\\" \\\"+-e+\\\",0\\\"+\\\"Z\\\"},square:function(n){var t=Math.sqrt(n)/2;return\\\"M\\\"+-t+\\\",\\\"+-t+\\\"L\\\"+t+\\\",\\\"+-t+\\\" \\\"+t+\\\",\\\"+t+\\\" \\\"+-t+\\\",\\\"+t+\\\"Z\\\"},\\\"triangle-down\\\":function(n){var t=Math.sqrt(n/jc),e=t*jc/2;return\\\"M0,\\\"+e+\\\"L\\\"+t+\\\",\\\"+-e+\\\" \\\"+-t+\\\",\\\"+-e+\\\"Z\\\"},\\\"triangle-up\\\":function(n){var t=Math.sqrt(n/jc),e=t*jc/2;return\\\"M0,\\\"+-e+\\\"L\\\"+t+\\\",\\\"+e+\\\" \\\"+-t+\\\",\\\"+e+\\\"Z\\\"}});da.svg.symbolTypes=Cc.keys();var zc,Dc,jc=Math.sqrt(3),Lc=Math.tan(30*Ka),Hc=[],Fc=0;Hc.call=Fa.call,Hc.empty=Fa.empty,Hc.node=Fa.node,Hc.size=Fa.size,da.transition=function(n){return arguments.length?zc?n.transition():n:Ya.transition()},da.transition.prototype=Hc,Hc.select=function(n){var t,e,r,i=this.id,u=[];n=v(n);for(var a=-1,o=this.length;++a<o;){u.push(t=[]);for(var c=this[a],l=-1,s=c.length;++l<s;)(r=c[l])&&(e=n.call(r,r.__data__,l,a))?(\\\"__data__\\\"in r&&(e.__data__=r.__data__),Eu(e,l,i,r.__transition__[i]),t.push(e)):t.push(null)}return _u(u,i)},Hc.selectAll=function(n){var t,e,r,i,u,a=this.id,o=[];n=y(n);for(var c=-1,l=this.length;++c<l;)for(var s=this[c],f=-1,h=s.length;++f<h;)if(r=s[f]){u=r.__transition__[a],e=n.call(r,r.__data__,f,c),o.push(t=[]);for(var g=-1,p=e.length;++g<p;)(i=e[g])&&Eu(i,g,a,u),t.push(i)}return _u(o,a)},Hc.filter=function(n){var t,e,r,i=[];\\\"function\\\"!=typeof n&&(n=N(n));for(var u=0,a=this.length;a>u;u++){i.push(t=[]);for(var e=this[u],o=0,c=e.length;c>o;o++)(r=e[o])&&n.call(r,r.__data__,o)&&t.push(r)}return _u(i,this.id,this.time).ease(this.ease())},Hc.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):T(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Hc.attr=function(n,t){function e(){this.removeAttribute(o)}function r(){this.removeAttributeNS(o.space,o.local)}function i(n){return null==n?e:(n+=\\\"\\\",function(){var t,e=this.getAttribute(o);return e!==n&&(t=a(e,n),function(n){this.setAttribute(o,t(n))})})}function u(n){return null==n?r:(n+=\\\"\\\",function(){var t,e=this.getAttributeNS(o.space,o.local);return e!==n&&(t=a(e,n),function(n){this.setAttributeNS(o.space,o.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var a=\\\"transform\\\"==n?Vr:br,o=da.ns.qualify(n);return wu(this,\\\"attr.\\\"+n,t,o.local?u:i)},Hc.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=da.ns.qualify(n);return this.tween(\\\"attr.\\\"+n,i.local?r:e)},Hc.style=function(n,t,e){function r(){this.style.removeProperty(n)}function i(t){return null==t?r:(t+=\\\"\\\",function(){var r,i=ya.getComputedStyle(this,null).getPropertyValue(n);return i!==t&&(r=br(i,t),function(t){this.style.setProperty(n,r(t),e)})})}var u=arguments.length;if(3>u){if(\\\"string\\\"!=typeof n){2>u&&(t=\\\"\\\");for(e in n)this.style(e,n[e],t);return this}e=\\\"\\\"}return wu(this,\\\"style.\\\"+n,t,i)},Hc.styleTween=function(n,t,e){function r(r,i){var u=t.call(this,r,i,ya.getComputedStyle(this,null).getPropertyValue(n));return u&&function(t){this.style.setProperty(n,u(t),e)}}return arguments.length<3&&(e=\\\"\\\"),this.tween(\\\"style.\\\"+n,r)},Hc.text=function(n){return wu(this,\\\"text\\\",n,Su)},Hc.remove=function(){return this.each(\\\"end.transition\\\",function(){var n;!this.__transition__&&(n=this.parentNode)&&n.removeChild(this)})},Hc.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:(\\\"function\\\"!=typeof n&&(n=da.ease.apply(da,arguments)),T(this,function(e){e.__transition__[t].ease=n}))},Hc.delay=function(n){var t=this.id;return T(this,\\\"function\\\"==typeof n?function(e,r,i){e.__transition__[t].delay=0|n.call(e,e.__data__,r,i)}:(n|=0,function(e){e.__transition__[t].delay=n}))},Hc.duration=function(n){var t=this.id;return T(this,\\\"function\\\"==typeof n?function(e,r,i){e.__transition__[t].duration=Math.max(1,0|n.call(e,e.__data__,r,i))}:(n=Math.max(1,0|n),function(e){e.__transition__[t].duration=n}))},Hc.each=function(n,t){var e=this.id;if(arguments.length<2){var r=Dc,i=zc;zc=e,T(this,function(t,r,i){Dc=t.__transition__[e],n.call(t,t.__data__,r,i)}),Dc=r,zc=i}else T(this,function(r){var i=r.__transition__[e];(i.event||(i.event=da.dispatch(\\\"start\\\",\\\"end\\\"))).on(n,t)});return this},Hc.transition=function(){for(var n,t,e,r,i=this.id,u=++Fc,a=[],o=0,c=this.length;c>o;o++){a.push(n=[]);for(var t=this[o],l=0,s=t.length;s>l;l++)(e=t[l])&&(r=Object.create(e.__transition__[i]),r.delay+=r.duration,Eu(e,l,u,r)),n.push(e)}return _u(a,u)},da.svg.axis=function(){function n(n){n.each(function(){var n,f=da.select(this),h=null==l?e.ticks?e.ticks.apply(e,c):e.domain():l,g=null==t?e.tickFormat?e.tickFormat.apply(e,c):String:t,p=Nu(e,h,s),d=f.selectAll(\\\".tick.minor\\\").data(p,String),m=d.enter().insert(\\\"line\\\",\\\".tick\\\").attr(\\\"class\\\",\\\"tick minor\\\").style(\\\"opacity\\\",1e-6),v=da.transition(d.exit()).style(\\\"opacity\\\",1e-6).remove(),y=da.transition(d).style(\\\"opacity\\\",1),M=f.selectAll(\\\".tick.major\\\").data(h,String),x=M.enter().insert(\\\"g\\\",\\\".domain\\\").attr(\\\"class\\\",\\\"tick major\\\").style(\\\"opacity\\\",1e-6),b=da.transition(M.exit()).style(\\\"opacity\\\",1e-6).remove(),_=da.transition(M).style(\\\"opacity\\\",1),w=Vi(e),S=f.selectAll(\\\".domain\\\").data([0]),E=(S.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"domain\\\"),da.transition(S)),k=e.copy(),A=this.__chart__||k;\\nthis.__chart__=k,x.append(\\\"line\\\"),x.append(\\\"text\\\");var N=x.select(\\\"line\\\"),q=_.select(\\\"line\\\"),T=M.select(\\\"text\\\").text(g),C=x.select(\\\"text\\\"),z=_.select(\\\"text\\\");switch(r){case\\\"bottom\\\":n=ku,m.attr(\\\"y2\\\",u),y.attr(\\\"x2\\\",0).attr(\\\"y2\\\",u),N.attr(\\\"y2\\\",i),C.attr(\\\"y\\\",Math.max(i,0)+o),q.attr(\\\"x2\\\",0).attr(\\\"y2\\\",i),z.attr(\\\"x\\\",0).attr(\\\"y\\\",Math.max(i,0)+o),T.attr(\\\"dy\\\",\\\".71em\\\").style(\\\"text-anchor\\\",\\\"middle\\\"),E.attr(\\\"d\\\",\\\"M\\\"+w[0]+\\\",\\\"+a+\\\"V0H\\\"+w[1]+\\\"V\\\"+a);break;case\\\"top\\\":n=ku,m.attr(\\\"y2\\\",-u),y.attr(\\\"x2\\\",0).attr(\\\"y2\\\",-u),N.attr(\\\"y2\\\",-i),C.attr(\\\"y\\\",-(Math.max(i,0)+o)),q.attr(\\\"x2\\\",0).attr(\\\"y2\\\",-i),z.attr(\\\"x\\\",0).attr(\\\"y\\\",-(Math.max(i,0)+o)),T.attr(\\\"dy\\\",\\\"0em\\\").style(\\\"text-anchor\\\",\\\"middle\\\"),E.attr(\\\"d\\\",\\\"M\\\"+w[0]+\\\",\\\"+-a+\\\"V0H\\\"+w[1]+\\\"V\\\"+-a);break;case\\\"left\\\":n=Au,m.attr(\\\"x2\\\",-u),y.attr(\\\"x2\\\",-u).attr(\\\"y2\\\",0),N.attr(\\\"x2\\\",-i),C.attr(\\\"x\\\",-(Math.max(i,0)+o)),q.attr(\\\"x2\\\",-i).attr(\\\"y2\\\",0),z.attr(\\\"x\\\",-(Math.max(i,0)+o)).attr(\\\"y\\\",0),T.attr(\\\"dy\\\",\\\".32em\\\").style(\\\"text-anchor\\\",\\\"end\\\"),E.attr(\\\"d\\\",\\\"M\\\"+-a+\\\",\\\"+w[0]+\\\"H0V\\\"+w[1]+\\\"H\\\"+-a);break;case\\\"right\\\":n=Au,m.attr(\\\"x2\\\",u),y.attr(\\\"x2\\\",u).attr(\\\"y2\\\",0),N.attr(\\\"x2\\\",i),C.attr(\\\"x\\\",Math.max(i,0)+o),q.attr(\\\"x2\\\",i).attr(\\\"y2\\\",0),z.attr(\\\"x\\\",Math.max(i,0)+o).attr(\\\"y\\\",0),T.attr(\\\"dy\\\",\\\".32em\\\").style(\\\"text-anchor\\\",\\\"start\\\"),E.attr(\\\"d\\\",\\\"M\\\"+a+\\\",\\\"+w[0]+\\\"H0V\\\"+w[1]+\\\"H\\\"+a)}if(e.rangeBand){var D=k.rangeBand()/2,j=function(n){return k(n)+D};x.call(n,j),_.call(n,j)}else x.call(n,A),_.call(n,k),b.call(n,k),m.call(n,A),y.call(n,k),v.call(n,k)})}var t,e=da.scale.linear(),r=Pc,i=6,u=6,a=6,o=3,c=[10],l=null,s=0;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Oc?t+\\\"\\\":Pc,n):r},n.ticks=function(){return arguments.length?(c=arguments,n):c},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t,e){if(!arguments.length)return i;var r=arguments.length-1;return i=+t,u=r>1?+e:i,a=r>0?+arguments[r]:i,n},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(t){return arguments.length?(s=+t,n):s},n};var Pc=\\\"bottom\\\",Oc={top:1,right:1,bottom:1,left:1};da.svg.brush=function(){function n(u){u.each(function(){var u,a=da.select(this),s=a.selectAll(\\\".background\\\").data([0]),f=a.selectAll(\\\".extent\\\").data([0]),h=a.selectAll(\\\".resize\\\").data(l,String);a.style(\\\"pointer-events\\\",\\\"all\\\").on(\\\"mousedown.brush\\\",i).on(\\\"touchstart.brush\\\",i),s.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"background\\\").style(\\\"visibility\\\",\\\"hidden\\\").style(\\\"cursor\\\",\\\"crosshair\\\"),f.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"extent\\\").style(\\\"cursor\\\",\\\"move\\\"),h.enter().append(\\\"g\\\").attr(\\\"class\\\",function(n){return\\\"resize \\\"+n}).style(\\\"cursor\\\",function(n){return Yc[n]}).append(\\\"rect\\\").attr(\\\"x\\\",function(n){return/[ew]$/.test(n)?-3:null}).attr(\\\"y\\\",function(n){return/^[ns]/.test(n)?-3:null}).attr(\\\"width\\\",6).attr(\\\"height\\\",6).style(\\\"visibility\\\",\\\"hidden\\\"),h.style(\\\"display\\\",n.empty()?\\\"none\\\":null),h.exit().remove(),o&&(u=Vi(o),s.attr(\\\"x\\\",u[0]).attr(\\\"width\\\",u[1]-u[0]),e(a)),c&&(u=Vi(c),s.attr(\\\"y\\\",u[0]).attr(\\\"height\\\",u[1]-u[0]),r(a)),t(a)})}function t(n){n.selectAll(\\\".resize\\\").attr(\\\"transform\\\",function(n){return\\\"translate(\\\"+s[+/e$/.test(n)][0]+\\\",\\\"+s[+/^s/.test(n)][1]+\\\")\\\"})}function e(n){n.select(\\\".extent\\\").attr(\\\"x\\\",s[0][0]),n.selectAll(\\\".extent,.n>rect,.s>rect\\\").attr(\\\"width\\\",s[1][0]-s[0][0])}function r(n){n.select(\\\".extent\\\").attr(\\\"y\\\",s[0][1]),n.selectAll(\\\".extent,.e>rect,.w>rect\\\").attr(\\\"height\\\",s[1][1]-s[0][1])}function i(){function i(){var n=da.event.changedTouches;return n?da.touches(M,n)[0]:da.mouse(M)}function l(){32==da.event.keyCode&&(k||(v=null,N[0]-=s[1][0],N[1]-=s[1][1],k=2),g())}function h(){32==da.event.keyCode&&2==k&&(N[0]+=s[1][0],N[1]+=s[1][1],k=0,g())}function p(){var n=i(),u=!1;y&&(n[0]+=y[0],n[1]+=y[1]),k||(da.event.altKey?(v||(v=[(s[0][0]+s[1][0])/2,(s[0][1]+s[1][1])/2]),N[0]=s[+(n[0]<v[0])][0],N[1]=s[+(n[1]<v[1])][1]):v=null),S&&d(n,o,0)&&(e(_),u=!0),E&&d(n,c,1)&&(r(_),u=!0),u&&(t(_),b({type:\\\"brush\\\",mode:k?\\\"move\\\":\\\"resize\\\"}))}function d(n,t,e){var r,i,a=Vi(t),o=a[0],c=a[1],l=N[e],h=s[1][e]-s[0][e];return k&&(o-=l,c-=h+l),r=f[e]?Math.max(o,Math.min(c,n[e])):n[e],k?i=(r+=l)+h:(v&&(l=Math.max(o,Math.min(c,2*v[e]-r))),r>l?(i=r,r=l):i=l),s[0][e]!==r||s[1][e]!==i?(u=null,s[0][e]=r,s[1][e]=i,!0):void 0}function m(){p(),_.style(\\\"pointer-events\\\",\\\"all\\\").selectAll(\\\".resize\\\").style(\\\"display\\\",n.empty()?\\\"none\\\":null),da.select(\\\"body\\\").style(\\\"cursor\\\",null),q.on(\\\"mousemove.brush\\\",null).on(\\\"mouseup.brush\\\",null).on(\\\"touchmove.brush\\\",null).on(\\\"touchend.brush\\\",null).on(\\\"keydown.brush\\\",null).on(\\\"keyup.brush\\\",null),A(),b({type:\\\"brushend\\\"})}var v,y,M=this,x=da.select(da.event.target),b=a.of(M,arguments),_=da.select(M),w=x.datum(),S=!/^(n|s)$/.test(w)&&o,E=!/^(e|w)$/.test(w)&&c,k=x.classed(\\\"extent\\\"),A=H(),N=i(),q=da.select(ya).on(\\\"keydown.brush\\\",l).on(\\\"keyup.brush\\\",h);if(da.event.changedTouches?q.on(\\\"touchmove.brush\\\",p).on(\\\"touchend.brush\\\",m):q.on(\\\"mousemove.brush\\\",p).on(\\\"mouseup.brush\\\",m),k)N[0]=s[0][0]-N[0],N[1]=s[0][1]-N[1];else if(w){var T=+/w$/.test(w),C=+/^n/.test(w);y=[s[1-T][0]-N[0],s[1-C][1]-N[1]],N[0]=s[T][0],N[1]=s[C][1]}else da.event.altKey&&(v=N.slice());_.style(\\\"pointer-events\\\",\\\"none\\\").selectAll(\\\".resize\\\").style(\\\"display\\\",null),da.select(\\\"body\\\").style(\\\"cursor\\\",x.style(\\\"cursor\\\")),b({type:\\\"brushstart\\\"}),p()}var u,a=d(n,\\\"brushstart\\\",\\\"brush\\\",\\\"brushend\\\"),o=null,c=null,l=Rc[0],s=[[0,0],[0,0]],f=[!0,!0];return n.x=function(t){return arguments.length?(o=t,l=Rc[!o<<1|!c],n):o},n.y=function(t){return arguments.length?(c=t,l=Rc[!o<<1|!c],n):c},n.clamp=function(t){return arguments.length?(o&&c?f=[!!t[0],!!t[1]]:(o||c)&&(f[+!o]=!!t),n):o&&c?f:o||c?f[+!o]:null},n.extent=function(t){var e,r,i,a,l;return arguments.length?(u=[[0,0],[0,0]],o&&(e=t[0],r=t[1],c&&(e=e[0],r=r[0]),u[0][0]=e,u[1][0]=r,o.invert&&(e=o(e),r=o(r)),e>r&&(l=e,e=r,r=l),s[0][0]=0|e,s[1][0]=0|r),c&&(i=t[0],a=t[1],o&&(i=i[1],a=a[1]),u[0][1]=i,u[1][1]=a,c.invert&&(i=c(i),a=c(a)),i>a&&(l=i,i=a,a=l),s[0][1]=0|i,s[1][1]=0|a),n):(t=u||s,o&&(e=t[0][0],r=t[1][0],u||(e=s[0][0],r=s[1][0],o.invert&&(e=o.invert(e),r=o.invert(r)),e>r&&(l=e,e=r,r=l))),c&&(i=t[0][1],a=t[1][1],u||(i=s[0][1],a=s[1][1],c.invert&&(i=c.invert(i),a=c.invert(a)),i>a&&(l=i,i=a,a=l))),o&&c?[[e,i],[r,a]]:o?[e,r]:c&&[i,a])},n.clear=function(){return u=null,s[0][0]=s[0][1]=s[1][0]=s[1][1]=0,n},n.empty=function(){return o&&s[0][0]===s[1][0]||c&&s[0][1]===s[1][1]},da.rebind(n,a,\\\"on\\\")};var Yc={n:\\\"ns-resize\\\",e:\\\"ew-resize\\\",s:\\\"ns-resize\\\",w:\\\"ew-resize\\\",nw:\\\"nwse-resize\\\",ne:\\\"nesw-resize\\\",se:\\\"nwse-resize\\\",sw:\\\"nesw-resize\\\"},Rc=[[\\\"n\\\",\\\"e\\\",\\\"s\\\",\\\"w\\\",\\\"nw\\\",\\\"ne\\\",\\\"se\\\",\\\"sw\\\"],[\\\"e\\\",\\\"w\\\"],[\\\"n\\\",\\\"s\\\"],[]];da.time={};var Uc=Date,Ic=[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"];qu.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Vc.setUTCDate.apply(this._,arguments)},setDay:function(){Vc.setUTCDay.apply(this._,arguments)},setFullYear:function(){Vc.setUTCFullYear.apply(this._,arguments)},setHours:function(){Vc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Vc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Vc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Vc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Vc.setUTCSeconds.apply(this._,arguments)},setTime:function(){Vc.setTime.apply(this._,arguments)}};var Vc=Date.prototype,Xc=\\\"%a %b %e %X %Y\\\",Zc=\\\"%m/%d/%Y\\\",Bc=\\\"%H:%M:%S\\\",$c=[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],Wc=[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],Jc=[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],Gc=[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"];da.time.year=Tu(function(n){return n=da.time.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),da.time.years=da.time.year.range,da.time.years.utc=da.time.year.utc.range,da.time.day=Tu(function(n){var t=new Uc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),da.time.days=da.time.day.range,da.time.days.utc=da.time.day.utc.range,da.time.dayOfYear=function(n){var t=da.time.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},Ic.forEach(function(n,t){n=n.toLowerCase(),t=7-t;var e=da.time[n]=Tu(function(n){return(n=da.time.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=da.time.year(n).getDay();return Math.floor((da.time.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});da.time[n+\\\"s\\\"]=e.range,da.time[n+\\\"s\\\"].utc=e.utc.range,da.time[n+\\\"OfYear\\\"]=function(n){var e=da.time.year(n).getDay();return Math.floor((da.time.dayOfYear(n)+(e+t)%7)/7)}}),da.time.week=da.time.sunday,da.time.weeks=da.time.sunday.range,da.time.weeks.utc=da.time.sunday.utc.range,da.time.weekOfYear=da.time.sundayOfYear,da.time.format=function(n){function t(t){for(var r,i,u,a=[],o=-1,c=0;++o<e;)37===n.charCodeAt(o)&&(a.push(n.substring(c,o)),null!=(i=ol[r=n.charAt(++o)])&&(r=n.charAt(++o)),(u=cl[r])&&(r=u(t,null==i?\\\"e\\\"===r?\\\" \\\":\\\"0\\\":i)),a.push(r),c=o+1);return a.push(n.substring(c,o)),a.join(\\\"\\\")}var e=n.length;return t.parse=function(t){var e={y:1900,m:0,d:1,H:0,M:0,S:0,L:0},r=zu(e,n,t,0);if(r!=t.length)return null;\\\"p\\\"in e&&(e.H=e.H%12+12*e.p);var i=new Uc;return\\\"j\\\"in e?i.setFullYear(e.y,0,e.j):\\\"w\\\"in e&&(\\\"W\\\"in e||\\\"U\\\"in e)?(i.setFullYear(e.y,0,1),i.setFullYear(e.y,0,\\\"W\\\"in e?(e.w+6)%7+7*e.W-(i.getDay()+5)%7:e.w+7*e.U-(i.getDay()+6)%7)):i.setFullYear(e.y,e.m,e.d),i.setHours(e.H,e.M,e.S,e.L),i},t.toString=function(){return n},t};var Kc=Du($c),Qc=ju($c),nl=Du(Wc),tl=ju(Wc),el=Du(Jc),rl=ju(Jc),il=Du(Gc),ul=ju(Gc),al=/^%/,ol={\\\"-\\\":\\\"\\\",_:\\\" \\\",0:\\\"0\\\"},cl={a:function(n){return Wc[n.getDay()]},A:function(n){return $c[n.getDay()]},b:function(n){return Gc[n.getMonth()]},B:function(n){return Jc[n.getMonth()]},c:da.time.format(Xc),d:function(n,t){return Lu(n.getDate(),t,2)},e:function(n,t){return Lu(n.getDate(),t,2)},H:function(n,t){return Lu(n.getHours(),t,2)},I:function(n,t){return Lu(n.getHours()%12||12,t,2)},j:function(n,t){return Lu(1+da.time.dayOfYear(n),t,3)},L:function(n,t){return Lu(n.getMilliseconds(),t,3)},m:function(n,t){return Lu(n.getMonth()+1,t,2)},M:function(n,t){return Lu(n.getMinutes(),t,2)},p:function(n){return n.getHours()>=12?\\\"PM\\\":\\\"AM\\\"},S:function(n,t){return Lu(n.getSeconds(),t,2)},U:function(n,t){return Lu(da.time.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Lu(da.time.mondayOfYear(n),t,2)},x:da.time.format(Zc),X:da.time.format(Bc),y:function(n,t){return Lu(n.getFullYear()%100,t,2)},Y:function(n,t){return Lu(n.getFullYear()%1e4,t,4)},Z:ra,\\\"%\\\":function(){return\\\"%\\\"}},ll={a:Hu,A:Fu,b:Ru,B:Uu,c:Iu,d:Ju,e:Ju,H:Ku,I:Ku,j:Gu,L:ta,m:Wu,M:Qu,p:ea,S:na,U:Ou,w:Pu,W:Yu,x:Vu,X:Xu,y:Bu,Y:Zu,\\\"%\\\":ia},sl=/^\\\\s*\\\\d+/,fl=da.map({am:0,pm:1});da.time.format.utc=function(n){function t(n){try{Uc=qu;var t=new Uc;return t._=n,e(t)}finally{Uc=Date}}var e=da.time.format(n);return t.parse=function(n){try{Uc=qu;var t=e.parse(n);return t&&t._}finally{Uc=Date}},t.toString=e.toString,t};var hl=da.time.format.utc(\\\"%Y-%m-%dT%H:%M:%S.%LZ\\\");da.time.format.iso=Date.prototype.toISOString&&+new Date(\\\"2000-01-01T00:00:00.000Z\\\")?ua:hl,ua.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},ua.toString=hl.toString,da.time.second=Tu(function(n){return new Uc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),da.time.seconds=da.time.second.range,da.time.seconds.utc=da.time.second.utc.range,da.time.minute=Tu(function(n){return new Uc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),da.time.minutes=da.time.minute.range,da.time.minutes.utc=da.time.minute.utc.range,da.time.hour=Tu(function(n){var t=n.getTimezoneOffset()/60;return new Uc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),da.time.hours=da.time.hour.range,da.time.hours.utc=da.time.hour.utc.range,da.time.month=Tu(function(n){return n=da.time.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),da.time.months=da.time.month.range,da.time.months.utc=da.time.month.utc.range;var gl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],pl=[[da.time.second,1],[da.time.second,5],[da.time.second,15],[da.time.second,30],[da.time.minute,1],[da.time.minute,5],[da.time.minute,15],[da.time.minute,30],[da.time.hour,1],[da.time.hour,3],[da.time.hour,6],[da.time.hour,12],[da.time.day,1],[da.time.day,2],[da.time.week,1],[da.time.month,1],[da.time.month,3],[da.time.year,1]],dl=[[da.time.format(\\\"%Y\\\"),Ut],[da.time.format(\\\"%B\\\"),function(n){return n.getMonth()}],[da.time.format(\\\"%b %d\\\"),function(n){return 1!=n.getDate()}],[da.time.format(\\\"%a %d\\\"),function(n){return n.getDay()&&1!=n.getDate()}],[da.time.format(\\\"%I %p\\\"),function(n){return n.getHours()}],[da.time.format(\\\"%I:%M\\\"),function(n){return n.getMinutes()}],[da.time.format(\\\":%S\\\"),function(n){return n.getSeconds()}],[da.time.format(\\\".%L\\\"),function(n){return n.getMilliseconds()}]],ml=da.scale.linear(),vl=ca(dl);pl.year=function(n,t){return ml.domain(n.map(sa)).ticks(t).map(la)},da.time.scale=function(){return aa(da.scale.linear(),pl,vl)};var yl=pl.map(function(n){return[n[0].utc,n[1]]}),Ml=[[da.time.format.utc(\\\"%Y\\\"),Ut],[da.time.format.utc(\\\"%B\\\"),function(n){return n.getUTCMonth()}],[da.time.format.utc(\\\"%b %d\\\"),function(n){return 1!=n.getUTCDate()}],[da.time.format.utc(\\\"%a %d\\\"),function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],[da.time.format.utc(\\\"%I %p\\\"),function(n){return n.getUTCHours()}],[da.time.format.utc(\\\"%I:%M\\\"),function(n){return n.getUTCMinutes()}],[da.time.format.utc(\\\":%S\\\"),function(n){return n.getUTCSeconds()}],[da.time.format.utc(\\\".%L\\\"),function(n){return n.getUTCMilliseconds()}]],xl=ca(Ml);return yl.year=function(n,t){return ml.domain(n.map(ha)).ticks(t).map(fa)},da.time.scale.utc=function(){return aa(da.scale.linear(),yl,xl)},da.text=pt(function(n){return n.responseText}),da.json=function(n,t){return dt(n,\\\"application/json\\\",ga,t)},da.html=function(n,t){return dt(n,\\\"text/html\\\",pa,t)},da.xml=pt(function(n){return n.responseXML}),da}();}\\nexports.d3 = d3;\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/d3/d3.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/d3/d3.layout.cloud.js\": {\n \"text\": \"// Word cloud layout by Jason Davies, http://www.jasondavies.com/word-cloud/\\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\\n(function(exports) {\\n function cloud() {\\n var size = [256, 256],\\n text = cloudText,\\n font = cloudFont,\\n fontSize = cloudFontSize,\\n fontStyle = cloudFontNormal,\\n fontWeight = cloudFontNormal,\\n rotate = cloudRotate,\\n padding = cloudPadding,\\n spiral = archimedeanSpiral,\\n words = [],\\n timeInterval = Infinity,\\n event = d3.dispatch(\\\"word\\\", \\\"end\\\"),\\n timer = null,\\n cloud = {};\\n\\n cloud.start = function() {\\n var board = zeroArray((size[0] >> 5) * size[1]),\\n bounds = null,\\n n = words.length,\\n i = -1,\\n tags = [],\\n data = words.map(function(d, i) {\\n d.text = text.call(this, d, i);\\n d.font = font.call(this, d, i);\\n d.style = fontStyle.call(this, d, i);\\n d.weight = fontWeight.call(this, d, i);\\n d.rotate = rotate.call(this, d, i);\\n d.size = ~~fontSize.call(this, d, i);\\n d.padding = padding.call(this, d, i);\\n return d;\\n }).sort(function(a, b) { return b.size - a.size; });\\n\\n if (timer) clearInterval(timer);\\n timer = setInterval(step, 0);\\n step();\\n\\n return cloud;\\n\\n function step() {\\n var start = +new Date,\\n d;\\n while (+new Date - start < timeInterval && ++i < n && timer) {\\n d = data[i];\\n d.x = (size[0] * (Math.random() + .5)) >> 1;\\n d.y = (size[1] * (Math.random() + .5)) >> 1;\\n cloudSprite(d, data, i);\\n if (d.hasText && place(board, d, bounds)) {\\n tags.push(d);\\n event.word(d);\\n if (bounds) cloudBounds(bounds, d);\\n else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];\\n // Temporary hack\\n d.x -= size[0] >> 1;\\n d.y -= size[1] >> 1;\\n }\\n }\\n if (i >= n) {\\n cloud.stop();\\n event.end(tags, bounds);\\n }\\n }\\n }\\n\\n cloud.stop = function() {\\n if (timer) {\\n clearInterval(timer);\\n timer = null;\\n }\\n return cloud;\\n };\\n\\n cloud.timeInterval = function(x) {\\n if (!arguments.length) return timeInterval;\\n timeInterval = x == null ? Infinity : x;\\n return cloud;\\n };\\n\\n function place(board, tag, bounds) {\\n var perimeter = [{x: 0, y: 0}, {x: size[0], y: size[1]}],\\n startX = tag.x,\\n startY = tag.y,\\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\\n s = spiral(size),\\n dt = Math.random() < .5 ? 1 : -1,\\n t = -dt,\\n dxdy,\\n dx,\\n dy;\\n\\n while (dxdy = s(t += dt)) {\\n dx = ~~dxdy[0];\\n dy = ~~dxdy[1];\\n\\n if (Math.min(dx, dy) > maxDelta) break;\\n\\n tag.x = startX + dx;\\n tag.y = startY + dy;\\n\\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||\\n tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\\n // TODO only check for collisions within current bounds.\\n if (!bounds || !cloudCollide(tag, board, size[0])) {\\n if (!bounds || collideRects(tag, bounds)) {\\n var sprite = tag.sprite,\\n w = tag.width >> 5,\\n sw = size[0] >> 5,\\n lx = tag.x - (w << 4),\\n sx = lx & 0x7f,\\n msx = 32 - sx,\\n h = tag.y1 - tag.y0,\\n x = (tag.y + tag.y0) * sw + (lx >> 5),\\n last;\\n for (var j = 0; j < h; j++) {\\n last = 0;\\n for (var i = 0; i <= w; i++) {\\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\\n }\\n x += sw;\\n }\\n delete tag.sprite;\\n return true;\\n }\\n }\\n }\\n return false;\\n }\\n\\n cloud.words = function(x) {\\n if (!arguments.length) return words;\\n words = x;\\n return cloud;\\n };\\n\\n cloud.size = function(x) {\\n if (!arguments.length) return size;\\n size = [+x[0], +x[1]];\\n return cloud;\\n };\\n\\n cloud.font = function(x) {\\n if (!arguments.length) return font;\\n font = d3.functor(x);\\n return cloud;\\n };\\n\\n cloud.fontStyle = function(x) {\\n if (!arguments.length) return fontStyle;\\n fontStyle = d3.functor(x);\\n return cloud;\\n };\\n\\n cloud.fontWeight = function(x) {\\n if (!arguments.length) return fontWeight;\\n fontWeight = d3.functor(x);\\n return cloud;\\n };\\n\\n cloud.rotate = function(x) {\\n if (!arguments.length) return rotate;\\n rotate = d3.functor(x);\\n return cloud;\\n };\\n\\n cloud.text = function(x) {\\n if (!arguments.length) return text;\\n text = d3.functor(x);\\n return cloud;\\n };\\n\\n cloud.spiral = function(x) {\\n if (!arguments.length) return spiral;\\n spiral = spirals[x + \\\"\\\"] || x;\\n return cloud;\\n };\\n\\n cloud.fontSize = function(x) {\\n if (!arguments.length) return fontSize;\\n fontSize = d3.functor(x);\\n return cloud;\\n };\\n\\n cloud.padding = function(x) {\\n if (!arguments.length) return padding;\\n padding = d3.functor(x);\\n return cloud;\\n };\\n\\n return d3.rebind(cloud, event, \\\"on\\\");\\n }\\n\\n function cloudText(d) {\\n return d.text;\\n }\\n\\n function cloudFont() {\\n return \\\"serif\\\";\\n }\\n\\n function cloudFontNormal() {\\n return \\\"normal\\\";\\n }\\n\\n function cloudFontSize(d) {\\n return Math.sqrt(d.value);\\n }\\n\\n function cloudRotate() {\\n return (~~(Math.random() * 6) - 3) * 30;\\n }\\n\\n function cloudPadding() {\\n return 1;\\n }\\n\\n // Fetches a monochrome sprite bitmap for the specified text.\\n // Load in batches for speed.\\n function cloudSprite(d, data, di) {\\n if (d.sprite) return;\\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\\n var x = 0,\\n y = 0,\\n maxh = 0,\\n n = data.length;\\n --di;\\n while (++di < n) {\\n d = data[di];\\n c.save();\\n c.font = d.style + \\\" \\\" + d.weight + \\\" \\\" + ~~((d.size + 1) / ratio) + \\\"px \\\" + d.font;\\n var w = c.measureText(d.text + \\\"m\\\").width * ratio,\\n h = d.size << 1;\\n if (d.rotate) {\\n var sr = Math.sin(d.rotate * cloudRadians),\\n cr = Math.cos(d.rotate * cloudRadians),\\n wcr = w * cr,\\n wsr = w * sr,\\n hcr = h * cr,\\n hsr = h * sr;\\n w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;\\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\\n } else {\\n w = (w + 0x1f) >> 5 << 5;\\n }\\n if (h > maxh) maxh = h;\\n if (x + w >= (cw << 5)) {\\n x = 0;\\n y += maxh;\\n maxh = 0;\\n }\\n if (y + h >= ch) break;\\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\\n c.fillText(d.text, 0, 0);\\n if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0);\\n c.restore();\\n d.width = w;\\n d.height = h;\\n d.xoff = x;\\n d.yoff = y;\\n d.x1 = w >> 1;\\n d.y1 = h >> 1;\\n d.x0 = -d.x1;\\n d.y0 = -d.y1;\\n d.hasText = true;\\n x += w;\\n }\\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\\n sprite = [];\\n while (--di >= 0) {\\n d = data[di];\\n if (!d.hasText) continue;\\n var w = d.width,\\n w32 = w >> 5,\\n h = d.y1 - d.y0;\\n // Zero the buffer\\n for (var i = 0; i < h * w32; i++) sprite[i] = 0;\\n x = d.xoff;\\n if (x == null) return;\\n y = d.yoff;\\n var seen = 0,\\n seenRow = -1;\\n for (var j = 0; j < h; j++) {\\n for (var i = 0; i < w; i++) {\\n var k = w32 * j + (i >> 5),\\n m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\\n sprite[k] |= m;\\n seen |= m;\\n }\\n if (seen) seenRow = j;\\n else {\\n d.y0++;\\n h--;\\n j--;\\n y++;\\n }\\n }\\n d.y1 = d.y0 + seenRow;\\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\\n }\\n }\\n\\n // Use mask-based collision detection.\\n function cloudCollide(tag, board, sw) {\\n sw >>= 5;\\n var sprite = tag.sprite,\\n w = tag.width >> 5,\\n lx = tag.x - (w << 4),\\n sx = lx & 0x7f,\\n msx = 32 - sx,\\n h = tag.y1 - tag.y0,\\n x = (tag.y + tag.y0) * sw + (lx >> 5),\\n last;\\n for (var j = 0; j < h; j++) {\\n last = 0;\\n for (var i = 0; i <= w; i++) {\\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\\n & board[x + i]) return true;\\n }\\n x += sw;\\n }\\n return false;\\n }\\n\\n function cloudBounds(bounds, d) {\\n var b0 = bounds[0],\\n b1 = bounds[1];\\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\\n }\\n\\n function collideRects(a, b) {\\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\\n }\\n\\n function archimedeanSpiral(size) {\\n var e = size[0] / size[1];\\n return function(t) {\\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\\n };\\n }\\n\\n function rectangularSpiral(size) {\\n var dy = 4,\\n dx = dy * size[0] / size[1],\\n x = 0,\\n y = 0;\\n return function(t) {\\n var sign = t < 0 ? -1 : 1;\\n // See triangular numbers: T_n = n * (n + 1) / 2.\\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\\n case 0: x += dx; break;\\n case 1: y += dy; break;\\n case 2: x -= dx; break;\\n default: y -= dy; break;\\n }\\n return [x, y];\\n };\\n }\\n\\n // TODO reuse arrays?\\n function zeroArray(n) {\\n var a = [],\\n i = -1;\\n while (++i < n) a[i] = 0;\\n return a;\\n }\\n\\n var cloudRadians = Math.PI / 180,\\n cw = 1 << 11 >> 5,\\n ch = 1 << 11,\\n canvas,\\n ratio = 1;\\n\\n if (typeof document !== \\\"undefined\\\") {\\n canvas = document.createElement(\\\"canvas\\\");\\n canvas.width = 1;\\n canvas.height = 1;\\n ratio = Math.sqrt(canvas.getContext(\\\"2d\\\").getImageData(0, 0, 1, 1).data.length >> 2);\\n canvas.width = (cw << 5) / ratio;\\n canvas.height = ch / ratio;\\n } else {\\n // node-canvas support\\n var Canvas = require(\\\"canvas\\\");\\n canvas = new Canvas(cw << 5, ch);\\n }\\n\\n var c = canvas.getContext(\\\"2d\\\"),\\n spirals = {\\n archimedean: archimedeanSpiral,\\n rectangular: rectangularSpiral\\n };\\n c.fillStyle = c.strokeStyle = \\\"red\\\";\\n c.textAlign = \\\"center\\\";\\n\\n exports.cloud = cloud;\\n})(typeof exports === \\\"undefined\\\" ? d3.layout || (d3.layout = {}) : exports);\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/d3/d3.layout.cloud.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/d3/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/d3/readme\",\n \"text\": \"The D3 plugin is a proof-of-concept demo of integration with the D3.js data visualisation framework (http://d3js.org).\\n\\nIt is not currently in a state where it can be used for anything useful.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/d3]]\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/dynannotate":{"title":"$:/plugins/tiddlywiki/dynannotate","name":"Dynannotate","description":"Dynamic content annotation","author":"JeremyRuston","core-version":">=5.0.0","list":"readme examples","dependents":"$:/plugins/tiddlywiki/dynaview","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/dynannotate/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/readme\",\n \"text\": \"The ''Dynannotate'' plugin allows annotations on textual content to be created and displayed. It has three components:\\n\\n* The dynannotate widget overlays clickable textual annotations, search highlights and search snippets on the content that it contains\\n* The selection tracker displays a popup that tracks the selection, and keeps track of the selected text. It also tracks a prefix and suffix that can be used to disambiguate the selected text within the container\\n* The `<$action-popup>` widget is used for some specialised popup switching in the demo\\n\\n''Note that the TiddlyWiki core plugin __Dynaview__ is required for correct operation of __Dynannotate__''\\n\\n!! Dynannotate Widget\\n\\nThe attributes of the `<$dynannotate>` widget describe annotations to be overlaid over the text contained within its child widgets. A single annotation can be directly applied using the attributes or multiple annotations can be applied by providing a filter identifying the \\\"annotation tiddlers\\\" that specify each annotation.\\n\\nThe content of the `<$dynannotate>` widget should not contain HTML `<input>` or `<textarea>` text editing elements (and therefore should not contain TiddlyWiki's `<$edit-text>` widget)\\n\\nThe `<$dynannotate>` widget uses the selection tracker to support a popup that dynamically tracks selected text within it.\\n\\n!!! Attributes\\n\\n|!Attribute |!Description |\\n|target |Optional text to be annotated |\\n|targetPrefix |Optional prefix text to disambiguate the target |\\n|targetSuffix |Optional suffix text to disambiguate the target |\\n|filter |Filter identifying the annotation tiddlers applying to this content (see below) |\\n|actions |Action string to be executed when an annotation is clicked. The variable `annotationTiddler` contains the title of the tiddler corresponding to the annotation that was clicked, and the variable `modifierKey` contains \\\"ctrl\\\", \\\"shift\\\", \\\"ctrl-shift\\\", \\\"normal\\\" according to which modifier keys were pressed |\\n|popup |Popup state tiddler to be used to trigger a popup when an annotation is clicked |\\n|search |Search text to be highlighted within the widget |\\n|searchDisplay |\\\"overlay\\\" or \\\"snippet\\\" (see below) |\\n|searchMode |\\\"normal\\\" (default), \\\"regexp\\\" or \\\"whitespace\\\" (see below) |\\n|searchMinLength |Optional minimum length of search string |\\n|searchCaseSensitive |\\\"no\\\" (default) for a case insensitive search, or \\\"yes\\\" for a case sensitive search |\\n|searchClass |Optional CSS class to be added to search overlays |\\n|snippetContextLength |Optional length of search result contextual prefix/suffix |\\n|selection |Tiddler to which the currently selected text should be dynamically saved |\\n|selectionPrefix |Tiddler to which up to 50 characters preceding the currently selected text should be dynamically saved |\\n|selectionSuffix |Tiddler to which up to 50 characters succeeding the currently selected text should be dynamically saved |\\n|selectionPopup |Popup state tiddler to be used to trigger a popup when text is selected |\\n\\nThe values supported by the `searchDisplay` attribute are:\\n\\n* `overlay` - display search results as overlays over the contained text\\n* `snippet` - display search results as a sequence of highlighted snippets, and the original text is hidden. Selecting this option therefore disables the annotation functionality\\n\\nThe search modes supported by the `searchMode` attribute are:\\n\\n* `normal` - a literal string of plain text to match\\n* `regexp` - a JavaScript-style regular expression (without the quoting backslashes and flags)\\n* `whitespace` - a literal string to match while normalising runs of whitespace. This allows `a. b` to match `a. b`\\n\\nWhen the selection popup is triggered, the currently selected text can be found in the tiddler named in the `selection` attribute, with the disambiguating prefix and suffix in the tiddlers named in the `selectionPrefix` and `selectionPopup` tiddlers. Note that the selection text will be an empty string if the selection popup was triggered in response to a click (ie zero width selection).\\n\\nHere's a simple example that highlights the first occurrence of the word \\\"ut\\\" within the text contained within it:\\n\\n```\\n<$dynannotate target=\\\"ut\\\">\\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum\\n</$dynannotate>\\n```\\n\\nA prefix and/or suffix can be specified to disambiguate the annotation. For example, here we target the second occurrence of the word \\\"ut\\\":\\n\\n```\\n<$dynannotate target=\\\"ut\\\" targetPrefix=\\\"ullamco laboris nisi \\\" targetSuffix=\\\" aliquip ex ea commodo consequat\\\">\\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum\\n</$dynannotate>\\n```\\n\\nThe widget works by scanning the rendered text of its content, so it works even if the text is built dynamically:\\n\\n```\\n<$dynannotate target=\\\"HelloThere\\\">\\n<<list-links \\\"[tag[Work]]\\\">>\\n</$dynannotate>\\n```\\n\\n!!! Annotation Tiddlers\\n\\nAn annotation tiddler is a tiddler describing an annotation to be overlaid over another tiddler. Their fields are used as follows:\\n\\n|!Field |!Description |\\n|title |By convention the prefix `$:/annotations/<username>/` is used, but any title can be used |\\n|text |The text of the annotation |\\n|created, creator, modified, modifier |As per TiddlyWiki normal behaviour |\\n|annotate-tiddler |The title of the target tiddler being annotated (optional, see below) |\\n|annotate-text |The text being annotated in the target tiddler |\\n|annotate-prefix |Optional prefix to disambiguate the target annotation |\\n|annotate-suffix |Optional suffix to disambiguate the target annotation |\\n|annotate-colour |CSS colour for the annotation (defaults to `rgba(255,255,0,0.3)`) |\\n|annotate-blend-mode |CSS [[mix blend mode|https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode]] for the annotation (defaults to `multiply`) |\\n\\nNote that using the `annotate-tiddler` field to associate an annotation with the annotated tiddler is a lightweight convention employed by the examples; it isn't actually required by any of the JavaScript code. Thus authors can experiment with other techniques for recording the association.\\n\\n!! Selection Tracker\\n\\nThe selection tracker is incorporated within the `<$dynannotate>` widget, but it can be used independently for specialised applications.\\n\\nEach selection container is marked with the class `tc-dynannotate-selection-container`, and should contain the following attributes:\\n\\n* `data-annotation-selection-save`: title of tiddler to which the selected text should be saved\\n* `data-annotation-selection-prefix-save`: title of tiddler to which up to 50 characters preceding the currently selected text should be dynamically saved\\n* `data-annotation-selection-suffix-save`: title of tiddler to which up to 50 characters succeeding the currently selected text should be dynamically saved\\n* `data-annotation-selection-popup`: title of state tiddler used to trigger the selection popup\\n\\nNotes:\\n\\n* The selection popup will disappear if the selection is cancelled; this will happen if the user clicks on any other element apart than a button. Thus it is not possible to have any interactive controls within the popup apart from buttons\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/examples/combined\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/examples/combined\",\n \"tags\": \"$:/tags/dynannotateExamples\",\n \"caption\": \"Combined\",\n \"text\": \"\\\\define click-annotation-actions()\\n<$action-setfield $tiddler=\\\"$:/temp/dynannotate/demo/annotation-title\\\" $value=<<annotationTiddler>>/>\\n\\\\end\\n\\n\\\\define create-annotation-actions()\\n<$action-createtiddler\\n\\t$basetitle=\\\"$:/plugins/tiddlywiki/dynannotate/demo-annotation\\\"\\n\\t$savetitle={{{ [<chunk>addprefix[$:/state/dynannotate/temp-save-title/]] }}}\\n\\tannotate-tiddler=<<chunk>>\\n\\tannotate-text=<<text>>\\n\\tannotate-prefix=<<prefix>>\\n\\tannotate-suffix=<<suffix>>\\n\\tannotate-colour=<<colour>>\\n/>\\n<$set name=\\\"popup-coords\\\" value={{{ [<chunk>addprefix[$:/state/dynannotate/popup-selection/]get[text]] }}}>\\n<$action-deletetiddler $tiddler={{{ [<chunk>addprefix[$:/state/dynannotate/popup-selection/]] }}}/>\\n<$action-setfield $tiddler=\\\"$:/temp/dynannotate/demo/annotation-title\\\" $value={{{ [<chunk>addprefix[$:/state/dynannotate/temp-save-title/]get[text]] }}}/>\\n<$action-popup $state={{{ [<chunk>addprefix[$:/state/dynannotate/popup-annotation/]] }}} $coords=<<popup-coords>>/>\\n</$set>\\n\\\\end\\n\\n<div class=\\\"tc-dynannotation-example-info\\\">\\n\\nThis example combines many of the features of the dynannotate plugin:\\n\\n* using annotation tiddlers to store the details of each annotation\\n* triggering actions when the annotations are clicked\\n* attaching a popup to the annotations\\n* tracking the selection with another popup\\n\\nSee the [[source|$:/plugins/tiddlywiki/dynannotate/examples/combined]] for details\\n\\n</div>\\n\\nSearch: <$edit-text tiddler=\\\"$:/temp/search\\\" tag=\\\"input\\\"/>\\n\\n<$list filter=\\\"[all[tiddlers+shadows]tag[DynannotateDemo]sort[title]]\\\" variable=\\\"chunk\\\">\\n<div style=\\\"position:relative;\\\"><!-- Needed for the popups to work -->\\n<$dynannotate\\n\\tfilter=\\\"[all[shadows+tiddlers]!has[draft.of]annotate-tiddler<chunk>]\\\"\\n\\tactions=<<click-annotation-actions>>\\n\\tpopup={{{ [<chunk>addprefix[$:/state/dynannotate/popup-annotation/]] }}}\\n\\tselection={{{ [<chunk>addprefix[$:/state/dynannotate/selection/]] }}}\\n\\tselectionPrefix={{{ [<chunk>addprefix[$:/state/dynannotate/selection-prefix/]] }}}\\n\\tselectionSuffix={{{ [<chunk>addprefix[$:/state/dynannotate/selection-suffix/]] }}}\\n\\tselectionPopup={{{ [<chunk>addprefix[$:/state/dynannotate/popup-selection/]] }}}\\n\\tsearch={{$:/temp/search}}\\n\\tsearchClass=\\\"tc-dynannotation-search-overlay-blurred\\\"\\n\\tsearchMinLength={{$:/config/Search/MinLength}}\\n>\\n<$transclude tiddler=<<chunk>> mode=\\\"block\\\"/>\\n</$dynannotate>\\n<$reveal type=\\\"popup\\\" state={{{ [<chunk>addprefix[$:/state/dynannotate/popup-annotation/]] }}} position=\\\"belowright\\\" animate=\\\"yes\\\" retain=\\\"yes\\\" style=\\\"overflow-y:hidden;\\\">\\n<div class=\\\"tc-drop-down-wrapper\\\">\\n<div class=\\\"tc-drop-down tc-popup-keep\\\" style=\\\"max-width:550px;white-space: normal;overflow-y:hidden;\\\">\\n<$tiddler tiddler={{$:/temp/dynannotate/demo/annotation-title}}>\\n<p>\\n<h2>\\nThis is an annotation\\n</h2>\\n</p>\\n<p>\\nThe annotation is stored in the tiddler:\\n</p>\\n<p>\\n<$link><$view field=\\\"title\\\"/></$link>\\n</p>\\n<p>\\nThe annotated text is ''<$view field=\\\"annotate-text\\\"/>''.\\n</p>\\n<p>\\nAnnotation Colour:\\n<$macrocall $name='colour-picker' actions=\\\"\\\"\\\"\\n<$action-setfield $field=\\\"annotate-colour\\\" $value=<<colour-picker-value>>/>\\n\\\"\\\"\\\"/>\\n</p>\\n</$tiddler>\\n</div>\\n</div>\\n</$reveal>\\n<$reveal type=\\\"popup\\\" state={{{ [<chunk>addprefix[$:/state/dynannotate/popup-selection/]] }}} position=\\\"belowright\\\" animate=\\\"yes\\\" retain=\\\"yes\\\" style=\\\"overflow-y:hidden;\\\">\\n<div class=\\\"tc-drop-down-wrapper\\\">\\n<div class=\\\"tc-drop-down tc-popup-keep\\\" style=\\\"max-width:550px;white-space:normal;\\\">\\n<$vars\\n\\ttext={{{ [<chunk>addprefix[$:/state/dynannotate/selection/]get[text]] }}}\\n\\tprefix={{{ [<chunk>addprefix[$:/state/dynannotate/selection-prefix/]get[text]] }}}\\n\\tsuffix={{{ [<chunk>addprefix[$:/state/dynannotate/selection-suffix/]get[text]] }}}\\n\\tcolour={{{ [<chunk>addprefix[$:/state/dynannotate/annotation-colour/]get[text]] }}}\\n>\\n<$button actions=<<create-annotation-actions>>>\\nCreate annotation\\n</$button>\\n<p>\\nText: <$text text=<<text>>/>\\n</p>\\n<p>\\nPrefix: <$text text=<<prefix>>/>\\n</p>\\n<p>\\nSuffix: <$text text=<<suffix>>/>\\n</p>\\n</$vars>\\n</div>\\n</div>\\n</$reveal>\\n</div>\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-annotation-1\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-annotation-1\",\n \"annotate-tiddler\": \"$:/plugins/tiddlywiki/dynannotate/example-text-1\",\n \"annotate-text\": \"memory is transitory. Yet the speed of action\",\n \"annotate-colour\": \"SkyBlue\",\n \"annotate-blend-mode\": \"multiply\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-annotation-2\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-annotation-2\",\n \"annotate-tiddler\": \"$:/plugins/tiddlywiki/dynannotate/example-text-3\",\n \"annotate-text\": \"It needs a name, and to coin one at random, \\\"memex\\\" will do\",\n \"annotate-colour\": \"rgba(255,0,255,0.45)\",\n \"annotate-blend-mode\": \"multiply\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-annotation-3\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-annotation-3\",\n \"annotate-tiddler\": \"$:/plugins/tiddlywiki/dynannotate/example-text-5\",\n \"annotate-text\": \"it would take him hundreds of years to fill the repository\",\n \"annotate-colour\": \"#fff\",\n \"annotate-blend-mode\": \"difference\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-annotation-4\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-annotation-4\",\n \"annotate-tiddler\": \"$:/plugins/tiddlywiki/dynannotate/example-text-1\",\n \"annotate-text\": \"that\",\n \"annotate-prefix\": \"It has other characteristics, of course; trails \",\n \"annotate-suffix\": \" are not frequently followed are prone to fade\",\n \"annotate-colour\": \"rgba(255,0,255,0.45)\",\n \"annotate-blend-mode\": \"difference\",\n \"text\": \"(This tiddler is in .json format so that we can have field values that start with a whitespace\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-text-1\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-text-1\",\n \"source\": \"https://www.w3.org/History/1945/vbush/vbush.txt\",\n \"tags\": \"DynannotateDemo\",\n \"text\": \"The human mind does not work that way. It operates by association. With one item in its grasp, it snaps instantly to the next that is suggested by the association of thoughts, in accordance with some intricate web of trails carried by the cells of the brain. It has other characteristics, of course; trails that are not frequently followed are prone to fade, items are not fully permanent, memory is ''transitory''. Yet the speed of action, the intricacy of trails, the detail of mental pictures, is awe-inspiring beyond all else in nature.\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-text-2\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-text-2\",\n \"source\": \"https://www.w3.org/History/1945/vbush/vbush.txt\",\n \"tags\": \"DynannotateDemo\",\n \"text\": \"Man cannot hope fully to duplicate this mental process artificially, but he certainly ought to be able to learn from it. In minor ways he may even improve, for his records have relative permanency. The first idea, however, to be drawn from the analogy concerns selection. Selection by association, rather than by indexing, may yet be mechanized. One cannot hope thus to equal the speed and flexibility with which the mind follows an associative trail, but it should be possible to beat the mind decisively in regard to the permanence and clarity of the items resurrected from storage.\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-text-3\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-text-3\",\n \"source\": \"https://www.w3.org/History/1945/vbush/vbush.txt\",\n \"tags\": \"DynannotateDemo\",\n \"text\": \"Consider a future device for individual use, which is a sort of mechanized private file and library. It needs a name, and to coin one at random, \\\"memex\\\" will do. A memex is a device in which an individual stores all his books, records, and communications, and which is mechanized so that it may be consulted with exceeding speed and flexibility. It is an enlarged intimate supplement to his memory.\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-text-4\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-text-4\",\n \"source\": \"https://www.w3.org/History/1945/vbush/vbush.txt\",\n \"tags\": \"DynannotateDemo\",\n \"text\": \"It consists of a desk, and while it can presumably be operated from a distance, it is primarily the piece of furniture at which he works. On the top are slanting translucent screens, on which material can be projected for convenient reading. There is a keyboard, and sets of buttons and levers. Otherwise it looks like an ordinary desk.\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-text-5\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-text-5\",\n \"source\": \"https://www.w3.org/History/1945/vbush/vbush.txt\",\n \"tags\": \"DynannotateDemo\",\n \"text\": \"In one end is the stored material. The matter of bulk is well taken care of by improved microfilm. Only a small part of the interior of the memex is devoted to storage, the rest to mechanism. Yet if the user inserted 5000 pages of material a day it would take him hundreds of years to fill the repository, so he can be profligate and enter material freely.\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-text-6\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-text-6\",\n \"source\": \"https://www.w3.org/History/1945/vbush/vbush.txt\",\n \"tags\": \"DynannotateDemo\",\n \"text\": \"Most of the memex contents are purchased on microfilm ready for insertion. Books of all sorts, pictures, current periodicals, newspapers, are thus obtained and dropped into place. Business correspondence takes the same path. And there is provision for direct entry. On the top of the memex is a transparent platen. On this are placed longhand notes, photographs, memoranda, all sort of things. When one is in place, the depression of a lever causes it to be photographed onto the next blank space in a section of the memex film, dry photography being employed.\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-text-7\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-text-7\",\n \"source\": \"https://www.w3.org/History/1945/vbush/vbush.txt\",\n \"tags\": \"DynannotateDemo\",\n \"text\": \"There is, of course, provision for consultation of the record by the usual scheme of indexing. If the user wishes to consult a certain book, he taps its code on the keyboard, and the title page of the book promptly appears before him, projected onto one of his viewing positions. Frequently-used codes are mnemonic, so that he seldom consults his code book; but when he does, a single tap of a key projects it for his use. Moreover, he has supplemental levers. On deflecting one of these levers to the right he runs through the book before him, each page in turn being projected at a speed which just allows a recognizing glance at each. If he deflects it further to the right, he steps through the book 10 pages at a time; still further at 100 pages at a time. Deflection to the left gives him the same control backwards.\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/example-text-8\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/example-text-8\",\n \"source\": \"https://www.w3.org/History/1945/vbush/vbush.txt\",\n \"tags\": \"DynannotateDemo\",\n \"text\": \"A special button transfers him immediately to the first page of the index. Any given book of his library can thus be called up and consulted with far greater facility than if it were taken from a shelf. As he has several projection positions, he can leave one item in position while he calls up another. He can add marginal notes and comments, taking advantage of one possible type of dry photography, and it could even be arranged so that he can do this by a stylus scheme, such as is now employed in the telautograph seen in railroad waiting rooms, just as though he had the physical page before him.\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/examples\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/examples\",\n \"text\": \"<<tabs \\\"[all[tiddlers+shadows]tag[$:/tags/dynannotateExamples]!has[draft.of]]\\\" \\\"$:/plugins/tiddlywiki/dynannotate/examples/snippets\\\">>\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/examples/simple\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/examples/simple\",\n \"tags\": \"$:/tags/dynannotateExamples\",\n \"caption\": \"Simple\",\n \"text\": \"\\\\define show-example(example)\\n<$codeblock code=<<__example__>>/>\\n\\n//''Displays as:''//\\n\\n$example$\\n\\\\end\\n\\n<div class=\\\"tc-dynannotation-example-info\\\">\\n\\n!! Simple annotation\\n\\nWe use the `target*` attributes to specify a target string for the annotation and optionally a prefix and suffix for disambiguating multiple occurances.\\n\\n</div>\\n\\n<<show-example \\\"\\\"\\\"\\n<$dynannotate\\n\\ttarget=\\\"the\\\"\\n\\ttargetPrefix=\\\"Yet \\\"\\n\\ttargetSuffix=\\\" speed\\\"\\n>\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/dynannotate/example-text-1\\\" mode=\\\"block\\\"/>\\n</$dynannotate>\\n\\\"\\\"\\\">>\\n\\n<div class=\\\"tc-dynannotation-example-info\\\">\\n\\n!! Plain text searching\\n\\nWe use the `search` attribute to specify a search string for highlighting:\\n\\n</div>\\n\\n<<show-example \\\"\\\"\\\"\\n<$dynannotate\\n\\tsearch=\\\"the\\\"\\n>\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/dynannotate/example-text-1\\\" mode=\\\"block\\\"/>\\n</$dynannotate>\\n\\\"\\\"\\\">>\\n\\n<div class=\\\"tc-dynannotation-example-info\\\">\\n\\n!! Regular expression searching\\n\\nWe use the `mode` attribute set to `regexp` to highlight matches of a regular expression:\\n\\n</div>\\n\\n<<show-example \\\"\\\"\\\"\\n<$dynannotate\\n\\tsearch=\\\"the|an\\\"\\n\\tsearchMode=\\\"regexp\\\"\\n\\tsearchClass=\\\"tc-dynannotation-search-overlay-blurred\\\"\\n>\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/dynannotate/example-text-1\\\" mode=\\\"block\\\"/>\\n</$dynannotate>\\n\\\"\\\"\\\">>\\n\\n<div class=\\\"tc-dynannotation-example-info\\\">\\n\\n!! Normalised whitespace searching\\n\\nWe use the `mode` attribute set to `whitespace` to search for a string with whitespace normalised (ie runs of whitespace are collapsed to a single space for matching purposes):\\n\\n</div>\\n\\n<<show-example \\\"\\\"\\\"\\n<$dynannotate\\n\\tsearch=\\\"does not work that way. It operates\\\"\\n\\tsearchMode=\\\"whitespace\\\"\\n\\tsearchClass=\\\"tc-dynannotation-search-overlay-animated\\\"\\n>\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/dynannotate/example-text-1\\\" mode=\\\"block\\\"/>\\n</$dynannotate>\\n\\\"\\\"\\\">>\\n\\n<div class=\\\"tc-dynannotation-example-info\\\">\\n\\n!! Using annotation tiddlers\\n\\nAnnotation tiddlers can be used to describe annotations. This example references the following annotation tiddlers:\\n\\n</div>\\n\\n<<list-links \\\"[all[shadows+tiddlers]annotate-tiddler[$:/plugins/tiddlywiki/dynannotate/example-text-1]]\\\">>\\n\\n<<show-example \\\"\\\"\\\"\\n<$dynannotate\\n\\tfilter=\\\"[all[shadows+tiddlers]annotate-tiddler[$:/plugins/tiddlywiki/dynannotate/example-text-1]]\\\"\\n>\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/dynannotate/example-text-1\\\" mode=\\\"block\\\"/>\\n</$dynannotate>\\n\\\"\\\"\\\">>\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/examples/snippets\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/examples/snippets\",\n \"tags\": \"$:/tags/dynannotateExamples\",\n \"caption\": \"Snippets\",\n \"text\": \"\\\\define show-example(example)\\n<$codeblock code=<<__example__>>/>\\n\\n//''Displays as:''//\\n\\n$example$\\n\\\\end\\n\\n<div class=\\\"tc-dynannotation-example-info\\\">\\n\\n!! Search result snippets\\n\\nThe `searchDisplay` attribute can be set to `snippet` (instead of the default `overlay`) in order to display contextual snippets around search results. \\n\\n</div>\\n\\n<<show-example \\\"\\\"\\\"\\n<$dynannotate\\n\\tsearch=\\\"the\\\"\\n\\tsearchDisplay=\\\"snippet\\\"\\n><$transclude tiddler=\\\"$:/plugins/tiddlywiki/dynannotate/example-text-1\\\" mode=\\\"block\\\"/>\\n</$dynannotate>\\n\\\"\\\"\\\">>\\n\\n<div class=\\\"tc-dynannotation-example-info\\\">\\n\\n!! Multiple search result snippets\\n\\nThis example searches across multiple tiddlers and shows snippets for those tiddlers that match.\\n\\n</div>\\n\\n<$macrocall $name=\\\"show-example\\\" example=\\\"\\\"\\\"\\nSearch: <$edit-text tiddler=\\\"$:/temp/search\\\" tag=\\\"input\\\"/>\\n<$list filter=\\\"[all[tiddlers+shadows]tag[DynannotateDemo]search:text{$:/temp/search}sort[title]]\\\">\\n<dl>\\n<dt>\\n<$link>\\n<$text text=<<currentTiddler>>/>\\n</$link>\\n</dt>\\n<dd>\\n<$dynannotate\\n\\tsearch={{$:/temp/search}}\\n\\tsearchMode=\\\"whitespace\\\"\\n\\tsearchDisplay=\\\"snippet\\\"\\n><$transclude tiddler=<<currentTiddler>> mode=\\\"block\\\"/>\\n</$dynannotate>\\n</dd>\\n</dl>\\n</$list>\\n\\\"\\\"\\\"/>\\n\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/dynannotate.js\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/dynannotate.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/dynannotate/dynannotate.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nDynannotate widget\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar TextMap = require(\\\"$:/plugins/tiddlywiki/dynannotate/textmap.js\\\").TextMap;\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n\\nvar DynannotateWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDynannotateWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDynannotateWidget.prototype.render = function(parent,nextSibling) {\\n\\tvar self = this;\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create our DOM nodes\\n\\tvar isSnippetMode = this.isSnippetMode();\\n\\tthis.domContent = $tw.utils.domMaker(\\\"div\\\",{\\n\\t\\t\\\"class\\\": \\\"tc-dynannotation-selection-container\\\"\\n\\t});\\n\\tif(isSnippetMode) {\\n\\t\\tthis.domContent.setAttribute(\\\"hidden\\\",\\\"hidden\\\");\\t\\t\\n\\t}\\n\\tthis.domAnnotations = $tw.utils.domMaker(\\\"div\\\",{\\n\\t\\t\\\"class\\\": \\\"tc-dynannotation-annotation-wrapper\\\"\\n\\t});\\n\\tthis.domSnippets = $tw.utils.domMaker(\\\"div\\\",{\\n\\t\\t\\\"class\\\": \\\"tc-dynannotation-snippet-wrapper\\\"\\n\\t});\\n\\tthis.domSearches = $tw.utils.domMaker(\\\"div\\\",{\\n\\t\\t\\\"class\\\": \\\"tc-dynannotation-search-wrapper\\\"\\n\\t});\\n\\tthis.domWrapper = $tw.utils.domMaker(\\\"div\\\",{\\n\\t\\t\\\"class\\\": \\\"tc-dynannotation-wrapper\\\",\\n\\t\\tchildren: [this.domContent,this.domAnnotations,this.domSnippets,this.domSearches]\\n\\t})\\n\\tparent.insertBefore(this.domWrapper,nextSibling);\\n\\tthis.domNodes.push(this.domWrapper);\\n\\t// Apply the selection tracker data to the DOM\\n\\tif(!isSnippetMode) {\\n\\t\\tthis.applySelectionTrackerData();\\t\\t\\n\\t}\\n\\t// Render our child widgets\\n\\tthis.renderChildren(this.domContent,null);\\n\\tif(isSnippetMode) {\\n\\t\\t// Apply search snippets\\n\\t\\tthis.applySnippets();\\n\\t} else {\\n\\t\\t// Get the list of annotation tiddlers\\n\\t\\tthis.getAnnotationTiddlers();\\n\\t\\t// Apply annotations\\n\\t\\tthis.applyAnnotations();\\n\\t\\t// Apply search overlays\\n\\t\\tthis.applySearch();\\t\\t\\n\\t}\\n\\t// Save the width of the wrapper so that we can tell when it changes\\n\\tthis.wrapperWidth = this.domWrapper.offsetWidth;\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDynannotateWidget.prototype.execute = function() {\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\nDynannotateWidget.prototype.isSnippetMode = function() {\\n\\treturn this.getAttribute(\\\"searchDisplay\\\") === \\\"snippet\\\";\\n}\\n\\n/*\\nSave the data attributes required by the selection tracker\\n*/\\nDynannotateWidget.prototype.applySelectionTrackerData = function() {\\n\\tif(this.hasAttribute(\\\"selection\\\")) {\\n\\t\\tthis.domContent.setAttribute(\\\"data-annotation-selection-save\\\",this.getAttribute(\\\"selection\\\"));\\n\\t} else {\\n\\t\\tthis.domContent.removeAttribute(\\\"data-annotation-selection-save\\\");\\n\\t}\\n\\tif(this.hasAttribute(\\\"selectionPopup\\\")) {\\n\\t\\tthis.domContent.setAttribute(\\\"data-annotation-selection-popup\\\",this.getAttribute(\\\"selectionPopup\\\"));\\n\\t} else {\\n\\t\\tthis.domContent.removeAttribute(\\\"data-annotation-selection-popup\\\");\\n\\t}\\n\\tif(this.hasAttribute(\\\"selectionPrefix\\\")) {\\n\\t\\tthis.domContent.setAttribute(\\\"data-annotation-selection-prefix-save\\\",this.getAttribute(\\\"selectionPrefix\\\"));\\n\\t} else {\\n\\t\\tthis.domContent.removeAttribute(\\\"data-annotation-selection-prefix-save\\\");\\n\\t}\\n\\tif(this.hasAttribute(\\\"selectionSuffix\\\")) {\\n\\t\\tthis.domContent.setAttribute(\\\"data-annotation-selection-suffix-save\\\",this.getAttribute(\\\"selectionSuffix\\\"));\\n\\t} else {\\n\\t\\tthis.domContent.removeAttribute(\\\"data-annotation-selection-suffix-save\\\");\\n\\t}\\n};\\n\\n/*\\nCreate overlay dom elements to cover a specified range\\n\\noptions include:\\n\\tstartNode: Start node of range\\n\\tstartOffset: Start offset of range\\n\\tendNode: End node of range\\n\\tendOffset: End offset of range\\n\\tclassName: Optional classname for the overlay\\n\\twrapper: Wrapper dom node for the overlays\\n\\tcolour: Optional CSS colour for the overlay\\n\\tblendMode: Optional CSS mix blend mode for the overlay\\n\\tonclick: Optional click event handler for the overlay\\n*/\\nDynannotateWidget.prototype.createOverlay = function(options) {\\n\\tvar self = this;\\n\\t// Create a range covering the text\\n\\tvar range = this.document.createRange();\\n\\trange.setStart(options.startNode,options.startOffset);\\n\\trange.setEnd(options.endNode,options.endOffset);\\n\\t// Get the position of the range\\n\\tvar rects = range.getClientRects();\\n\\tif(rects) {\\n\\t\\t// Paint each rectangle\\n\\t\\tvar parentRect = this.domContent.getBoundingClientRect();\\n\\t\\t$tw.utils.each(rects,function(rect) {\\n\\t\\t\\tvar domOverlay = self.document.createElement(\\\"div\\\");\\n\\t\\t\\tdomOverlay.className = (options.className || \\\"\\\") + \\\" tc-dynaview-request-refresh-on-resize\\\";\\n\\t\\t\\tdomOverlay.style.top = (rect.top - parentRect.top) + \\\"px\\\";\\n\\t\\t\\tdomOverlay.style.left = (rect.left - parentRect.left) + \\\"px\\\";\\n\\t\\t\\tdomOverlay.style.width = rect.width + \\\"px\\\";\\n\\t\\t\\tdomOverlay.style.height = rect.height + \\\"px\\\";\\n\\t\\t\\tdomOverlay.style.backgroundColor = options.colour;\\n\\t\\t\\tdomOverlay.style.mixBlendMode = options.blendMode;\\n\\t\\t\\tif(options.onclick) {\\n\\t\\t\\t\\tdomOverlay.addEventListener(\\\"click\\\",function(event) {\\n\\t\\t\\t\\t\\tvar modifierKey = event.ctrlKey && !event.shiftKey ? \\\"ctrl\\\" : event.shiftKey && !event.ctrlKey ? \\\"shift\\\" : event.ctrlKey && event.shiftKey ? \\\"ctrl-shift\\\" : \\\"normal\\\";\\n\\t\\t\\t\\t\\toptions.onclick(event,domOverlay,modifierKey);\\n\\t\\t\\t\\t},false);\\n\\t\\t\\t}\\n\\t\\t\\toptions.wrapper.appendChild(domOverlay);\\n\\t\\t});\\n\\t}\\n};\\n\\nDynannotateWidget.prototype.getAnnotationTiddlers = function() {\\n\\tthis.annotationTiddlers = this.wiki.filterTiddlers(this.getAttribute(\\\"filter\\\",\\\"\\\"),this);\\n};\\n\\nDynannotateWidget.prototype.removeAnnotations = function() {\\n\\twhile(this.domAnnotations.hasChildNodes()) {\\n\\t\\tthis.domAnnotations.removeChild(this.domAnnotations.firstChild);\\n\\t}\\n};\\n\\nDynannotateWidget.prototype.applyAnnotations = function() {\\n\\tvar self = this;\\n\\t// Remove any previous annotation overlays\\n\\tthis.removeAnnotations();\\n\\t// Don't do anything if there are no annotations to apply\\n\\tif(this.annotationTiddlers.length === 0 && !this.hasAttribute(\\\"target\\\")) {\\n\\t\\treturn;\\n\\t}\\n\\t// Build the map of the text content\\n\\tvar textMap = new TextMap(this.domContent);\\n\\t// We'll dynamically build the click event handler so that we can reuse it\\n\\tvar clickHandlerFn = function(title) {\\n\\t\\treturn function(event,domOverlay,modifierKey) {\\n\\t\\t\\tself.invokeActionString(self.getAttribute(\\\"actions\\\"),self,event,{annotationTiddler: title, modifier: modifierKey});\\n\\t\\t\\tif(self.hasAttribute(\\\"popup\\\")) {\\n\\t\\t\\t\\t$tw.popup.triggerPopup({\\n\\t\\t\\t\\t\\tdomNode: domOverlay,\\n\\t\\t\\t\\t\\ttitle: self.getAttribute(\\\"popup\\\"),\\n\\t\\t\\t\\t\\twiki: self.wiki\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\t\\t\\t\\n\\t\\t};\\n\\t};\\n\\t// Draw the overlay for the \\\"target\\\" attribute\\n\\tif(this.hasAttribute(\\\"target\\\")) {\\n\\t\\tvar result = textMap.findText(this.getAttribute(\\\"target\\\"),this.getAttribute(\\\"targetPrefix\\\"),this.getAttribute(\\\"targetSuffix\\\"));\\n\\t\\tif(result) {\\n\\t\\t\\tthis.createOverlay({\\n\\t\\t\\t\\tstartNode: result.startNode,\\n\\t\\t\\t\\tstartOffset: result.startOffset,\\n\\t\\t\\t\\tendNode: result.endNode,\\n\\t\\t\\t\\tendOffset: result.endOffset,\\n\\t\\t\\t\\twrapper: self.domAnnotations,\\n\\t\\t\\t\\tclassName: \\\"tc-dynannotation-annotation-overlay\\\",\\n\\t\\t\\t\\tonclick: clickHandlerFn(null)\\n\\t\\t\\t});\\n\\t\\t}\\t\\t\\n\\t}\\n\\t// Draw the overlays for each annotation tiddler\\n\\t$tw.utils.each(this.annotationTiddlers,function(title) {\\n\\t\\tvar tiddler = self.wiki.getTiddler(title),\\n\\t\\t\\tannotateText = tiddler.fields[\\\"annotate-text\\\"],\\n\\t\\t\\tannotatePrefix = tiddler.fields[\\\"annotate-prefix\\\"],\\n\\t\\t\\tannotateSuffix = tiddler.fields[\\\"annotate-suffix\\\"];\\n\\t\\tif(tiddler && annotateText) {\\n\\t\\t\\tvar result = textMap.findText(annotateText,annotatePrefix,annotateSuffix);\\n\\t\\t\\tif(result) {\\n\\t\\t\\t\\tself.createOverlay({\\n\\t\\t\\t\\t\\tstartNode: result.startNode,\\n\\t\\t\\t\\t\\tstartOffset: result.startOffset,\\n\\t\\t\\t\\t\\tendNode: result.endNode,\\n\\t\\t\\t\\t\\tendOffset: result.endOffset,\\n\\t\\t\\t\\t\\twrapper: self.domAnnotations,\\n\\t\\t\\t\\t\\tclassName: \\\"tc-dynannotation-annotation-overlay\\\",\\n\\t\\t\\t\\t\\tcolour: tiddler.fields[\\\"annotate-colour\\\"],\\n\\t\\t\\t\\t\\tblendMode: tiddler.fields[\\\"annotate-blend-mode\\\"],\\n\\t\\t\\t\\t\\tonclick: clickHandlerFn(title)\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\nDynannotateWidget.prototype.removeSearch = function() {\\n\\twhile(this.domSearches.hasChildNodes()) {\\n\\t\\tthis.domSearches.removeChild(this.domSearches.firstChild);\\n\\t}\\n};\\n\\nDynannotateWidget.prototype.applySearch = function() {\\n\\tvar self = this;\\n\\t// Remove any previous search overlays\\n\\tthis.removeSearch();\\n\\t// Gather parameters\\n\\tvar searchString = this.getAttribute(\\\"search\\\",\\\"\\\"),\\n\\t\\tsearchMode = this.getAttribute(\\\"searchMode\\\"),\\n\\t\\tsearchCaseSensitive = this.getAttribute(\\\"searchCaseSensitive\\\",\\\"yes\\\") === \\\"yes\\\",\\n\\t\\tsearchMinLength = parseInt(this.getAttribute(\\\"searchMinLength\\\",\\\"1\\\"),10) || 1;\\n\\t// Bail if search string too short\\n\\tif(searchString.length < searchMinLength) {\\n\\t\\treturn;\\n\\t}\\n\\t// Build the map of the text content\\n\\tvar textMap = new TextMap(this.domContent);\\n\\t// Search for the string\\n\\tvar matches = textMap.search(this.getAttribute(\\\"search\\\",\\\"\\\"),{\\n\\t\\tmode: this.getAttribute(\\\"searchMode\\\"),\\n\\t\\tcaseSensitive: this.getAttribute(\\\"searchCaseSensitive\\\",\\\"yes\\\") === \\\"yes\\\"\\n\\t});\\n\\t// Create overlays for each match\\n\\t$tw.utils.each(matches,function(match) {\\n\\t\\tself.createOverlay({\\n\\t\\t\\tstartNode: match.startNode,\\n\\t\\t\\tstartOffset: match.startOffset,\\n\\t\\t\\tendNode: match.endNode,\\n\\t\\t\\tendOffset: match.endOffset,\\n\\t\\t\\twrapper: self.domSearches,\\n\\t\\t\\tclassName: \\\"tc-dynannotation-search-overlay \\\" + self.getAttribute(\\\"searchClass\\\",\\\"\\\")\\n\\t\\t});\\n\\t});\\n};\\n\\nDynannotateWidget.prototype.removeSnippets = function() {\\n\\twhile(this.domSnippets.hasChildNodes()) {\\n\\t\\tthis.domSnippets.removeChild(this.domSnippets.firstChild);\\n\\t}\\n};\\n\\nDynannotateWidget.prototype.applySnippets = function() {\\n\\tvar self = this,\\n\\t\\tcontextLength = parseInt(this.getAttribute(\\\"snippetContextLength\\\",\\\"33\\\"),10) || 0;\\n\\t// Build the map of the text content\\n\\tvar textMap = new TextMap(this.domContent);\\n\\t// Remove any previous snippets\\n\\tthis.removeSnippets();\\n\\t// Gather parameters\\n\\tvar searchString = this.getAttribute(\\\"search\\\",\\\"\\\"),\\n\\t\\tsearchMode = this.getAttribute(\\\"searchMode\\\"),\\n\\t\\tsearchCaseSensitive = this.getAttribute(\\\"searchCaseSensitive\\\",\\\"yes\\\") === \\\"yes\\\",\\n\\t\\tsearchMinLength = parseInt(this.getAttribute(\\\"searchMinLength\\\",\\\"1\\\"),10) || 1;\\n\\t// Build the map of the text content\\n\\tvar textMap = new TextMap(this.domContent);\\n\\t// Search for the string\\n\\tvar matches = textMap.search(this.getAttribute(\\\"search\\\",\\\"\\\"),{\\n\\t\\tmode: this.getAttribute(\\\"searchMode\\\"),\\n\\t\\tcaseSensitive: this.getAttribute(\\\"searchCaseSensitive\\\",\\\"no\\\") === \\\"yes\\\"\\n\\t});\\n\\t// Output a snippet for each match\\n\\tif(matches && matches.length > 0) {\\n\\t\\tvar merged = false, // Keep track of whether the context of the previous match merges into this one\\n\\t\\t\\tellipsis = String.fromCharCode(8230),\\n\\t\\t\\tcontainer = null; // Track the container so that we can reuse the same container for merged matches\\n\\t\\t$tw.utils.each(matches,function(match,index) {\\n\\t\\t\\t// Create a container if we're not reusing it\\n\\t\\t\\tif(!container) {\\n\\t\\t\\t\\tcontainer = $tw.utils.domMaker(\\\"div\\\",{\\n\\t\\t\\t\\t\\t\\\"class\\\": \\\"tc-dynannotate-snippet\\\"\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tself.domSnippets.appendChild(container);\\n\\t\\t\\t}\\n\\t\\t\\t// Output the preceding context if it wasn't merged into the previous match\\n\\t\\t\\tif(!merged) {\\n\\t\\t\\t\\tcontainer.appendChild($tw.utils.domMaker(\\\"span\\\",{\\n\\t\\t\\t\\t\\ttext: (match.startPos < contextLength ? \\\"\\\" : ellipsis) +\\n\\t\\t\\t\\t\\t\\ttextMap.string.slice(Math.max(match.startPos - contextLength,0),match.startPos),\\n\\t\\t\\t\\t\\t\\\"class\\\": \\\"tc-dynannotate-snippet-context\\\"\\n\\t\\t\\t\\t}));\\n\\t\\t\\t}\\n\\t\\t\\t// Output the match\\n\\t\\t\\tcontainer.appendChild($tw.utils.domMaker(\\\"span\\\",{\\n\\t\\t\\t\\ttext: textMap.string.slice(match.startPos,match.endPos),\\n\\t\\t\\t\\t\\\"class\\\": \\\"tc-dynannotate-snippet-highlight \\\" + self.getAttribute(\\\"searchClass\\\")\\n\\t\\t\\t}));\\n\\t\\t\\t// Does the context of this match merge into the next?\\n\\t\\t\\tmerged = index < matches.length - 1 && matches[index + 1].startPos - match.endPos <= 2 * contextLength;\\n\\t\\t\\tif(merged) {\\n\\t\\t\\t\\t// If they're merged, use the context up until the next match\\n\\t\\t\\t\\tcontainer.appendChild($tw.utils.domMaker(\\\"span\\\",{\\n\\t\\t\\t\\t\\ttext: textMap.string.slice(match.endPos,matches[index + 1].startPos),\\n\\t\\t\\t\\t\\t\\\"class\\\": \\\"tc-dynannotate-snippet-context\\\"\\n\\t\\t\\t\\t}));\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// If they're not merged, use the context up to the end\\n\\t\\t\\t\\tcontainer.appendChild($tw.utils.domMaker(\\\"span\\\",{\\n\\t\\t\\t\\t\\ttext: textMap.string.slice(match.endPos,match.endPos + contextLength) +\\n\\t\\t\\t\\t\\t\\t((match.endPos + contextLength) >= textMap.string.length ? \\\"\\\" : ellipsis),\\n\\t\\t\\t\\t\\t\\\"class\\\": \\\"tc-dynannotate-snippet-context\\\"\\n\\t\\t\\t\\t}));\\n\\t\\t\\t}\\n\\t\\t\\t// Reuse the next container if we're merged\\n\\t\\t\\tif(!merged) {\\n\\t\\t\\t\\tcontainer = null;\\n\\t\\t\\t}\\n\\t\\t});\\t\\t\\n\\t}\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nDynannotateWidget.prototype.refresh = function(changedTiddlers) {\\n\\t// Get the changed attributes\\n\\tvar changedAttributes = this.computeAttributes();\\n\\t// Refresh completely if the \\\"searchDisplay\\\" attribute has changed\\n\\tif(changedAttributes.searchDisplay) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\t// Check whether we're in snippet mode\\n\\tvar isSnippetMode = this.isSnippetMode();\\n\\t// Refresh the child widgets\\n\\tvar childrenDidRefresh = this.refreshChildren(changedTiddlers);\\n\\t// Reapply the selection tracker data to the DOM\\n\\tif(changedAttributes.selection || changedAttributes.selectionPrefix || changedAttributes.selectionSuffix || changedAttributes.selectionPopup) {\\n\\t\\tthis.applySelectionTrackerData();\\t\\t\\n\\t}\\n\\t// Reapply the annotations if the children refreshed or the main wrapper resized\\n\\tvar wrapperWidth = this.domWrapper.offsetWidth,\\n\\t\\thasResized = wrapperWidth !== this.wrapperWidth || changedTiddlers[\\\"$:/state/DynaView/ViewportDimensions/ResizeCount\\\"],\\n\\t\\toldAnnotationTiddlers = this.annotationTiddlers;\\n\\tthis.getAnnotationTiddlers();\\n\\tif(!isSnippetMode && (\\n\\t\\tchildrenDidRefresh || \\n\\t\\thasResized || \\n\\t\\tchangedAttributes.target || \\n\\t\\tchangedAttributes.targetPrefix || \\n\\t\\tchangedAttributes.targetSuffix || \\n\\t\\tchangedAttributes.filter || \\n\\t\\tchangedAttributes.actions || \\n\\t\\tchangedAttributes.popup || \\n\\t\\t!$tw.utils.isArrayEqual(oldAnnotationTiddlers,this.annotationTiddlers) ||\\n\\t\\tthis.annotationTiddlers.find(function(title) {\\n\\t\\t\\treturn changedTiddlers[title];\\n\\t\\t}) !== undefined\\n\\t)) {\\n\\t\\tthis.applyAnnotations();\\n\\t}\\n\\tif(!isSnippetMode && (\\n\\t\\tchildrenDidRefresh || \\n\\t\\thasResized || \\n\\t\\tchangedAttributes.search || \\n\\t\\tchangedAttributes.searchMinLength || \\n\\t\\tchangedAttributes.searchClass || \\n\\t\\tchangedAttributes.searchMode || \\n\\t\\tchangedAttributes.searchCaseSensitive\\n\\t)) {\\n\\t\\tthis.applySearch();\\n\\t}\\n\\tif(isSnippetMode && (\\n\\t\\tchildrenDidRefresh || \\n\\t\\thasResized || \\n\\t\\tchangedAttributes.search || \\n\\t\\tchangedAttributes.searchMinLength || \\n\\t\\tchangedAttributes.searchClass || \\n\\t\\tchangedAttributes.searchMode || \\n\\t\\tchangedAttributes.searchCaseSensitive\\n\\t)) {\\n\\t\\tthis.applySnippets();\\n\\t}\\n\\tthis.wrapperWidth = wrapperWidth;\\n\\treturn childrenDidRefresh;\\n};\\n\\nexports.dynannotate = DynannotateWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/selection-tracker.js\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/selection-tracker.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/dynannotate/selection-tracker.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nDyannotate background daemon to track the selection\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"dyannotate-startup\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.after = [\\\"render\\\"];\\nexports.synchronous = true;\\n\\nvar TextMap = require(\\\"$:/plugins/tiddlywiki/dynannotate/textmap.js\\\").TextMap;\\n\\nexports.startup = function() {\\n\\t$tw.dynannotate = {\\n\\t\\tselectionTracker: new SelectionTracker($tw.wiki,{\\n\\t\\t\\tallowBlankSelectionPopup: true\\n\\t\\t})\\n\\t};\\n};\\n\\nfunction SelectionTracker(wiki,options) {\\n\\toptions = options || {};\\n\\tvar self = this;\\n\\tthis.wiki = wiki;\\n\\tthis.allowBlankSelectionPopup = options.allowBlankSelectionPopup;\\n\\tthis.selectionPopupTitle = null;\\n\\tdocument.addEventListener(\\\"selectionchange\\\",function(event) {\\n\\t\\tvar selection = document.getSelection();\\n\\t\\tif(selection && (selection.type === \\\"Range\\\" || (self.allowBlankSelectionPopup && !self.selectionPopupTitle))) {\\n\\t\\t\\t// Look for the selection containers for each of the two ends of the selection\\n\\t\\t\\tvar anchorContainer = self.findSelectionContainer(selection.anchorNode),\\n\\t\\t\\t\\tfocusContainer = self.findSelectionContainer(selection.focusNode);\\n\\t\\t\\t// If either end of the selection then we ignore it\\n\\t\\t\\tif(!!anchorContainer || !!focusContainer) {\\n\\t\\t\\t\\tvar selectionRange = selection.getRangeAt(0);\\n\\t\\t\\t\\t// Check for the selection spilling outside the starting container\\n\\t\\t\\t\\tif((anchorContainer !== focusContainer) || (selectionRange.startContainer.nodeType !== Node.TEXT_NODE && selectionRange.endContainer.nodeType !== Node.TEXT_NODE)) {\\n\\t\\t\\t\\t\\tif(self.selectionPopupTitle) {\\n\\t\\t\\t\\t\\t\\tself.wiki.deleteTiddler(self.selectionPopupTitle);\\n\\t\\t\\t\\t\\t\\tself.selectionPopupTitle = null;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tself.selectionSaveTitle = anchorContainer.getAttribute(\\\"data-annotation-selection-save\\\");\\n\\t\\t\\t\\t\\tself.selectionPrefixSaveTitle = anchorContainer.getAttribute(\\\"data-annotation-selection-prefix-save\\\");\\n\\t\\t\\t\\t\\tself.selectionSuffixSaveTitle = anchorContainer.getAttribute(\\\"data-annotation-selection-suffix-save\\\");\\n\\t\\t\\t\\t\\tself.selectionPopupTitle = anchorContainer.getAttribute(\\\"data-annotation-selection-popup\\\");\\n\\t\\t\\t\\t\\t// The selection is a range so we trigger the popup\\n\\t\\t\\t\\t\\tif(self.selectionPopupTitle) {\\n\\t\\t\\t\\t\\t\\tvar selectionRectangle = selectionRange.getBoundingClientRect(),\\n\\t\\t\\t\\t\\t\\t\\ttrackingRectangle = anchorContainer.getBoundingClientRect();\\n\\t\\t\\t\\t\\t\\t$tw.popup.triggerPopup({\\n\\t\\t\\t\\t\\t\\t\\tdomNode: null,\\n\\t\\t\\t\\t\\t\\t\\tdomNodeRect: {\\n\\t\\t\\t\\t\\t\\t\\t\\tleft: selectionRectangle.left - trackingRectangle.left,\\n\\t\\t\\t\\t\\t\\t\\t\\ttop: selectionRectangle.top - trackingRectangle.top,\\n\\t\\t\\t\\t\\t\\t\\t\\twidth: selectionRectangle.width,\\n\\t\\t\\t\\t\\t\\t\\t\\theight: selectionRectangle.height\\n\\t\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\t\\tforce: true,\\n\\t\\t\\t\\t\\t\\t\\tfloating: true,\\n\\t\\t\\t\\t\\t\\t\\ttitle: self.selectionPopupTitle,\\n\\t\\t\\t\\t\\t\\t\\twiki: self.wiki\\n\\t\\t\\t\\t\\t\\t});\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t// Write the selection text to the specified tiddler\\n\\t\\t\\t\\t\\tif(self.selectionSaveTitle) {\\n\\t\\t\\t\\t\\t\\t// Note that selection.toString() normalizes whitespace but selection.getRangeAt(0).toString() does not\\n\\t\\t\\t\\t\\t\\tvar text = selectionRange.toString();\\n\\t\\t\\t\\t\\t\\tself.wiki.addTiddler(new $tw.Tiddler({title: self.selectionSaveTitle, text: text}));\\n\\t\\t\\t\\t\\t\\t// Build a textmap of the container so that we can find the prefix and suffix\\n\\t\\t\\t\\t\\t\\tvar textMap = new TextMap(anchorContainer);\\n\\t\\t\\t\\t\\t\\t// Find the selection start in the text map and hence extract the prefix and suffix\\n\\t\\t\\t\\t\\t\\tvar context = textMap.extractContext(selectionRange.startContainer,selectionRange.startOffset,text);\\n\\t\\t\\t\\t\\t\\t// Save the prefix and suffix\\n\\t\\t\\t\\t\\t\\tif(context) {\\n\\t\\t\\t\\t\\t\\t\\tif(self.selectionPrefixSaveTitle) {\\n\\t\\t\\t\\t\\t\\t\\t\\tself.wiki.addTiddler(new $tw.Tiddler({title: self.selectionPrefixSaveTitle, text: context.prefix}));\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\tif(self.selectionSuffixSaveTitle) {\\n\\t\\t\\t\\t\\t\\t\\t\\tself.wiki.addTiddler(new $tw.Tiddler({title: self.selectionSuffixSaveTitle, text: context.suffix}));\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\t// If the selection is a caret we clear any active popup\\n\\t\\t\\tif(self.selectionPopupTitle) {\\n\\t\\t\\t\\tself.wiki.deleteTiddler(self.selectionPopupTitle);\\n\\t\\t\\t\\tself.selectionPopupTitle = null;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n}\\n\\nSelectionTracker.prototype.findSelectionContainer = function findSelectionContainer(domNode) {\\n\\tif(domNode && domNode.nodeType === Node.ELEMENT_NODE && domNode.classList.contains(\\\"tc-dynannotation-selection-container\\\")) {\\n\\t\\treturn domNode;\\n\\t}\\n\\tif(domNode && domNode.parentNode) {\\n\\t\\treturn findSelectionContainer(domNode.parentNode);\\n\\t}\\n\\treturn null;\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/textmap.js\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/textmap.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/dynannotate/textmap.js\\ntype: application/javascript\\nmodule-type: library\\n\\nStructure for modelling mapping between a string and its representation in the DOM\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar PREFIX_SUFFIX_LENGTH = 50;\\n\\n/*\\nBuild a map of the text content of a dom node and its descendents:\\n\\nstring: concatenation of the text content of child nodes\\nmetadata: array of {start,end,domNode} where start and end identify position in the string\\n*/\\nexports.TextMap = function(domNode) {\\n\\tvar self = this,\\n\\t\\tstringChunks = [],\\n\\t\\tp = 0;\\n\\tthis.metadata = [];\\n\\tvar processNode = function(domNode) {\\n\\t\\t// Check for text nodes\\n\\t\\tif(domNode.nodeType === 3) {\\n\\t\\t\\tvar text = domNode.textContent;\\n\\t\\t\\tstringChunks.push(text);\\n\\t\\t\\tself.metadata.push({\\n\\t\\t\\t\\tstart: p,\\n\\t\\t\\t\\tend: p + text.length,\\n\\t\\t\\t\\tdomNode: domNode\\n\\t\\t\\t});\\n\\t\\t\\tp += text.length;\\n\\t\\t} else {\\n\\t\\t\\t// Otherwise look within the child nodes\\n\\t\\t\\tif(domNode.childNodes) {\\n\\t\\t\\t\\tfor(var t=0; t<domNode.childNodes.length; t++ ) {\\n\\t\\t\\t\\t\\tprocessNode(domNode.childNodes[t]);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// Process our text nodes\\n\\tprocessNode(domNode);\\n\\tthis.string = stringChunks.join(\\\"\\\");\\n};\\n\\n/*\\nLocate the metadata record corresponding to a given position in the string\\n*/\\nexports.TextMap.prototype.locateMetadata = function(position) {\\n\\treturn this.metadata.find(function(metadata) {\\n\\t\\treturn position >= metadata.start && position < metadata.end;\\n\\t});\\n};\\n\\n/*\\nSearch for the first occurance of a target string within the textmap of a dom node\\n\\nReturns an object with the following properties:\\n\\tstartNode: node containing the start of the text\\n\\tstartOffset: offset of the start of the text within the node\\n\\tendNode: node containing the end of the text\\n\\tendOffset: offset of the end of the text within the node\\n*/\\nexports.TextMap.prototype.findText = function(targetString,targetPrefix,targetSuffix) {\\n\\tif(!targetString) {\\n\\t\\treturn null;\\n\\t}\\n\\ttargetPrefix = targetPrefix || \\\"\\\";\\n\\ttargetSuffix = targetSuffix || \\\"\\\";\\n\\tvar startPos = this.string.indexOf(targetPrefix + targetString + targetSuffix);\\n\\tif(startPos !== -1) {\\n\\t\\tstartPos += targetPrefix.length;\\n\\t\\tvar startMetadata = this.locateMetadata(startPos),\\n\\t\\t\\tendMetadata = this.locateMetadata(startPos + targetString.length);\\n\\t\\tif(startMetadata && endMetadata) {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tstartNode: startMetadata.domNode,\\n\\t\\t\\t\\tstartOffset: startPos - startMetadata.start,\\n\\t\\t\\t\\tendNode: endMetadata.domNode,\\n\\t\\t\\t\\tendOffset: (startPos + targetString.length) - endMetadata.start\\n\\t\\t\\t}\\t\\t\\t\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nSearch for all occurances of a string within the textmap of a dom node\\n\\nOptions include:\\n\\tmode: \\\"normal\\\", \\\"regexp\\\" or \\\"whitespace\\\"\\n\\tcaseSensitive: true if the search should be case sensitive\\n\\nReturns an array of objects with the following properties:\\n\\tstartPos: start position of the match within the string contained by this TextMap\\n\\tstartNode: node containing the start of the text\\n\\tstartOffset: offset of the start of the text within the node\\n\\tendPos: end position of the match within the string contained by this TextMap\\n\\tendNode: node containing the end of the text\\n\\tendOffset: offset of the end of the text within the node\\n*/\\nexports.TextMap.prototype.search = function(searchString,options) {\\n\\tif(!searchString) {\\n\\t\\treturn [];\\n\\t}\\n\\toptions = options || {};\\n\\t// Compose the regexp\\n\\tvar regExpString,\\n\\t\\tflags = options.caseSensitive ? \\\"g\\\" : \\\"gi\\\";\\n\\tif(options.mode === \\\"regexp\\\") {\\n\\t\\tregExpString = \\\"(\\\" + searchString + \\\")\\\";\\n\\t} else if(options.mode === \\\"whitespace\\\") {\\n\\t\\t// Normalise whitespace\\n\\t\\tregExpString = \\\"(\\\" + searchString.split(/\\\\s+/g).filter(function(word) {\\n\\t\\t\\treturn !!word\\n\\t\\t}).map($tw.utils.escapeRegExp).join(\\\"\\\\\\\\s+\\\") + \\\")\\\";\\n\\t} else {\\n\\t\\t// Normal search\\n\\t\\tregExpString = \\\"(\\\" + $tw.utils.escapeRegExp(searchString) + \\\")\\\";\\n\\t}\\n\\t// Compile the regular expression\\n\\tvar regExp;\\n\\ttry {\\n\\t\\tregExp = RegExp(regExpString,flags);\\n\\t} catch(e) {\\n\\t}\\n\\tif(!regExp) {\\n\\t\\treturn [];\\n\\t}\\n\\t// Find each match\\n\\tvar results = [],\\n\\t\\tmatch;\\n\\tdo {\\n\\t\\tmatch = regExp.exec(this.string);\\n\\t\\tif(match) {\\n\\t\\t\\tvar metadataStart = this.locateMetadata(match.index),\\n\\t\\t\\t\\tmetadataEnd = this.locateMetadata(match.index + match[0].length);\\n\\t\\t\\tif(metadataStart && metadataEnd) {\\n\\t\\t\\t\\tresults.push({\\n\\t\\t\\t\\t\\tstartPos: match.index,\\n\\t\\t\\t\\t\\tstartNode: metadataStart.domNode,\\n\\t\\t\\t\\t\\tstartOffset: match.index - metadataStart.start,\\n\\t\\t\\t\\t\\tendPos: match.index + match[0].length,\\n\\t\\t\\t\\t\\tendNode: metadataEnd.domNode,\\n\\t\\t\\t\\t\\tendOffset: match.index + match[0].length - metadataEnd.start\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} while(match);\\n\\treturn results;\\n};\\n\\n/*\\nGiven a start container and offset and a search string, return a prefix and suffix to disambiguate the text\\n*/\\nexports.TextMap.prototype.extractContext = function(startContainer,startOffset,text) {\\n\\tvar startMetadata = this.metadata.find(function(metadata) {\\n\\t\\t\\treturn metadata.domNode === startContainer\\n\\t\\t});\\n\\tif(!startMetadata) {\\n\\t\\treturn null;\\n\\t}\\n\\tvar startPos = startMetadata.start + startOffset;\\n\\treturn {\\n\\t\\tprefix: this.string.slice(Math.max(startPos - PREFIX_SUFFIX_LENGTH, 0), startPos),\\n\\t\\tsuffix: this.string.slice(startPos + text.length, Math.min(startPos + text.length + PREFIX_SUFFIX_LENGTH, this.string.length))\\n\\t};\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/dynannotate/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/dynannotate/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-dynannotation-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-dynannotation-annotation-overlay {\\n\\tposition: absolute;\\n\\tbackground: rgba(255,255,0,0.3);\\n\\tmix-blend-mode: multiply;\\n}\\n\\n.tc-dynannotation-search-overlay {\\n\\tposition: absolute;\\n\\tpointer-events: none;\\n\\tbackground: rgba(255,0,0,0.3);\\n}\\n\\n.tc-dynannotation-search-overlay-blurred {\\n\\tbackground: rgba(255,0,0,0.3);\\n\\tmix-blend-mode: multiply;\\n\\tborder-radius: 4px;\\n\\tfilter: blur(2px);\\n}\\n\\n@keyframes ta-dynannotation-search-overlay-animated { to { background-position: 100% 100% } }\\n\\n.tc-dynannotation-search-overlay-animated {\\n\\tmix-blend-mode: multiply;\\n\\tbackground: repeating-linear-gradient(-45deg, #ff8 0, #dd8 25%, transparent 0, transparent 50%) 0 / .6em .6em;\\n\\tanimation: ta-dynannotation-search-overlay-animated 12s linear infinite;\\n}\\n\\n.tc-dynannotate-snippet-highlight {\\n\\tbackground: #efef53;\\n}\\n\\n.tc-dynannotation-example-info {\\n\\tbackground: #ffa;\\n\\tpadding: 1em;\\n}\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/dynaview":{"title":"$:/plugins/tiddlywiki/dynaview","name":"Dynaview","description":"Dynamic scrolling and zooming effects","list":"readme docs examples config","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/dynaview/above-story\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/above-story\",\n \"tags\": \"$:/tags/AboveStory-disabled\",\n \"text\": \"<!-- Remove the \\\"-disabled\\\" part of the tag to cause the currently selected example to appear at the top of the story river. Intended to make it easier to make clean screencaps -->\\n<div style=\\\"height:100em;\\\">\\n<$transclude tiddler={{$:/state/tab--1915807570}} mode=\\\"block\\\"/>\\n</div>\\n\"\n },\n \"$:/config/DynaView/ViewportDimensions\": {\n \"title\": \"$:/config/DynaView/ViewportDimensions\",\n \"text\": \"no\"\n },\n \"$:/config/DynaView/UpdateAddressBar\": {\n \"title\": \"$:/config/DynaView/UpdateAddressBar\",\n \"text\": \"no\"\n },\n \"$:/plugins/tiddlywiki/dynaview/config\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/config\",\n \"text\": \"<$checkbox tiddler=\\\"$:/config/DynaView/ViewportDimensions\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> Enable dynamic saving of the viewport [[width|$:/state/DynaView/ViewportDimensions/Width]] and [[height|$:/state/DynaView/ViewportDimensions/Height]]</$checkbox>\\n\\n<$checkbox tiddler=\\\"$:/config/DynaView/UpdateAddressBar\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> Update address bar while scrolling</$checkbox>\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/dynaview/docs\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/docs\",\n \"text\": \"! Documentation\\n\\nThe components of this plugin include:\\n\\n* A background task that:\\n** performs specified actions when elements are scrolled into view\\n** updates certain base classes on the `document.body` according to the current zoom level\\n** if enabled in the DynaView config panel - dynamically stores the viewport dimensions in $:/state/viewport/width and $:/state/viewport/height\\n* Pre-configured CSS classes to simplify using those base classes\\n* Usage examples\\n\\n! Scroll Features\\n\\n!! Scroll position preservation during refresh\\n\\nSome recent browsers have a feature called \\\"scroll anchoring\\\" whereby they suppress the apparent scrolling that occurs when elements are inserted or removed above the current viewport. (See https://github.com/WICG/ScrollAnchoring for more details).\\n\\n~DynaView can optionally polyfill this behaviour for older browsers by setting the configuration tiddler $:/config/DynaView/PreserveScrollPosition to `yes`.\\n\\n!! Startup scroll position restoration\\n\\nOptionally, ~DynaView can store the current scroll position in local storage and restore it upon startup. Set the configuration tiddler $:/config/DynaView/RestoreScrollPositionAtStartup to `yes`.\\n\\nNote that it is not recommended to use this setting at the same time as the \\\"UpdateAddressBar\\\" option.\\n\\n!! Visibility tracking\\n\\nThe background task detects when elements with the class `tc-dynaview-track-tiddler-when-visible` scroll in and out of view. It tracks four different states:\\n\\n* ''Blank/missing'' -- The element has not yet been scrolled into view\\n* ''0'' -- The element has been scrolled into view, but subsequently scrolled out of view\\n* ''1'' -- The element is near the viewport\\n* ''2'' -- The element is partially or wholly within the viewport\\n\\nThe processing applied to each element is as follows:\\n\\n* If the element is partially or wholly within the viewport then set the state to \\\"2\\\"\\n* If the element is near the viewport then set the state to \\\"1\\\"\\n* If the element is fully outside the viewport then only set the state to \\\"0\\\" if it is currently unset (ie blank/missing)\\n\\nAttributes on the tracked element specify the following parameters:\\n\\n* ''data-dynaview-track-tiddler'' -- specifies the tiddler in which the element tracking state will be stored\\n\\n!! Update address bar when scrolling\\n\\nIf the configuration tiddler $:/config/DynaView/UpdateAddressBar is set to `yes` the background task detects the tiddler at the top of the viewport and sets the address bar location hash to the title of that tiddler.\\n\\nNote that it is not recommended to use this setting at the same time as the \\\"RestoreScrollPositionAtStartup\\\" option.\\n\\n! Viewport Size Features\\n\\n!! Resize Tracking\\n\\nSome widgets require re-rendering or refreshing if the size of the viewport changes. This can be accomplished using \\\"resize counting\\\" in two steps:\\n\\n* Ensure that a DOM element with the class `tc-dynaview-request-refresh-on-resize` is present in the DOM to enable resize counting\\n* Have the widget check for changes to the tiddler $:/state/DynaView/ViewportDimensions/ResizeCount to detect viewport resizes\\n\\n!! Viewport Size Tracking\\n\\nThe background task can optionally dynamically update a pair of state tiddlers with the dimensions of the browser viewport.\\n\\n* Set the configuration tiddler $:/config/DynaView/ViewportDimensions to the text \\\"yes\\\" to enable this feature\\n* The viewport dimensions can be found in $:/state/DynaView/ViewportDimensions/Width and $:/state/DynaView/ViewportDimensions/Height\\n\\n! Zoom Features\\n\\n!! Document Body Zoom Classes\\n\\nThe background task sets the following classes on `document.body` according to the current zoom level.\\n\\n|!Class |!Description |\\n|`tc-dynaview-zoom-factor-1` |Set when the zoom level is less than 2.00 |\\n|`tc-dynaview-zoom-factor-2` |Set when the zoom level is greater than 2.00 and less than 3.00 |\\n|`tc-dynaview-zoom-factor-3` |Set when the zoom level is greater than 3.00 and less than 4.00 |\\n|`tc-dynaview-zoom-factor-4` |Set when the zoom level is greater than 4.00 |\\n|`tc-dynaview-zoom-factor-1-and-above` |Set when the zoom level is greater than or equal to 1.00 |\\n|`tc-dynaview-zoom-factor-1a-and-above` |Set when the zoom level is greater than or equal to 1.14 |\\n|`tc-dynaview-zoom-factor-1b-and-above` |Set when the zoom level is greater than or equal to 1.33 |\\n|`tc-dynaview-zoom-factor-1c-and-above` |Set when the zoom level is greater than or equal to 1.60 |\\n|`tc-dynaview-zoom-factor-2-and-above` |Set when the zoom level is greater than or equal to 2.00 |\\n|`tc-dynaview-zoom-factor-2a-and-above` |Set when the zoom level is greater than or equal to 2.66 |\\n|`tc-dynaview-zoom-factor-3-and-above` |Set when the zoom level is greater than or equal to 3.00 |\\n|`tc-dynaview-zoom-factor-4-and-above` |Set when the zoom level is greater than or equal to 4.00 |\\n\\n!! Pre-configured Classes\\n\\nThese classes can be used on any element to control its visibility at different zoom levels.\\n\\n|!Class |!Description |\\n|`tc-dynaview-zoom-visible-1-and-above` |Visible when the zoom level is 1.00 or more |\\n|`tc-dynaview-zoom-visible-1a-and-above` |Visible when the zoom level is 1.14 or more |\\n|`tc-dynaview-zoom-visible-1b-and-above` |Visible when the zoom level is 1.33 or more |\\n|`tc-dynaview-zoom-visible-1c-and-above` |Visible when the zoom level is 1.60 or more |\\n|`tc-dynaview-zoom-visible-2-and-above` |Visible when the zoom level is 2.00 or more |\\n|`tc-dynaview-zoom-visible-2a-and-above` |Visible when the zoom level is 2.66 or more |\\n|`tc-dynaview-zoom-visible-3-and-above` |Visible when the zoom level is 3.00 or more |\\n|`tc-dynaview-zoom-visible-4-and-above` |Visible when the zoom level is 4.00 or more |\\n|`tc-dynaview-zoom-visible-1` |Visible when the zoom level is less than 2.00 |\\n|`tc-dynaview-zoom-visible-2` |Visible when the zoom level is greater than or equal to 2.00 and less than 3.00 |\\n|`tc-dynaview-zoom-visible-3` |Visible when the zoom level is greater than or equal to 3.00 and less than 4.00 |\\n|`tc-dynaview-zoom-visible-4` |Visible when the zoom level is greater than or equal to 4.00 |\\n\"\n },\n \"$:/plugins/tiddlywiki/dynaview/dynaview.js\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/dynaview.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/dynaview/dynaview.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nZoom everything\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"dynaview\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.before = [\\\"story\\\"];\\nexports.synchronous = true;\\n\\nvar STATE_OUT_OF_VIEW = \\\"0\\\",\\n\\tSTATE_NEAR_VIEW = \\\"1\\\",\\n\\tSTATE_IN_VIEW = \\\"2\\\";\\n\\nvar isWaitingForAnimationFrame = 0, // Bitmask:\\n\\tANIM_FRAME_CAUSED_BY_LOAD = 1, // Animation frame was requested because of page load\\n\\tANIM_FRAME_CAUSED_BY_SCROLL = 2, // Animation frame was requested because of page scroll\\n\\tANIM_FRAME_CAUSED_BY_RESIZE = 4; // Animation frame was requested because of window resize\\n\\nvar LOCAL_STORAGE_KEY_PREFIX = \\\"tw5-dynaview-scroll-position#\\\";\\n\\nvar hasRestoredScrollPosition = false;\\n\\nvar localStorageHasFailed = false;\\n\\nexports.startup = function() {\\n\\tvar topmost = null, lastScrollY;\\n\\t$tw.boot.disableStartupNavigation = true;\\n\\twindow.addEventListener(\\\"load\\\",onLoad,false);\\n\\twindow.addEventListener(\\\"scroll\\\",onScroll,false);\\n\\twindow.addEventListener(\\\"resize\\\",onResize,false);\\n\\t$tw.hooks.addHook(\\\"th-page-refreshing\\\",function() {\\n\\t\\tif(!hasRestoredScrollPosition) {\\n\\t\\t\\ttopmost = restoreScrollPosition();\\n\\t\\t} else if(shouldPreserveScrollPosition()) {\\n\\t\\t\\ttopmost = findTopmostTiddler();\\n\\t\\t}\\n\\t\\tlastScrollY = window.scrollY;\\n\\t});\\n\\t$tw.hooks.addHook(\\\"th-page-refreshed\\\",function() {\\n\\t\\tif(lastScrollY === window.scrollY) { // Don't do scroll anchoring if the scroll position got changed\\n\\t\\t\\tif(shouldPreserveScrollPosition() || !hasRestoredScrollPosition) {\\n\\t\\t\\t\\tscrollToTiddler(topmost);\\n\\t\\t\\t\\thasRestoredScrollPosition = true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tupdateAddressBar();\\n\\t\\tsaveScrollPosition();\\n\\t\\tcheckVisibility();\\n\\t\\tsaveViewportDimensions();\\n\\t});\\n};\\n\\nfunction onLoad(event) {\\n\\tif(!isWaitingForAnimationFrame) {\\n\\t\\twindow.requestAnimationFrame(worker);\\n\\t}\\n\\tisWaitingForAnimationFrame |= ANIM_FRAME_CAUSED_BY_LOAD;\\n}\\n\\nfunction onScroll(event) {\\n\\tif(!isWaitingForAnimationFrame) {\\n\\t\\twindow.requestAnimationFrame(worker);\\n\\t}\\n\\tisWaitingForAnimationFrame |= ANIM_FRAME_CAUSED_BY_SCROLL;\\n}\\n\\nfunction onResize(event) {\\n\\tif(!isWaitingForAnimationFrame) {\\n\\t\\twindow.requestAnimationFrame(worker);\\n\\t}\\n\\tisWaitingForAnimationFrame |= ANIM_FRAME_CAUSED_BY_RESIZE;\\n}\\n\\nfunction worker() {\\n\\tif(isWaitingForAnimationFrame & (ANIM_FRAME_CAUSED_BY_RESIZE | ANIM_FRAME_CAUSED_BY_LOAD)) {\\n\\t\\tsaveViewportDimensions();\\n\\t}\\n\\tsetZoomClasses();\\n\\tupdateAddressBar();\\n\\tsaveScrollPosition();\\n\\tcheckVisibility();\\n\\tisWaitingForAnimationFrame = 0;\\n}\\n\\nfunction setZoomClasses() {\\n\\tvar zoomFactor = document.body.scrollWidth / window.innerWidth,\\n\\t\\tclassList = document.body.classList;\\n\\tclassList.add(\\\"tc-dynaview\\\");\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-1\\\",zoomFactor <= 2);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-1-and-above\\\",zoomFactor >= 1);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-1a-and-above\\\",zoomFactor >= 1.14);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-1b-and-above\\\",zoomFactor >= 1.33);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-1c-and-above\\\",zoomFactor >= 1.6);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-2\\\",zoomFactor >= 2 && zoomFactor <= 3);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-2-and-above\\\",zoomFactor >= 2);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-2a-and-above\\\",zoomFactor >= 2.66);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-3\\\",zoomFactor >= 3 && zoomFactor <= 4);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-3-and-above\\\",zoomFactor >= 3);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-4\\\",zoomFactor >= 4);\\n\\tclassList.toggle(\\\"tc-dynaview-zoom-factor-4-and-above\\\",zoomFactor >= 4);\\n}\\n\\nfunction checkVisibility() {\\n\\tvar elements = document.querySelectorAll(\\\".tc-dynaview-track-tiddler-when-visible\\\");\\n\\t$tw.utils.each(elements,function(element) {\\n\\t\\t// Calculate whether the element is visible\\n\\t\\tvar elementRect = element.getBoundingClientRect(),\\n\\t\\t\\tviewportWidth = window.innerWidth || document.documentElement.clientWidth,\\n\\t\\t\\tviewportHeight = window.innerHeight || document.documentElement.clientHeight,\\n\\t\\t\\tviewportRect = {\\n\\t\\t\\t\\tleft: 0,\\n\\t\\t\\t\\tright: viewportWidth,\\n\\t\\t\\t\\ttop: 0,\\n\\t\\t\\t\\tbottom: viewportHeight\\n\\t\\t\\t},\\n\\t\\t\\ttitle = element.getAttribute(\\\"data-dynaview-track-tiddler\\\");\\n\\t\\tif(title) {\\n\\t\\t\\tvar currValue = $tw.wiki.getTiddlerText(title),\\n\\t\\t\\t\\tnewValue = currValue;\\n\\t\\t\\t// Within viewport\\n\\t\\t\\tif(!(elementRect.left > viewportRect.right || \\n\\t\\t\\t\\t\\t\\t\\t\\telementRect.right < viewportRect.left || \\n\\t\\t\\t\\t\\t\\t\\t\\telementRect.top > viewportRect.bottom ||\\n\\t\\t\\t\\t\\t\\t\\t\\telementRect.bottom < viewportRect.top)) {\\n\\t\\t\\t\\tnewValue = STATE_IN_VIEW;\\n\\t\\t\\t// Near viewport\\n\\t\\t\\t} else if(!(elementRect.left > (viewportRect.right + viewportWidth) || \\n\\t\\t\\t\\t\\t\\t\\t\\telementRect.right < (viewportRect.left - viewportWidth) || \\n\\t\\t\\t\\t\\t\\t\\t\\telementRect.top > (viewportRect.bottom + viewportHeight) ||\\n\\t\\t\\t\\t\\t\\t\\t\\telementRect.bottom < (viewportRect.top - viewportHeight))) {\\n\\t\\t\\t\\tnewValue = STATE_NEAR_VIEW;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Outside viewport\\n\\t\\t\\t\\tif(currValue !== undefined) {\\n\\t\\t\\t\\t\\tnewValue = STATE_OUT_OF_VIEW;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tif(newValue !== currValue) {\\n\\t\\t\\t\\t$tw.wiki.addTiddler(new $tw.Tiddler({title: title, text: newValue}));\\t\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n}\\n\\nfunction updateAddressBar() {\\n\\tif($tw.wiki.getTiddlerText(\\\"$:/config/DynaView/UpdateAddressBar\\\") === \\\"yes\\\") {\\n\\t\\tvar top = findTopmostTiddler();\\n\\t\\tif(top.element) {\\n\\t\\t\\tvar hash = \\\"#\\\" + encodeURIComponent(top.title) + \\\":\\\" + encodeURIComponent(\\\"[list[$:/StoryList]]\\\");\\n\\t\\t\\tif(title && $tw.locationHash !== hash) {\\n\\t\\t\\t\\t$tw.locationHash = hash;\\n\\t\\t\\t\\twindow.location.hash = hash;\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction saveScrollPosition() {\\n\\tif(!localStorageHasFailed) {\\n\\t\\tif(hasRestoredScrollPosition && $tw.wiki.getTiddlerText(\\\"$:/config/DynaView/RestoreScrollPositionAtStartup\\\") === \\\"yes\\\") {\\n\\t\\t\\tvar top = findTopmostTiddler();\\n\\t\\t\\tif(top.element) {\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\twindow.localStorage.setItem(LOCAL_STORAGE_KEY_PREFIX + window.location.pathname,JSON.stringify({\\n\\t\\t\\t\\t\\t\\ttitle: top.title,\\n\\t\\t\\t\\t\\t\\toffset: top.offset\\n\\t\\t\\t\\t\\t}));\\n\\t\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\t\\tlocalStorageHasFailed = true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction restoreScrollPosition() {\\n\\tvar json;\\n\\tif(!localStorageHasFailed) {\\n\\t\\ttry {\\n\\t\\t\\tjson = JSON.parse(window.localStorage.getItem(LOCAL_STORAGE_KEY_PREFIX + window.location.pathname));\\n\\t\\t} catch(e) {\\n\\t\\t\\tlocalStorageHasFailed = true;\\n\\t\\t};\\t\\t\\n\\t}\\n\\treturn json;\\n}\\n\\n/*\\ntiddlerDetails: {title: <title of tiddler to scroll to>, offset: <offset in pixels from the top of the tiddler>}\\n*/\\nfunction scrollToTiddler(tiddlerDetails) {\\n\\tif(!$tw.pageScroller.isScrolling() && tiddlerDetails) {\\n\\t\\tvar elements = document.querySelectorAll(\\\".tc-tiddler-frame[data-tiddler-title]\\\"),\\n\\t\\t\\ttopmostTiddlerElement = null;\\n\\t\\t$tw.utils.each(elements,function(element) {\\n\\t\\t\\tif(element.getAttribute(\\\"data-tiddler-title\\\") === tiddlerDetails.title) {\\n\\t\\t\\t\\ttopmostTiddlerElement = element;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tif(topmostTiddlerElement) {\\n\\t\\t\\tvar rect = topmostTiddlerElement.getBoundingClientRect(),\\n\\t\\t\\t\\tscrollY = Math.round(window.scrollY + rect.top + tiddlerDetails.offset);\\n\\t\\t\\tif(scrollY !== window.scrollY) {\\n\\t\\t\\t\\twindow.scrollTo(window.scrollX,scrollY);\\t\\t\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction shouldPreserveScrollPosition() {\\n\\treturn $tw.wiki.getTiddlerText(\\\"$:/config/DynaView/PreserveScrollPosition\\\") === \\\"yes\\\";\\n}\\n\\nfunction findTopmostTiddler() {\\n\\tvar elements = document.querySelectorAll(\\\".tc-tiddler-frame[data-tiddler-title]\\\"),\\n\\t\\ttopmostElement = null,\\n\\t\\ttopmostElementTop = 1 * 1000 * 1000;\\n\\t$tw.utils.each(elements,function(element) {\\n\\t\\t// Check if the element is visible\\n\\t\\tvar elementRect = element.getBoundingClientRect();\\n\\t\\tif((elementRect.top < topmostElementTop) && (elementRect.bottom > 0)) {\\n\\t\\t\\ttopmostElement = element;\\n\\t\\t\\ttopmostElementTop = elementRect.top;\\n\\t\\t}\\n\\t});\\n\\treturn {\\n\\t\\telement: topmostElement,\\n\\t\\toffset: -topmostElementTop,\\n\\t\\ttitle: topmostElement ? topmostElement.getAttribute(\\\"data-tiddler-title\\\") : null\\n\\t};\\n}\\n\\nvar previousViewportWidth, previousViewportHeight;\\n\\nfunction saveViewportDimensions() {\\n\\tvar viewportWidth = window.innerWidth || document.documentElement.clientWidth,\\n\\t\\tviewportHeight = window.innerHeight || document.documentElement.clientHeight;\\n\\tif(document.querySelector(\\\".tc-dynaview-request-refresh-on-resize\\\")) {\\n\\t\\tif(previousViewportWidth !== viewportWidth || previousViewportHeight !== viewportHeight) {\\n\\t\\t\\tvar count = parseInt($tw.wiki.getTiddlerText(\\\"$:/state/DynaView/ViewportDimensions/ResizeCount\\\",\\\"0\\\"),10) || 0;\\n\\t\\t\\t$tw.wiki.addTiddler(new $tw.Tiddler({title: \\\"$:/state/DynaView/ViewportDimensions/ResizeCount\\\", text: (count + 1) + \\\"\\\"}));\\n\\t\\t\\tpreviousViewportWidth = viewportWidth;\\n\\t\\t\\tpreviousViewportHeight = viewportHeight;\\n\\t\\t}\\n\\t}\\n\\tif($tw.wiki.getTiddlerText(\\\"$:/config/DynaView/ViewportDimensions\\\") === \\\"yes\\\") {\\n\\t\\tif($tw.wiki.getTiddlerText(\\\"$:/state/DynaView/ViewportDimensions/Width\\\") !== viewportWidth.toString()) {\\n\\t\\t\\t$tw.wiki.setText(\\\"$:/state/DynaView/ViewportDimensions/Width\\\",undefined,undefined,viewportWidth.toString(),undefined);\\n\\t\\t}\\n\\t\\tif($tw.wiki.getTiddlerText(\\\"$:/state/DynaView/ViewportDimensions/Height\\\") !== viewportHeight.toString()) {\\n\\t\\t\\t$tw.wiki.setText(\\\"$:/state/DynaView/ViewportDimensions/Height\\\",undefined,undefined,viewportHeight.toString(),undefined);\\n\\t\\t}\\n\\t}\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/dynaview/examples/progressive-text\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/examples/progressive-text\",\n \"tags\": \"$:/tags/dynaviewExamples\",\n \"caption\": \"Progressive Text\",\n \"text\": \"//Zoom into the space below to see a poem//\\n\\n''N.B. This example only works in Safari at the moment''\\n\\n<pre><div class=\\\"tc-dynaview-zoom-visible-1-and-above\\\" style=\\\"font-size: 0.7em;line-height:1.5;\\\">\\n 'Fury said to a\\n mouse, That he\\n met in the\\n house,</div><div class=\\\"tc-dynaview-zoom-visible-1a-and-above\\\" style=\\\"font-size: 0.6em;line-height:1.5;\\\"> \\\"Let us\\n both go to\\n law: I will\\n prosecute\\n YOU.--Come,</div><div class=\\\"tc-dynaview-zoom-visible-1b-and-above\\\" style=\\\"font-size: 0.5em;line-height:1.5;\\\"> I'll take no\\n denial; We\\n must have a\\n trial: For</div><div class=\\\"tc-dynaview-zoom-visible-1c-and-above\\\" style=\\\"font-size: 0.4em;line-height:1.5;\\\"> really this\\n morning I've\\n nothing\\n to do.\\\"</div><div class=\\\"tc-dynaview-zoom-visible-2-and-above\\\" style=\\\"font-size: 0.3em;line-height:1.5;\\\"> Said the\\n mouse to the\\n cur, \\\"Such\\n a trial,\\n dear Sir,</div><div class=\\\"tc-dynaview-zoom-visible-2a-and-above\\\" style=\\\"font-size: 0.25em;line-height:1.5;\\\"> With\\n no jury\\n or judge,\\n would be\\n wasting\\n our\\n breath.\\\"</div><div class=\\\"tc-dynaview-zoom-visible-3-and-above\\\" style=\\\"font-size: 0.2em;line-height:1.5;\\\"> \\\"I'll be\\n judge, I'll\\n be jury,\\\"\\n Said\\n cunning\\n old Fury:\\n \\\"I'll\\n try the\\n whole\\n cause,</div><div class=\\\"tc-dynaview-zoom-visible-4-and-above\\\" style=\\\"font-size: 0.15em;line-height:1.5;\\\"> and\\n condemn\\n you\\n to\\n death.\\\"'\\n</div></pre>\\n\"\n },\n \"$:/plugins/tiddlywiki/dynaview/examples/reveal-on-scroll\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/examples/reveal-on-scroll\",\n \"tags\": \"$:/tags/dynaviewExamples\",\n \"caption\": \"Reveal on Scroll\",\n \"text\": \"\\\\define indicator(index)\\n<$reveal state=\\\"$:/state/unreveal-on-scroll/example$index$\\\" type=\\\"nomatch\\\" text=\\\"\\\">\\n$index$\\n</$reveal>\\n\\\\end\\n\\n\\\\define lorem-ipsum(index)\\n<div class=\\\"tc-dynaview-track-tiddler-when-visible\\\" style=\\\"min-height: 75px;\\\" data-dynaview-track-tiddler=\\\"$:/state/unreveal-on-scroll/example$index$\\\">\\n<h1>Heading $index$</h1>\\n<$reveal state=\\\"$:/state/unreveal-on-scroll/example$index$\\\" type=\\\"nomatch\\\" text=\\\"\\\">\\n(Rendered at <<now \\\"[UTC]YYYY-0MM-0DD 0hh:0mm:0ss.XXX\\\">>) Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n</$reveal>\\n</div>\\n\\\\end\\n\\nThis example renders tiddlers as they are scrolled into view, and hides them when they scroll out of view again.\\n\\nVisible: <$list filter=\\\"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\\\">\\n<$macrocall $name=\\\"indicator\\\" index=<<currentTiddler>>/>\\n</$list>\\n\\n<$list filter=\\\"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\\\">\\n<$macrocall $name=\\\"lorem-ipsum\\\" index=<<currentTiddler>>/>\\n</$list>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/TiddlyWiki Architecture\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/TiddlyWiki Architecture\",\n \"caption\": \"TiddlyWiki Architecture\",\n \"tags\": \"[[$:/tags:/ZoomableDiagram]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Browser Architecture\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Browser Architecture\",\n \"caption\": \"Browser Architecture\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/TiddlyWiki Architecture]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Service Workers\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Service Workers\",\n \"caption\": \"Service Workers\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Browser Architecture]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Service Bosses\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Service Bosses\",\n \"caption\": \"Service Bosses\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Service Workers]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Out of Service Workers\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Out of Service Workers\",\n \"caption\": \"Out of Service Workers\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Service Workers]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Events\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Events\",\n \"caption\": \"Events\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Browser Architecture]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Non Events\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Non Events\",\n \"caption\": \"Non Events\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Events]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Past Events\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Past Events\",\n \"caption\": \"Past Events\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Events]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/DOM\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/DOM\",\n \"caption\": \"DOM\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Browser Architecture]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Nodes\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Nodes\",\n \"caption\": \"Nodes\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/DOM]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Attributes\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Attributes\",\n \"caption\": \"Attributes\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/DOM]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Pathogens\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Pathogens\",\n \"caption\": \"Pathogens\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/DOM]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Connection\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Connection\",\n \"caption\": \"Connection\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/TiddlyWiki Architecture]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/HTTP\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/HTTP\",\n \"caption\": \"HTTP\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Connection]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Server Architecture\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Server Architecture\",\n \"caption\": \"Server Architecture\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/TiddlyWiki Architecture]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Node.js\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Node.js\",\n \"caption\": \"Node.js\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Server Architecture]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/C/C++\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/C/C++\",\n \"caption\": \"C/C++\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Node.js]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Quotation Marks\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Quotation Marks\",\n \"caption\": \"Quotation Marks\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Node.js]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Asterisks\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Asterisks\",\n \"caption\": \"Asterisks\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Node.js]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Potatoes\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Potatoes\",\n \"caption\": \"Potatoes\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Server Architecture]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Carrots\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Carrots\",\n \"caption\": \"Carrots\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Potatoes]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Apricots\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Apricots\",\n \"caption\": \"Apricots\",\n \"tags\": \"[[$:/plugins/tiddlywiki/dynaview/zoomable-diagram/Potatoes]]\",\n \"text\": \"<<lorem-ipsum>>\"\n },\n \"$:/plugins/tiddlywiki/dynaview/examples/zoomable-diagram\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/examples/zoomable-diagram\",\n \"tags\": \"$:/tags/dynaviewExamples\",\n \"caption\": \"Zoomable Diagram\",\n \"text\": \"\\\\define lorem-ipsum()\\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n\\\\end\\n\\n\\\\define zoomable-diagram(tag,level:\\\"1 2 3 4 5 6 7\\\")\\n<div class={{{ $level$ +[addprefix[zoomable-diagram-level-]addprefix[zoomable-diagram-list ]] }}}>\\n\\t<$list filter=\\\"[all[shadows+tiddlers]tag[$tag$]]\\\">\\n\\t\\t<div class=\\\"zoomable-diagram-item\\\">\\n\\t\\t\\t<div class=\\\"zoomable-diagram-title\\\">\\n\\t\\t\\t\\t<$transclude field=\\\"caption\\\" mode=\\\"inline\\\"/>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"zoomable-diagram-body\\\">\\n\\t\\t\\t\\t<div class=\\\"zoomable-diagram-text\\\">\\n\\t\\t\\t\\t\\t<$transclude field=\\\"text\\\" mode=\\\"block\\\"/>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"zoomable-diagram-children\\\">\\n\\t\\t\\t\\t\\t<$set name=\\\"new-level\\\" filter=\\\"\\\"\\\" $level$ +[butfirst[]] \\\"\\\"\\\">\\n\\t\\t\\t\\t\\t\\t<$macrocall $name=\\\"zoomable-diagram\\\" tag=<<currentTiddler>> level=<<new-level>>/>\\n\\t\\t\\t\\t\\t</$set>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</$list>\\n</div>\\n\\\\end\\n\\n//Zoom into the diagram below to find out more//\\n\\n''N.B. This example only works in Safari at the moment''\\n\\n<style>\\n.zoomable-diagram-wrapper {\\n\\tmin-height: 300px;\\n}\\n\\n.zoomable-diagram-list {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tline-height: 1.5;\\n}\\n\\n.zoomable-diagram-level-1 {font-size: 1em;}\\n.zoomable-diagram-level-2 {font-size: 0.8em;}\\n.zoomable-diagram-level-3 {font-size: 0.6em;}\\n.zoomable-diagram-level-4 {font-size: 0.4em;}\\n\\n.zoomable-diagram-level-1,\\n.zoomable-diagram-level-2,\\n.zoomable-diagram-level-3,\\n.zoomable-diagram-level-4,\\n.zoomable-diagram-text {\\n\\ttransition: opacity 150ms ease-in-out;\\n}\\n\\nbody.tc-dynaview.tc-dynaview-zoom-factor-1 .zoomable-diagram-level-1 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-1 .zoomable-diagram-level-2 {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-1 .zoomable-diagram-level-3 {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-1 .zoomable-diagram-level-4 {opacity: 0;}\\n\\nbody.tc-dynaview.tc-dynaview-zoom-factor-2 .zoomable-diagram-level-1 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-2 .zoomable-diagram-level-1 > .zoomable-diagram-item > .zoomable-diagram-body > .zoomable-diagram-text {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-2 .zoomable-diagram-level-2 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-2 .zoomable-diagram-level-3 {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-2 .zoomable-diagram-level-4 {opacity: 0;}\\n\\nbody.tc-dynaview.tc-dynaview-zoom-factor-3 .zoomable-diagram-level-1 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-3 .zoomable-diagram-level-1 > .zoomable-diagram-item > .zoomable-diagram-body > .zoomable-diagram-text {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-3 .zoomable-diagram-level-2 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-3 .zoomable-diagram-level-2 > .zoomable-diagram-item > .zoomable-diagram-body > .zoomable-diagram-text {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-3 .zoomable-diagram-level-3 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-3 .zoomable-diagram-level-4 {opacity: 0;}\\n\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4 .zoomable-diagram-level-1 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4 .zoomable-diagram-level-1 > .zoomable-diagram-item > .zoomable-diagram-body > .zoomable-diagram-text {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4 .zoomable-diagram-level-2 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4 .zoomable-diagram-level-2 > .zoomable-diagram-item > .zoomable-diagram-body > .zoomable-diagram-text {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4 .zoomable-diagram-level-3 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4 .zoomable-diagram-level-3 > .zoomable-diagram-item > .zoomable-diagram-body > .zoomable-diagram-text {opacity: 0;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4 .zoomable-diagram-level-4 {opacity: 1;}\\n\\n.zoomable-diagram-item {\\n\\tmargin: 0.5em;\\n\\tflex: 1 1 0;\\n}\\n\\n.zoomable-diagram-title {\\n\\tfont-weight: bold;\\n}\\n\\n.zoomable-diagram-body {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tposition: relative;\\n}\\n\\n.zoomable-diagram-text {\\n\\tposition: absolute;\\n}\\n\\n.zoomable-diagram-children {\\n}\\n\\n</style>\\n\\n<div class=\\\"zoomable-diagram-wrapper\\\">\\n<<zoomable-diagram \\\"$:/tags:/ZoomableDiagram\\\">>\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/dynaview/examples/zoomable-tooltips\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/examples/zoomable-tooltips\",\n \"tags\": \"$:/tags/dynaviewExamples\",\n \"caption\": \"Zoomable Tooltips\",\n \"text\": \"//Zoom into the images below to see their titles//\\n\\n''N.B. This example only works in Safari at the moment''\\n\\n<style>\\n.zoomable-tooltip-demo-container {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n}\\n\\n.zoomable-tooltip-demo-item {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tflex: 0 0 auto;\\n\\tpadding: 4px;\\n\\twidth: 5em;\\n\\theight: 7em;\\n}\\n\\n.zoomable-tooltip-demo-item-image {\\n\\tflex: 0 0 auto;\\n}\\n\\n.zoomable-tooltip-demo-item-image svg {\\n\\twidth: 4em;\\n\\theight: 4em;\\n}\\n\\n.zoomable-tooltip-demo-item-text {\\n\\tfont-size:0.3em;\\n\\tflex: 0 0 auto;\\n\\tline-height: 1.1;\\n\\ttext-align: center;\\n text-align: center;\\n background: #f7f747;\\n border: 1px solid #c2c235;\\n padding: 2px;\\n border-radius: 2px;\\n}\\n</style>\\n<div class=\\\"zoomable-tooltip-demo-container\\\">\\n<$list filter=\\\"[all[tiddlers+shadows]tag[$:/tags/Image]]\\\">\\n<div class=\\\"zoomable-tooltip-demo-item\\\">\\n<span class=\\\"zoomable-tooltip-demo-item-image\\\">\\n<$transclude/>\\n</span>\\n<span class=\\\"zoomable-tooltip-demo-item-text tc-dynaview-zoom-visible-2-and-above\\\">\\n<$text text=<<currentTiddler>>/>\\n</span>\\n</div>\\n</$list>\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/dynaview/examples\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/examples\",\n \"text\": \"<<tabs \\\"[all[tiddlers+shadows]tag[$:/tags/dynaviewExamples]!has[draft.of]]\\\" \\\"$:/plugins/tiddlywiki/dynaview/examples/progressive-text\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/dynaview/macros\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/macros\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define transclude-when-visible(tiddler,mode:\\\"block\\\",state,minHeight:\\\"1em\\\",loadingText:\\\"…\\\")\\n<$reveal state=<<__state__>> type=\\\"match\\\" text=\\\"visible\\\" tag=\\\"div\\\">\\n<div class=\\\"tc-dynaview-set-tiddler-when-visible\\\" data-dynaview-set-tiddler=<<__state__>> data-dynaview-set-value=\\\"visible\\\">\\n<$transclude tiddler=<<__tiddler__>> mode=<<__mode__>>/>\\n</div>\\n</$reveal>\\n<$reveal state=<<__state__>> type=\\\"nomatch\\\" text=\\\"visible\\\" tag=\\\"div\\\">\\n<div class=\\\"tc-dynaview-set-tiddler-when-visible\\\" style=\\\"min-height: $minHeight$;\\\" data-dynaview-set-tiddler=<<__state__>> data-dynaview-set-value=\\\"visible\\\">\\n$loadingText$\\n</div>\\n</$reveal>\\n\\\\end\\n\"\n },\n \"$:/plugins/tiddlywiki/dynaview/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/readme\",\n \"text\": \"! Dynaview\\n\\nThis plugin makes it possible to build user interfaces that dynamically respond to changes in the browser viewport via scrolling or zooming:\\n\\n* CSS classes that allow rendering to be deferred until the output is scrolled into view\\n* CSS classes that allow the opacity of DOM elements to vary according to the current zoom level\\n* A daemon that can dynamically update a pair of state tiddlers with the current dimensions of the browser viewport\\n* A daemon that can dynamically update the address bar with the title of the tiddler at the top of the viewport\\n\\nSome points to note about the zoom features:\\n\\n<<<\\n\\n* The zoom level currently only works on Safari, both on Mac OS and on the iPhone/iPad\\n* The zoom level tracked by the plugin is the pinch-zoom level, and not the text-zoom level\\n* Rather than being progressively rendered as needed, hidden item are rendered with zero opacity. Which means that they can still be interacted with\\n\\nThis is really just a proof of concept to allow the user experience to be evaluated. A production version would need to work in all browsers, which would mean adopting a polyfill such as [[Hammer.js|http://hammerjs.github.io/]] to give us manual pan and zoom support. It would also allow deeper levels of zoom.\\n\\n<<<\\n\"\n },\n \"$:/plugins/tiddlywiki/dynaview/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/dynaview/styles\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\\\define if-tiddler-is(title,value,text)\\n<$reveal stateTitle=<<__title__>> text=<<__value__>> type=\\\"match\\\">\\n<$text text=<<__text__>>/>\\n</$reveal>\\n\\\\end\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n<<if-tiddler-is title:\\\"$:/config/DynaView/PreserveScrollPosition\\\" value:\\\"yes\\\" text:\\\"\\\"\\\"\\nbody {\\n\\toverflow-anchor: none; /* Turn off browser scroll anchoring */\\n}\\n\\\"\\\"\\\">>\\n\\nbody.tc-dynaview .tc-dynaview-zoom-visible-1-and-above,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-1a-and-above,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-1b-and-above,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-1c-and-above,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-2-and-above,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-2a-and-above,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-3-and-above,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-4-and-above,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-1,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-2,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-3,\\nbody.tc-dynaview .tc-dynaview-zoom-visible-4 {\\n\\ttransition: opacity 150ms ease-in-out;\\n\\topacity: 0;\\n}\\n\\nbody.tc-dynaview .tc-dynaview-zoom-visible-1-and-above {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-1a-and-above .tc-dynaview-zoom-visible-1a-and-above {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-1b-and-above .tc-dynaview-zoom-visible-1b-and-above {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-1c-and-above .tc-dynaview-zoom-visible-1c-and-above {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-2-and-above .tc-dynaview-zoom-visible-2-and-above {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-2a-and-above .tc-dynaview-zoom-visible-2a-and-above {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-3-and-above .tc-dynaview-zoom-visible-3-and-above {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4-and-above .tc-dynaview-zoom-visible-4-and-above {opacity: 1;}\\n\\nbody.tc-dynaview.tc-dynaview-zoom-factor-1 .tc-dynaview-zoom-visible-1 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-2 .tc-dynaview-zoom-visible-2 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-3 .tc-dynaview-zoom-visible-3 {opacity: 1;}\\nbody.tc-dynaview.tc-dynaview-zoom-factor-4 .tc-dynaview-zoom-visible-4 {opacity: 1;}\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/evernote":{"title":"$:/plugins/tiddlywiki/evernote","name":"Evernote","description":"Evernote migration tools","list":"readme docs","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/evernote/docs\": {\n \"title\": \"$:/plugins/tiddlywiki/evernote/docs\",\n \"text\": \"! Introduction\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/evernote/modules/enex-deserializer.js\": {\n \"title\": \"$:/plugins/tiddlywiki/evernote/modules/enex-deserializer.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/evernote/modules/enex-deserializer.js\\ntype: application/javascript\\nmodule-type: tiddlerdeserializer\\n\\nENEX file deserializer\\n\\nFor details see: https://blog.evernote.com/tech/2013/08/08/evernote-export-format-enex/\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// DOMParser = require(\\\"$:/plugins/tiddlywiki/xmldom/dom-parser\\\").DOMParser;\\n\\n/*\\nParse an ENEX file into tiddlers\\n*/\\nexports[\\\"application/enex+xml\\\"] = function(text,fields) {\\n\\t// Collect output tiddlers in an array\\n\\tvar results = [];\\n\\t// Parse the XML document\\n\\tvar parser = new DOMParser(),\\n\\t\\tdoc = parser.parseFromString(text,\\\"application/xml\\\");\\n\\t// Output a report tiddler with information about the import\\n\\tvar enex = doc.querySelector(\\\"en-export\\\");\\n\\tresults.push({\\n\\t\\ttitle: \\\"Evernote Import Report\\\",\\n\\t\\ttext: \\\"Evernote file imported on \\\" + enex.getAttribute(\\\"export-date\\\") + \\\" from \\\" + enex.getAttribute(\\\"application\\\") + \\\" (\\\" + enex.getAttribute(\\\"version\\\") + \\\")\\\"\\n\\t})\\n\\t// Get all the \\\"note\\\" nodes\\n\\tvar noteNodes = doc.querySelectorAll(\\\"note\\\");\\n\\t$tw.utils.each(noteNodes,function(noteNode) {\\n\\t\\tvar result = {\\n\\t\\t\\ttitle: getTextContent(noteNode,\\\"title\\\"),\\n\\t\\t\\ttype: \\\"text/html\\\",\\n\\t\\t\\ttags: [],\\n\\t\\t\\ttext: getTextContent(noteNode,\\\"content\\\"),\\n\\t\\t\\tmodified: convertDate(getTextContent(noteNode,\\\"created\\\")),\\n\\t\\t\\tcreated: convertDate(getTextContent(noteNode,\\\"created\\\"))\\n\\n\\t\\t};\\n\\t\\t$tw.utils.each(noteNode.querySelectorAll(\\\"tag\\\"),function(tagNode) {\\n\\t\\t\\tresult.tags.push(tagNode.textContent);\\n\\t\\t});\\n\\t\\t// If there's an update date, set modifiy date accordingly\\n\\t\\tvar update = getTextContent(noteNode,\\\"updated\\\");\\n\\t\\tif(update) {\\n\\t\\t\\tresult.modified = convertDate(update);\\n\\t\\t}\\n\\t\\t$tw.utils.each(noteNode.querySelectorAll(\\\"note-attributes>*\\\"),function(attrNode) {\\n\\t\\t\\tresult[attrNode.tagName] = attrNode.textContent;\\n\\t\\t});\\n\\t\\tresults.push(result);\\n\\t\\t$tw.utils.each(noteNode.querySelectorAll(\\\"resource\\\"),function(resourceNode) {\\n\\t\\t\\tresults.push({\\n\\t\\t\\t\\ttitle: getTextContent(resourceNode,\\\"resource-attributes>file-name\\\"),\\n\\t\\t\\t\\ttype: getTextContent(resourceNode,\\\"mime\\\"),\\n\\t\\t\\t\\twidth: getTextContent(resourceNode,\\\"width\\\"),\\n\\t\\t\\t\\theight: getTextContent(resourceNode,\\\"height\\\"),\\n\\t\\t\\t\\ttext: getTextContent(resourceNode,\\\"data\\\")\\n\\t\\t\\t});\\n\\t\\t});\\n\\t});\\n\\t// Return the output tiddlers\\n\\treturn results;\\n};\\n\\nfunction getTextContent(node,selector) {\\n\\treturn (node.querySelector(selector) || {}).textContent;\\n}\\n\\nfunction convertDate(isoDate) {\\n\\treturn (isoDate || \\\"\\\").replace(\\\"T\\\",\\\"\\\").replace(\\\"Z\\\",\\\"\\\") + \\\"000\\\"\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"tiddlerdeserializer\"\n },\n \"$:/plugins/tiddlywiki/evernote/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/evernote/readme\",\n \"text\": \"This plugin contains tool to assist migration of content from Evernote ENEX files.\\n\\n!! Instructions\\n\\n# Download or save your ENEX file from Evernote\\n# Rename the file to have an `.enex` extension\\n# Drag the file into the TiddlyWiki browser window\\n## Alternatively, click the \\\"Import\\\" button in the \\\"Tools\\\" sidebar tab\\n# Review and accept the converted tiddlers\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/external-attachments":{"title":"$:/plugins/tiddlywiki/external-attachments","name":"External Attachments","description":"External attachments for TiddlyDesktop","list":"readme settings","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/ExternalAttachments/Enable\": {\n \"title\": \"$:/config/ExternalAttachments/Enable\",\n \"text\": \"yes\"\n },\n \"$:/config/ExternalAttachments/UseAbsoluteForDescendents\": {\n \"title\": \"$:/config/ExternalAttachments/UseAbsoluteForDescendents\",\n \"text\": \"no\"\n },\n \"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents\": {\n \"title\": \"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents\",\n \"text\": \"no\"\n },\n \"$:/plugins/tiddlywiki/external-attachments/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/external-attachments/readme\",\n \"text\": \"! Introduction\\n\\nThis plugin provides support for importing tiddlers as external attachments. That means that instead of importing binary files as self-contained tiddlers, they are imported as \\\"skinny\\\" tiddlers that reference the original file via the ''_canonical_uri'' field. This reduces the size of the wiki and thus improves performance. However, it does mean that the wiki is no longer fully self-contained.\\n\\n! Compatibility\\n\\nThis plugin only works when using TiddlyWiki with platforms such as TiddlyDesktop that support the ''path'' attribute for imported/dragged files.\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/external-attachments/settings\": {\n \"title\": \"$:/plugins/tiddlywiki/external-attachments/settings\",\n \"text\": \"When used on platforms that provide the necessary support (such as ~TiddlyDesktop), you can optionally import binary files as external tiddlers that reference the original file via the ''_canonical_uri'' field.\\n\\nBy default, a relative path is used to reference the file. Optionally, you can specify that an absolute path is used instead. You can do this separately for \\\"descendent\\\" attachments -- files that are contained within the directory containing the wiki -- vs. \\\"non-descendent\\\" attachments.\\n\\n<$checkbox tiddler=\\\"$:/config/ExternalAttachments/Enable\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> <$link to=\\\"$:/config/ExternalAttachments/Enable\\\">Enable importing binary files as external attachments</$link> </$checkbox>\\n\\n<$checkbox tiddler=\\\"$:/config/ExternalAttachments/UseAbsoluteForDescendents\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> <$link to=\\\"$:/config/ExternalAttachments/UseAbsoluteForDescendents\\\">Use absolute paths for descendent attachments</$link> </$checkbox>\\n\\n<$checkbox tiddler=\\\"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> <$link to=\\\"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents\\\">Use absolute paths for non-descendent attachments</$link> </$checkbox>\\n\"\n },\n \"$:/plugins/tiddlywiki/external-attachments/startup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/external-attachments/startup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/external-attachments/startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nStartup initialisation\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar ENABLE_EXTERNAL_ATTACHMENTS_TITLE = \\\"$:/config/ExternalAttachments/Enable\\\",\\n\\tUSE_ABSOLUTE_FOR_DESCENDENTS_TITLE = \\\"$:/config/ExternalAttachments/UseAbsoluteForDescendents\\\",\\n\\tUSE_ABSOLUTE_FOR_NON_DESCENDENTS_TITLE = \\\"$:/config/ExternalAttachments/UseAbsoluteForNonDescendents\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"external-attachments\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.after = [\\\"startup\\\"];\\nexports.synchronous = true;\\n\\nexports.startup = function() {\\n\\ttest_makePathRelative();\\n\\t$tw.hooks.addHook(\\\"th-importing-file\\\",function(info) {\\n\\t\\tif(document.location.protocol === \\\"file:\\\" && info.isBinary && info.file.path && $tw.wiki.getTiddlerText(ENABLE_EXTERNAL_ATTACHMENTS_TITLE,\\\"\\\") === \\\"yes\\\") {\\nconsole.log(\\\"Wiki location\\\",document.location.pathname)\\nconsole.log(\\\"File location\\\",info.file.path)\\n\\t\\t\\tinfo.callback([\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ttitle: info.file.name,\\n\\t\\t\\t\\t\\ttype: info.type,\\n\\t\\t\\t\\t\\t\\\"_canonical_uri\\\": makePathRelative(\\n\\t\\t\\t\\t\\t\\tinfo.file.path,\\n\\t\\t\\t\\t\\t\\tdocument.location.pathname,\\n\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\tuseAbsoluteForNonDescendents: $tw.wiki.getTiddlerText(USE_ABSOLUTE_FOR_NON_DESCENDENTS_TITLE,\\\"\\\") === \\\"yes\\\",\\n\\t\\t\\t\\t\\t\\t\\tuseAbsoluteForDescendents: $tw.wiki.getTiddlerText(USE_ABSOLUTE_FOR_DESCENDENTS_TITLE,\\\"\\\") === \\\"yes\\\"\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t}\\n\\t\\t\\t]);\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nGiven a source absolute filepath and a root absolute path, returns the source filepath expressed as a relative filepath from the root path.\\n\\nsourcepath comes from the \\\"path\\\" property of the file object, with the following patterns:\\n\\t/path/to/file.png for Unix systems\\n\\tC:\\\\path\\\\to\\\\file.png for local files on Windows\\n\\t\\\\\\\\sharename\\\\path\\\\to\\\\file.png for network shares on Windows\\nrootpath comes from document.location.pathname with urlencode applied with the following patterns:\\n\\t/path/to/file.html for Unix systems\\n\\t/C:/path/to/file.html for local files on Windows\\n\\t/sharename/path/to/file.html for network shares on Windows\\n*/\\nfunction makePathRelative(sourcepath,rootpath,options) {\\n\\toptions = options || {};\\n\\t// First we convert the source path from OS-dependent format to generic file:// format\\n\\tif(options.isWindows || $tw.platform.isWindows) {\\n\\t\\tsourcepath = sourcepath.replace(/\\\\\\\\/g,\\\"/\\\");\\n\\t\\t// If it's a local file like C:/path/to/file.ext then add a leading slash\\n\\t\\tif(sourcepath.charAt(0) !== \\\"/\\\") {\\n\\t\\t\\tsourcepath = \\\"/\\\" + sourcepath;\\n\\t\\t}\\n\\t\\t// If it's a network share then remove one of the leading slashes\\n\\t\\tif(sourcepath.substring(0,2) === \\\"//\\\") {\\n\\t\\t\\tsourcepath = sourcepath.substring(1);\\n\\t\\t}\\n\\t}\\n\\t// Split the path into parts\\n\\tvar sourceParts = sourcepath.split(\\\"/\\\"),\\n\\t\\trootParts = rootpath.split(\\\"/\\\"),\\n\\t\\toutputParts = [];\\n\\t// urlencode the parts of the sourcepath\\n\\t$tw.utils.each(sourceParts,function(part,index) {\\n\\t\\tsourceParts[index] = encodeURI(part);\\n\\t});\\n\\t// Identify any common portion from the start\\n\\tvar c = 0,\\n\\t\\tp;\\n\\twhile(c < sourceParts.length && c < rootParts.length && sourceParts[c] === rootParts[c]) {\\n\\t\\tc += 1;\\n\\t}\\n\\t// Use an absolute path if there's no common portion, or if specifically requested\\n\\tif(c === 1 || (options.useAbsoluteForNonDescendents && c < rootParts.length) || (options.useAbsoluteForDescendents && c === rootParts.length)) {\\n\\t\\treturn sourcepath;\\n\\t}\\n\\t// Move up a directory for each directory left in the root\\n\\tfor(p = c; p < rootParts.length; p++) {\\n\\t\\toutputParts.push(\\\"..\\\");\\n\\t}\\t\\t\\n\\t// Add on the remaining parts of the source path\\n\\tfor(p = c; p < sourceParts.length; p++) {\\n\\t\\toutputParts.push(sourceParts[p]);\\n\\t}\\n\\treturn outputParts.join(\\\"/\\\");\\n}\\n\\nfunction test_makePathRelative() {\\n\\tvar test = function(sourcepath,rootpath,result,options) {\\n\\t\\tif(makePathRelative(sourcepath,rootpath,options) !== result) {\\n\\t\\t\\tthrow \\\"makePathRelative test failed: makePathRelative(\\\" + sourcepath + \\\",\\\" + rootpath + \\\",\\\" + JSON.stringify(options) + \\\") is not equal to \\\" + result;\\t\\t\\t\\n\\t\\t}\\n\\t};\\n\\ttest(\\\"/Users/me/something/file.png\\\",\\\"/Users/you/something\\\",\\\"../../me/something/file.png\\\");\\n\\ttest(\\\"/Users/me/something/file.png\\\",\\\"/Users/you/something\\\",\\\"/Users/me/something/file.png\\\",{useAbsoluteForNonDescendents: true});\\n\\ttest(\\\"/Users/me/something/else/file.png\\\",\\\"/Users/me/something\\\",\\\"else/file.png\\\");\\n\\ttest(\\\"/Users/me/something/file.png\\\",\\\"/Users/me/something/new\\\",\\\"../file.png\\\");\\n\\ttest(\\\"/Users/me/something/file.png\\\",\\\"/Users/me/something/new\\\",\\\"/Users/me/something/file.png\\\",{useAbsoluteForNonDescendents: true});\\n\\ttest(\\\"/Users/me/something/file.png\\\",\\\"/Users/me/something\\\",\\\"file.png\\\");\\n\\ttest(\\\"C:\\\\\\\\Users\\\\\\\\me\\\\\\\\something\\\\\\\\file.png\\\",\\\"/C:/Users/me/something\\\",\\\"file.png\\\",{isWindows: true});\\n\\ttest(\\\"\\\\\\\\\\\\\\\\SHARE\\\\\\\\Users\\\\\\\\me\\\\\\\\something\\\\\\\\file.png\\\",\\\"/SHARE/Users/me/somethingelse\\\",\\\"../something/file.png\\\",{isWindows: true});\\n\\ttest(\\\"\\\\\\\\\\\\\\\\SHARE\\\\\\\\Users\\\\\\\\me\\\\\\\\something\\\\\\\\file.png\\\",\\\"/C:/Users/me/something\\\",\\\"/SHARE/Users/me/something/file.png\\\",{isWindows: true});\\n}\\n\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n }\n }\n}"},"$:/plugins/tiddlywiki/filesystem":{"title":"$:/plugins/tiddlywiki/filesystem","name":"Filesystem","description":"Synchronise changes to the local filesystem","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/filesystem/filesystemadaptor.js\": {\n \"title\": \"$:/plugins/tiddlywiki/filesystem/filesystemadaptor.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/filesystem/filesystemadaptor.js\\ntype: application/javascript\\nmodule-type: syncadaptor\\n\\nA sync adaptor module for synchronising with the local filesystem via node.js APIs\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Get a reference to the file system\\nvar fs = $tw.node ? require(\\\"fs\\\") : null,\\n\\tpath = $tw.node ? require(\\\"path\\\") : null;\\n\\nfunction FileSystemAdaptor(options) {\\n\\tvar self = this;\\n\\tthis.wiki = options.wiki;\\n\\tthis.boot = options.boot || $tw.boot;\\n\\tthis.logger = new $tw.utils.Logger(\\\"filesystem\\\",{colour: \\\"blue\\\"});\\n\\t// Create the <wiki>/tiddlers folder if it doesn't exist\\n\\t$tw.utils.createDirectory(this.boot.wikiTiddlersPath);\\n}\\n\\nFileSystemAdaptor.prototype.name = \\\"filesystem\\\";\\n\\nFileSystemAdaptor.prototype.supportsLazyLoading = false;\\n\\nFileSystemAdaptor.prototype.isReady = function() {\\n\\t// The file system adaptor is always ready\\n\\treturn true;\\n};\\n\\nFileSystemAdaptor.prototype.getTiddlerInfo = function(tiddler) {\\n\\treturn {};\\n};\\n\\n/*\\nReturn a fileInfo object for a tiddler, creating it if necessary:\\n filepath: the absolute path to the file containing the tiddler\\n type: the type of the tiddler file (NOT the type of the tiddler -- see below)\\n hasMetaFile: true if the file also has a companion .meta file\\n\\nThe boot process populates this.boot.files for each of the tiddler files that it loads. The type is found by looking up the extension in $tw.config.fileExtensionInfo (eg \\\"application/x-tiddler\\\" for \\\".tid\\\" files).\\n\\nIt is the responsibility of the filesystem adaptor to update this.boot.files for new files that are created.\\n*/\\nFileSystemAdaptor.prototype.getTiddlerFileInfo = function(tiddler,callback) {\\n\\t// See if we've already got information about this file\\n\\tvar title = tiddler.fields.title,\\n\\t\\tfileInfo = this.boot.files[title];\\n\\tif(!fileInfo) {\\n\\t\\t// Otherwise, we'll need to generate it\\n\\t\\tfileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\\n\\t\\t\\tdirectory: this.boot.wikiTiddlersPath,\\n\\t\\t\\tpathFilters: this.wiki.getTiddlerText(\\\"$:/config/FileSystemPaths\\\",\\\"\\\").split(\\\"\\\\n\\\"),\\n\\t\\t\\twiki: this.wiki\\n\\t\\t});\\n\\t\\tthis.boot.files[title] = fileInfo;\\n\\t}\\n\\tcallback(null,fileInfo);\\n};\\n\\n\\n/*\\nSave a tiddler and invoke the callback with (err,adaptorInfo,revision)\\n*/\\nFileSystemAdaptor.prototype.saveTiddler = function(tiddler,callback) {\\n\\tvar self = this;\\n\\tthis.getTiddlerFileInfo(tiddler,function(err,fileInfo) {\\n\\t\\tif(err) {\\n\\t\\t\\treturn callback(err);\\n\\t\\t}\\n\\t\\t$tw.utils.saveTiddlerToFile(tiddler,fileInfo,callback);\\n\\t});\\n};\\n\\n/*\\nLoad a tiddler and invoke the callback with (err,tiddlerFields)\\n\\nWe don't need to implement loading for the file system adaptor, because all the tiddler files will have been loaded during the boot process.\\n*/\\nFileSystemAdaptor.prototype.loadTiddler = function(title,callback) {\\n\\tcallback(null,null);\\n};\\n\\n/*\\nDelete a tiddler and invoke the callback with (err)\\n*/\\nFileSystemAdaptor.prototype.deleteTiddler = function(title,callback,options) {\\n\\tvar self = this,\\n\\t\\tfileInfo = this.boot.files[title];\\n\\t// Only delete the tiddler if we have writable information for the file\\n\\tif(fileInfo) {\\n\\t\\t// Delete the file\\n\\t\\tfs.unlink(fileInfo.filepath,function(err) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\t// Delete the metafile if present\\n\\t\\t\\tif(fileInfo.hasMetaFile) {\\n\\t\\t\\t\\tfs.unlink(fileInfo.filepath + \\\".meta\\\",function(err) {\\n\\t\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tcallback(null);\\n\\t}\\n};\\n\\nif(fs) {\\n\\texports.adaptorClass = FileSystemAdaptor;\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"syncadaptor\"\n },\n \"$:/plugins/tiddlywiki/filesystem/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/filesystem/readme\",\n \"text\": \"The filesystem plugin is used under Node.js to synchronise tiddler changes back to the file system. It is inert when used in the browser.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/filesystem]]\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/freelinks":{"title":"$:/plugins/tiddlywiki/freelinks","name":"Freelinks","description":"Freelinking of tiddler titles","list":"readme settings","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/Freelinks/Enable\": {\n \"title\": \"$:/config/Freelinks/Enable\",\n \"text\": \"yes\"\n },\n \"$:/plugins/tiddlywiki/freelinks/macros/view\": {\n \"title\": \"$:/plugins/tiddlywiki/freelinks/macros/view\",\n \"tags\": \"$:/tags/Macro/View\",\n \"text\": \"<$set name=\\\"tv-freelinks\\\" value={{$:/config/Freelinks/Enable}}>\\n\\n<$set name=\\\"tv-freelinks-ignore-case\\\" value={{$:/config/Freelinks/IgnoreCase}}/>\\n\\n</$set>\"\n },\n \"$:/core/modules/widgets/plain-text.js\": {\n \"title\": \"$:/core/modules/widgets/plain-text.js\",\n \"text\": \"/*\\\\\\ntitle: $:/core/modules/widgets/plain-text.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nA copy of the core text widget under a different name\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n\\nvar PlainTextNodeWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nPlainTextNodeWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nPlainTextNodeWidget.prototype.render = function(parent,nextSibling) {\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar text = this.getAttribute(\\\"text\\\",this.parseTreeNode.text || \\\"\\\");\\n\\ttext = text.replace(/\\\\r/mg,\\\"\\\");\\n\\tvar textNode = this.document.createTextNode(text);\\n\\tparent.insertBefore(textNode,nextSibling);\\n\\tthis.domNodes.push(textNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nPlainTextNodeWidget.prototype.execute = function() {\\n\\t// Nothing to do for a text node\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nPlainTextNodeWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.text) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\t\\n\\t}\\n};\\n\\nexports[\\\"plain-text\\\"] = PlainTextNodeWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/freelinks/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/freelinks/readme\",\n \"text\": \"This plugin adds automatic generation of links to tiddler titles.\\n\\n''Note that automatic link generation can be very slow when there are a large number of tiddlers''.\\n\\nFreelinking is activated for runs of text that have the following variables set:\\n\\n* `tv-wikilinks` is NOT equal to `no`\\n* `tv-freelinks` is set to `yes`\\n\\nFreelinks are case sensitive by default but can be configured to ignore case in the settings tab.\\n\\nWithin view templates, the variable `tv-freelinks` is automatically set to the content of $:/config/Freelinks/Enable, which can be set via the settings panel of this plugin.\\n\\n!! Notes\\n\\nTo change within which tiddlers freelinking occurs requires customising the shadow tiddler $:/plugins/tiddlywiki/freelinks/macros/view. This tiddler is tagged $:/tags/Macro/View which means that it will be included as a local macro in each view template. By default, its content is:\\n\\n```\\n<$set name=\\\"tv-freelinks\\\" value={{$:/config/Freelinks/Enable}}/>\\n```\\n\\nThat means that for each tiddler the variable tv-freelinks will be set to the tiddler $:/config/Freelinks/Enable, which is set to \\\"yes\\\" or \\\"no\\\" by the settings in control panel.\\n\\nInstead, we can use a filter expression to, say, only freelink within the tiddler with the title \\\"HelloThere\\\":\\n\\n```\\n<$set name=\\\"tv-freelinks\\\" value={{{ [<currentTiddler>match[HelloThere]then[yes]else[no]] }}}/>\\n```\\n\\nOr, we can make a filter that will only freelink within tiddlers with the tag \\\"MyTag\\\":\\n\\n```\\n<$set name=\\\"tv-freelinks\\\" value={{{ [<currentTiddler>tag[MyTags]then[yes]else[no]] }}}/>\\n```\\n\\nOr we can combine both approaches:\\n\\n```\\n<$set name=\\\"tv-freelinks\\\" value={{{ [<currentTiddler>match[HelloThere]] ~[<currentTiddler>tag[MyTag]] +[then[yes]else[no]] }}}/>\\n```\\n\"\n },\n \"$:/plugins/tiddlywiki/freelinks/settings\": {\n \"title\": \"$:/plugins/tiddlywiki/freelinks/settings\",\n \"text\": \"<$checkbox tiddler=\\\"$:/config/Freelinks/Enable\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> <$link to=\\\"$:/config/Freelinks/Enable\\\">Enable freelinking within tiddler view templates</$link> </$checkbox>\\n\\n<$checkbox tiddler=\\\"$:/config/Freelinks/IgnoreCase\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> <$link to=\\\"$:/config/Freelinks/IgnoreCase\\\">Ignore case</$link> </$checkbox>\\n\"\n },\n \"$:/plugins/tiddlywiki/freelinks/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/freelinks/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\nbutton.tc-tiddlylink.tc-freelink, a.tc-tiddlylink.tc-freelink {\\n\\tbackground-color: #5777d91c;\\n}\\n\"\n },\n \"$:/core/modules/widgets/text.js\": {\n \"title\": \"$:/core/modules/widgets/text.js\",\n \"text\": \"/*\\\\\\ntitle: $:/core/modules/widgets/text.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAn override of the core text widget that automatically linkifies the text\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget,\\n\\tLinkWidget = require(\\\"$:/core/modules/widgets/link.js\\\").link,\\n\\tButtonWidget = require(\\\"$:/core/modules/widgets/button.js\\\").button,\\n\\tElementWidget = require(\\\"$:/core/modules/widgets/element.js\\\").element;\\n\\nvar TextNodeWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nTextNodeWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nTextNodeWidget.prototype.execute = function() {\\n\\tvar self = this,\\n\\t\\tignoreCase = self.getVariable(\\\"tv-freelinks-ignore-case\\\",{defaultValue:\\\"no\\\"}).trim() === \\\"yes\\\";\\n\\t// Get our parameters\\n\\tvar childParseTree = [{\\n\\t\\t\\ttype: \\\"plain-text\\\",\\n\\t\\t\\ttext: this.getAttribute(\\\"text\\\",this.parseTreeNode.text || \\\"\\\")\\n\\t\\t}];\\n\\t// Only process links if not disabled and we're not within a button or link widget\\n\\tif(this.getVariable(\\\"tv-wikilinks\\\",{defaultValue:\\\"yes\\\"}).trim() !== \\\"no\\\" && this.getVariable(\\\"tv-freelinks\\\",{defaultValue:\\\"no\\\"}).trim() === \\\"yes\\\" && !this.isWithinButtonOrLink()) {\\n\\t\\t// Get the information about the current tiddler titles, and construct a regexp\\n\\t\\tthis.tiddlerTitleInfo = this.wiki.getGlobalCache(\\\"tiddler-title-info-\\\" + (ignoreCase ? \\\"insensitive\\\" : \\\"sensitive\\\"),function() {\\n\\t\\t\\tvar sortedTitles = self.wiki.allTitles().sort(function(a,b) {\\n\\t\\t\\t\\t\\tvar lenA = a.length,\\n\\t\\t\\t\\t\\t\\tlenB = b.length;\\n\\t\\t\\t\\t\\t// First sort by length, so longer titles are first\\n\\t\\t\\t\\t\\tif(lenA !== lenB) {\\n\\t\\t\\t\\t\\t\\tif(lenA < lenB) {\\n\\t\\t\\t\\t\\t\\t\\treturn +1;\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\treturn -1;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// Then sort alphabetically within titles of the same length\\n\\t\\t\\t\\t\\t\\tif(a < b) {\\n\\t\\t\\t\\t\\t\\t\\treturn -1;\\n\\t\\t\\t\\t\\t\\t} else if(a > b) {\\n\\t\\t\\t\\t\\t\\t\\treturn +1;\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\treturn 0;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}),\\n\\t\\t\\t\\ttitles = [],\\n\\t\\t\\t\\treparts = [];\\n\\t\\t\\t$tw.utils.each(sortedTitles,function(title) {\\n\\t\\t\\t\\tif(title.substring(0,3) !== \\\"$:/\\\") {\\n\\t\\t\\t\\t\\ttitles.push(title);\\n\\t\\t\\t\\t\\treparts.push(\\\"(\\\\\\\\b\\\" + $tw.utils.escapeRegExp(title) + \\\"\\\\\\\\b)\\\");\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ttitles: titles,\\n\\t\\t\\t\\tregexp: new RegExp(reparts.join(\\\"|\\\"),ignoreCase ? \\\"i\\\" : \\\"\\\")\\n\\t\\t\\t};\\n\\t\\t});\\n\\t\\t// Repeatedly linkify\\n\\t\\tif(this.tiddlerTitleInfo.titles.length > 0) {\\n\\t\\t\\tvar index,text,match,matchEnd;\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tindex = childParseTree.length - 1;\\n\\t\\t\\t\\ttext = childParseTree[index].text;\\n\\t\\t\\t\\tmatch = this.tiddlerTitleInfo.regexp.exec(text);\\n\\t\\t\\t\\tif(match) {\\n\\t\\t\\t\\t\\t// Make a text node for any text before the match\\n\\t\\t\\t\\t\\tif(match.index > 0) {\\n\\t\\t\\t\\t\\t\\tchildParseTree[index].text = text.substring(0,match.index);\\n\\t\\t\\t\\t\\t\\tindex += 1;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t// Make a link node for the match\\n\\t\\t\\t\\t\\tchildParseTree[index] = {\\n\\t\\t\\t\\t\\t\\ttype: \\\"link\\\",\\n\\t\\t\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\t\\t\\tto: {type: \\\"string\\\", value: ignoreCase ? this.tiddlerTitleInfo.titles[match.indexOf(match[0],1) - 1] : match[0]},\\n\\t\\t\\t\\t\\t\\t\\t\\\"class\\\": {type: \\\"string\\\", value: \\\"tc-freelink\\\"}\\n\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\tchildren: [{\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\"plain-text\\\", text: match[0]\\n\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\tindex += 1;\\n\\t\\t\\t\\t\\t// Make a text node for any text after the match\\n\\t\\t\\t\\t\\tmatchEnd = match.index + match[0].length;\\n\\t\\t\\t\\t\\tif(matchEnd < text.length) {\\n\\t\\t\\t\\t\\t\\tchildParseTree[index] = {\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\"plain-text\\\",\\n\\t\\t\\t\\t\\t\\t\\ttext: text.substring(matchEnd)\\n\\t\\t\\t\\t\\t\\t};\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while(match && childParseTree[childParseTree.length - 1].type === \\\"plain-text\\\");\\t\\t\\t\\n\\t\\t}\\n\\t}\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets(childParseTree);\\n};\\n\\nTextNodeWidget.prototype.isWithinButtonOrLink = function() {\\n\\tvar withinButtonOrLink = false,\\n\\t\\twidget = this.parentWidget;\\n\\twhile(!withinButtonOrLink && widget) {\\n\\t\\twithinButtonOrLink = widget instanceof ButtonWidget || widget instanceof LinkWidget || ((widget instanceof ElementWidget) && widget.parseTreeNode.tag === \\\"a\\\");\\n\\t\\twidget = widget.parentWidget;\\n\\t}\\n\\treturn withinButtonOrLink;\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar self = this,\\n\\t\\tchangedAttributes = this.computeAttributes(),\\n\\t\\ttitlesHaveChanged = false;\\n\\t$tw.utils.each(changedTiddlers,function(change,title) {\\n\\t\\tif(change.isDeleted) {\\n\\t\\t\\ttitlesHaveChanged = true;\\n\\t\\t} else {\\n\\t\\t\\ttitlesHaveChanged = titlesHaveChanged || !self.tiddlerTitleInfo || self.tiddlerTitleInfo.titles.indexOf(title) === -1;\\n\\t\\t}\\n\\t});\\n\\tif(changedAttributes.text || titlesHaveChanged) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\t\\n\\t}\\n};\\n\\nexports.text = TextNodeWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n }\n }\n}"},"$:/plugins/tiddlywiki/github-fork-ribbon":{"title":"$:/plugins/tiddlywiki/github-fork-ribbon","name":"GitHub Fork Ribbon","description":"GitHub-inspired corner ribbon","author":"Simon Whitaker","list":"readme usage","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/github-fork-ribbon/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/github-fork-ribbon/readme\",\n \"text\": \"This plugin provides a diagonal ribbon across the corner of the window. It resembles the design used by ~GitHub for their \\\"Fork me on ~GitHub\\\" ribbons.\\n\\nThe ribbon can be positioned over any corner, and can incorporate user defined text, colours and a link.\\n\\nThe CSS stylesheet is adapted from work by Simon Whitaker:\\n\\nhttps://github.com/simonwhitaker/github-fork-ribbon-css/\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/github-fork-ribbon]]\\n\"\n },\n \"$:/plugins/tiddlywiki/github-fork-ribbon/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/github-fork-ribbon/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"/* Left will inherit from right (so we don't need to duplicate code */\\n.github-fork-ribbon {\\n /* The right and left lasses determine the side we attach our banner to */\\n position: absolute;\\n\\n /* Add a bit of padding to give some substance outside the \\\"stitching\\\" */\\n padding: 2px 0;\\n\\n /* Set the base colour */\\n background-color: #a00;\\n\\n /* Set a gradient: transparent black at the top to almost-transparent black at the bottom */\\n background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.00)), to(rgba(0, 0, 0, 0.15)));\\n background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n background-image: linear-gradient(top, rgba(0, 0, 0, 0.00), rgba(0, 0, 0, 0.15));\\n filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#000000', EndColorStr='#000000');\\n\\n /* Add a drop shadow */\\n -webkit-box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);\\n box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);\\n\\n z-index: 999;\\n pointer-events: auto;\\n}\\n\\n.github-fork-ribbon a, .github-fork-ribbon a.tc-tiddlylink,\\n.github-fork-ribbon a:hover, .github-fork-ribbon a.tc-tiddlylink:hover {\\n /* Set the font */\\n font-family: \\\"Helvetica Neue\\\", Helvetica, Arial, sans-serif;\\n font-size: 13px;\\n font-weight: 700;\\n color: white;\\n\\n /* Set the text properties */\\n text-decoration: none;\\n text-shadow: 0 -1px rgba(0,0,0,0.5);\\n text-align: center;\\n\\n /* Set the geometry. If you fiddle with these you'll also need to tweak the top and right values in #github-fork-ribbon. */\\n width: 200px;\\n line-height: 20px;\\n\\n /* Set the layout properties */\\n display: inline-block;\\n padding: 2px 0;\\n\\n /* Add \\\"stitching\\\" effect */\\n border-width: 1px 0;\\n border-style: dotted;\\n border-color: rgba(255,255,255,0.7);\\n}\\n\\n.github-fork-ribbon-wrapper {\\n width: 150px;\\n height: 150px;\\n position: absolute;\\n overflow: hidden;\\n top: 0;\\n z-index: 999;\\n pointer-events: none;\\n}\\n\\n.github-fork-ribbon-wrapper.fixed {\\n position: fixed;\\n}\\n\\n.github-fork-ribbon-wrapper.left {\\n left: 0;\\n}\\n\\n.github-fork-ribbon-wrapper.right {\\n right: 0;\\n}\\n\\n.github-fork-ribbon-wrapper.left-bottom {\\n position: fixed;\\n top: inherit;\\n bottom: 0;\\n left: 0;\\n}\\n\\n.github-fork-ribbon-wrapper.right-bottom {\\n position: fixed;\\n top: inherit;\\n bottom: 0;\\n right: 0;\\n}\\n\\n.github-fork-ribbon-wrapper.right .github-fork-ribbon {\\n top: 42px;\\n right: -43px;\\n\\n /* Rotate the banner 45 degrees */\\n -webkit-transform: rotate(45deg);\\n -moz-transform: rotate(45deg);\\n -o-transform: rotate(45deg);\\n transform: rotate(45deg);\\n}\\n\\n.github-fork-ribbon-wrapper.left .github-fork-ribbon {\\n top: 42px;\\n left: -43px;\\n\\n /* Rotate the banner -45 degrees */\\n -webkit-transform: rotate(-45deg);\\n -moz-transform: rotate(-45deg);\\n -o-transform: rotate(-45deg);\\n transform: rotate(-45deg);\\n}\\n\\n\\n.github-fork-ribbon-wrapper.left-bottom .github-fork-ribbon {\\n top: 80px;\\n left: -43px;\\n\\n /* Rotate the banner -45 degrees */\\n -webkit-transform: rotate(45deg);\\n -moz-transform: rotate(45deg);\\n -o-transform: rotate(45deg);\\n transform: rotate(45deg);\\n}\\n\\n.github-fork-ribbon-wrapper.right-bottom .github-fork-ribbon {\\n top: 80px;\\n right: -43px;\\n\\n /* Rotate the banner -45 degrees */\\n -webkit-transform: rotate(-45deg);\\n -moz-transform: rotate(-45deg);\\n -o-transform: rotate(-45deg);\\n transform: rotate(-45deg);\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/github-fork-ribbon/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/github-fork-ribbon/usage\",\n \"text\": \"Copy appropriate chunks on a new tiddler and tag it `$:/tags/PageControls`. Name of the new tiddler does not matter. Only the tag matters.\\n\\n```\\n<!-- TOP RIGHT RIBBON: START COPYING HERE -->\\n<div class=\\\"github-fork-ribbon-wrapper right\\\"><div class=\\\"github-fork-ribbon\\\"><a href=\\\"https://github.com/simonwhitaker/github-fork-ribbon-css\\\">Fork me on ~GitHub</a></div>\\n</div>\\n<!-- TOP RIGHT RIBBON: END COPYING HERE -->\\n\\n<!-- TOP LEFT RIBBON: START COPYING HERE -->\\n<div class=\\\"github-fork-ribbon-wrapper left\\\"><div class=\\\"github-fork-ribbon\\\"><a href=\\\"https://github.com/simonwhitaker/github-fork-ribbon-css\\\">Fork me on ~GitHub</a></div>\\n</div>\\n<!-- TOP LEFT RIBBON: END COPYING HERE -->\\n\\n\\n<!-- BOTTOM RIGHT RIBBON: START COPYING HERE -->\\n<div class=\\\"github-fork-ribbon-wrapper right-bottom\\\"><div class=\\\"github-fork-ribbon\\\"><a href=\\\"https://github.com/simonwhitaker/github-fork-ribbon-css\\\">Fork me on ~GitHub</a></div>\\n</div>\\n<!-- BOTTOM RIGHT RIBBON: END COPYING HERE -->\\n\\n<!-- BOTTOM LEFT RIBBON: START COPYING HERE -->\\n<div class=\\\"github-fork-ribbon-wrapper left-bottom\\\"><div class=\\\"github-fork-ribbon\\\"><a href=\\\"https://github.com/simonwhitaker/github-fork-ribbon-css\\\">Fork me on ~GitHub</a></div>\\n</div>\\n<!-- BOTTOM LEFT RIBBON: END COPYING HERE -->\\n```\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/googleanalytics":{"title":"$:/plugins/tiddlywiki/googleanalytics","name":"Google Analytics","description":"Website visitor statistics from Google","contributor":"Sylvain Comte","list":"readme settings usage","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/googleanalytics/googleanalytics.js\": {\n \"title\": \"$:/plugins/tiddlywiki/googleanalytics/googleanalytics.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/googleanalytics/googleanalytics.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nRuns Google Analytics with the account number in the tiddler `$:/GoogleAnalyticsAccount` and the domain name in `$:/GoogleAnalyticsDomain`\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"google-analytics\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.synchronous = true;\\n\\nvar CONFIG_CONSENT_REQUIRED_TITLE = \\\"$:/config/cookie-consent-required\\\",\\n\\tCONSENT_TITLE = \\\"$:/state/consent-banner/accepted\\\"; // \\\"\\\": undeclared, \\\"yes\\\": accepted, \\\"no\\\": declined\\n\\nexports.startup = function() {\\n\\tvar hasInitialised = false,\\n\\t\\tinitialiseGoogleAnalytics = function() {\\n\\t\\t\\tconsole.log(\\\"Initialising Google Analytics\\\");\\n\\t\\t\\thasInitialised = true;\\n\\t\\t\\tvar gaAccount = $tw.wiki.getTiddlerText(\\\"$:/GoogleAnalyticsAccount\\\",\\\"\\\").replace(/\\\\n/g,\\\"\\\"),\\n\\t\\t\\t\\tgaDomain = $tw.wiki.getTiddlerText(\\\"$:/GoogleAnalyticsDomain\\\",\\\"auto\\\").replace(/\\\\n/g,\\\"\\\");\\n\\t\\t\\t// Using ga \\\"isogram\\\" function\\n\\t\\t\\t(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\\n\\t\\t\\t(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\\n\\t\\t\\tm=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\\n\\t\\t\\t})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\\n\\t\\t\\tga('create',gaAccount,gaDomain);\\n\\t\\t\\tga('send','pageview');\\n\\t\\t};\\n\\t// Initialise now if consent isn't required\\n\\tif($tw.wiki.getTiddlerText(CONFIG_CONSENT_REQUIRED_TITLE) !== \\\"yes\\\") {\\n\\t\\tinitialiseGoogleAnalytics();\\n\\t} else {\\n\\t\\t// Or has been granted already\\n\\t\\tif($tw.wiki.getTiddlerText(CONSENT_TITLE) === \\\"yes\\\") {\\n\\t\\t\\tinitialiseGoogleAnalytics();\\n\\t\\t} else {\\n\\t\\t\\t// Or when our config tiddler changes\\n\\t\\t\\t$tw.wiki.addEventListener(\\\"change\\\",function(changes) {\\n\\t\\t\\t\\tif(changes[CONSENT_TITLE]) {\\n\\t\\t\\t\\t\\tif(!hasInitialised && $tw.wiki.getTiddlerText(CONSENT_TITLE) === \\\"yes\\\") {\\n\\t\\t\\t\\t\\t\\tinitialiseGoogleAnalytics();\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n};\\n\\n\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/googleanalytics/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/googleanalytics/readme\",\n \"text\": \"This plugin enables you to use Google Analytics to track access to your online TiddlyWiki document. Based upon the [[official Google code|https://developers.google.com/analytics/devguides/collection/analyticsjs]].\\n\\nBy default, the user is not asked for permission before initialising Google Analytics. This plugin also optionally integrates with the \\\"Consent Banner\\\" plugin (also found in the official plugin library) so that Google Analytics is not initialised until the user grants explicit permission.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/googleanalytics]]\\n\"\n },\n \"$:/plugins/tiddlywiki/googleanalytics/settings\": {\n \"title\": \"$:/plugins/tiddlywiki/googleanalytics/settings\",\n \"text\": \"You have only two value to set, only first is mandatory:\\n\\n# ''[[Google Analytics Account|$:/GoogleAnalyticsAccount]]'': (mandatory) a code of the form `UA-XXXXXX-XX` where X are digits<br/><$edit-text tiddler=\\\"$:/GoogleAnalyticsAccount\\\" default=\\\"\\\" tag=\\\"input\\\"/>\\n\\n# ''[[Google Analytics Domain|$:/GoogleAnalyticsDomain]]'': (optional) the website URL where the TiddlyWiki file is published. Defaults to `auto` if not set.<br/><$edit-text tiddler=\\\"$:/GoogleAnalyticsDomain\\\" default=\\\"\\\" tag=\\\"input\\\"/>\\n\"\n },\n \"$:/plugins/tiddlywiki/googleanalytics/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/googleanalytics/usage\",\n \"text\": \"!! Create a Google Analytics account\\n\\nIf you don't already have an account:\\n\\n# Go to the Google Analytics website: http://www.google.com/analytics/\\n# Click the ''Access Google Analytics'' button and follow instructions to set up your account\\n# Enter the URL where the wiki is hosted\\n# Note the Tracking ID for this domain of the form `UA-XXXXXX-XX`\\n\\n!! Install the plugin on your local copy of the TiddlyWiki\\n\\n# ''Backup your TiddlyWiki''. Just in case\\n# Install the plugin via the plugin manager in control panel\\n# Save the TiddlyWiki andrefresh the page to load the plugin\\n# Go to [[$:/ControlPanel]] > Plugins tab and unfold the Google Analytics Plugin\\n# Go to the //settings// tab and edit the parameters\\n# Save the TiddlyWiki\\n\\n!! Upload the new version of your TiddlyWiki\\n\\n# Upload the saved TiddlyWiki to TiddlySpot, GitHub, GitLab or other web host\\n# Return to your Google Analytics page to check that your site is being tracked\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/hammerjs":{"title":"$:/plugins/tiddlywiki/hammerjs","name":"HammerJS","description":"HammerJS touch gesture library","author":"Jorik Tangelder (Eight Media)","list":"readme license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/hammerjs/hammer.js\": {\n \"text\": \"/*! Hammer.JS - v2.0.8 - 2016-04-23\\n * http://hammerjs.github.io/\\n *\\n * Copyright (c) 2016 Jorik Tangelder;\\n * Licensed under the MIT license */\\n!function(a,b,c,d){\\\"use strict\\\";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(b,c,d){var e=\\\"DEPRECATED METHOD: \\\"+c+\\\"\\\\n\\\"+d+\\\" AT \\\\n\\\";return function(){var c=new Error(\\\"get-stack-trace\\\"),d=c&&c.stack?c.stack.replace(/^[^\\\\(]+?[\\\\n$]/gm,\\\"\\\").replace(/^\\\\s+at\\\\s+/gm,\\\"\\\").replace(/^Object.<anonymous>\\\\s*\\\\(/gm,\\\"{anonymous}()@\\\"):\\\"Unknown Stack Trace\\\",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&la(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==oa?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\\\\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function s(a){return Array.prototype.slice.call(a,0)}function t(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];r(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ma.length;){if(c=ma[g],e=c?c+f:b,e in a)return e;g++}return d}function v(){return ua++}function w(b){var c=b.ownerDocument||b;return c.defaultView||c.parentWindow||a}function x(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){k(a.options.enable,[a])&&c.handler(b)},this.init()}function y(a){var b,c=a.options.inputClass;return new(b=c?c:xa?M:ya?P:wa?R:L)(a,z)}function z(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&Ea&&d-e===0,g=b&(Ga|Ha)&&d-e===0;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,A(a,c),a.emit(\\\"hammer.input\\\",c),a.recognize(c),a.session.prevInput=c}function A(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=D(b)),e>1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=ra(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=qa(j.x)>qa(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};b.eventType!==Ea&&f.eventType!==Ga||(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ha&&(i>Da||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=qa(l.x)>qa(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:pa(a.pointers[c].clientX),clientY:pa(a.pointers[c].clientY)},c++;return{timeStamp:ra(),pointers:b,center:E(b),deltaX:a.deltaX,deltaY:a.deltaY}}function E(a){var b=a.length;if(1===b)return{x:pa(a[0].clientX),y:pa(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:pa(c/b),y:pa(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ia:qa(a)>=qa(b)?0>a?Ja:Ka:0>b?La:Ma}function H(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Ra)+I(a[1],a[0],Ra)}function K(a,b){return H(b[0],b[1],Ra)/H(a[0],a[1],Ra)}function L(){this.evEl=Ta,this.evWin=Ua,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Xa,this.evWin=Ya,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=$a,this.evWin=_a,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ga|Ha)&&(c=t(c.concat(d),\\\"identifier\\\",!0)),[c,d]}function P(){this.evTarget=bb,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Ea|Fa)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Ea)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Ga|Ha)&&delete d[g[e].identifier],e++;return h.length?[t(f.concat(h),\\\"identifier\\\",!0),h]:void 0}function R(){x.apply(this,arguments);var a=j(this.handler,this);this.touch=new P(this.manager,a),this.mouse=new L(this.manager,a),this.primaryTouch=null,this.lastTouches=[]}function S(a,b){a&Ea?(this.primaryTouch=b.changedPointers[0].identifier,T.call(this,b)):a&(Ga|Ha)&&T.call(this,b)}function T(a){var b=a.changedPointers[0];if(b.identifier===this.primaryTouch){var c={x:b.clientX,y:b.clientY};this.lastTouches.push(c);var d=this.lastTouches,e=function(){var a=d.indexOf(c);a>-1&&d.splice(a,1)};setTimeout(e,cb)}}function U(a){for(var b=a.srcEvent.clientX,c=a.srcEvent.clientY,d=0;d<this.lastTouches.length;d++){var e=this.lastTouches[d],f=Math.abs(b-e.x),g=Math.abs(c-e.y);if(db>=f&&db>=g)return!0}return!1}function V(a,b){this.manager=a,this.set(b)}function W(a){if(p(a,jb))return jb;var b=p(a,kb),c=p(a,lb);return b&&c?jb:b||c?b?kb:lb:p(a,ib)?ib:hb}function X(){if(!fb)return!1;var b={},c=a.CSS&&a.CSS.supports;return[\\\"auto\\\",\\\"manipulation\\\",\\\"pan-y\\\",\\\"pan-x\\\",\\\"pan-x pan-y\\\",\\\"none\\\"].forEach(function(d){b[d]=c?a.CSS.supports(\\\"touch-action\\\",d):!0}),b}function Y(a){this.options=la({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=nb,this.simultaneous={},this.requireFail=[]}function Z(a){return a&sb?\\\"cancel\\\":a&qb?\\\"end\\\":a&pb?\\\"move\\\":a&ob?\\\"start\\\":\\\"\\\"}function $(a){return a==Ma?\\\"down\\\":a==La?\\\"up\\\":a==Ja?\\\"left\\\":a==Ka?\\\"right\\\":\\\"\\\"}function _(a,b){var c=b.manager;return c?c.get(a):a}function aa(){Y.apply(this,arguments)}function ba(){aa.apply(this,arguments),this.pX=null,this.pY=null}function ca(){aa.apply(this,arguments)}function da(){Y.apply(this,arguments),this._timer=null,this._input=null}function ea(){aa.apply(this,arguments)}function fa(){aa.apply(this,arguments)}function ga(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ha(a,b){return b=b||{},b.recognizers=l(b.recognizers,ha.defaults.preset),new ia(a,b)}function ia(a,b){this.options=la({},ha.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=a,this.input=y(this),this.touchAction=new V(this,this.options.touchAction),ja(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ja(a,b){var c=a.element;if(c.style){var d;g(a.options.cssProps,function(e,f){d=u(c.style,f),b?(a.oldCssProps[d]=c.style[d],c.style[d]=e):c.style[d]=a.oldCssProps[d]||\\\"\\\"}),b||(a.oldCssProps={})}}function ka(a,c){var d=b.createEvent(\\\"Event\\\");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var la,ma=[\\\"\\\",\\\"webkit\\\",\\\"Moz\\\",\\\"MS\\\",\\\"ms\\\",\\\"o\\\"],na=b.createElement(\\\"div\\\"),oa=\\\"function\\\",pa=Math.round,qa=Math.abs,ra=Date.now;la=\\\"function\\\"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError(\\\"Cannot convert undefined or null to object\\\");for(var b=Object(a),c=1;c<arguments.length;c++){var e=arguments[c];if(e!==d&&null!==e)for(var f in e)e.hasOwnProperty(f)&&(b[f]=e[f])}return b}:Object.assign;var sa=h(function(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a},\\\"extend\\\",\\\"Use `assign`.\\\"),ta=h(function(a,b){return sa(a,b,!0)},\\\"merge\\\",\\\"Use `assign`.\\\"),ua=1,va=/mobile|tablet|ip(ad|hone|od)|android/i,wa=\\\"ontouchstart\\\"in a,xa=u(a,\\\"PointerEvent\\\")!==d,ya=wa&&va.test(navigator.userAgent),za=\\\"touch\\\",Aa=\\\"pen\\\",Ba=\\\"mouse\\\",Ca=\\\"kinect\\\",Da=25,Ea=1,Fa=2,Ga=4,Ha=8,Ia=1,Ja=2,Ka=4,La=8,Ma=16,Na=Ja|Ka,Oa=La|Ma,Pa=Na|Oa,Qa=[\\\"x\\\",\\\"y\\\"],Ra=[\\\"clientX\\\",\\\"clientY\\\"];x.prototype={handler:function(){},init:function(){this.evEl&&m(this.element,this.evEl,this.domHandler),this.evTarget&&m(this.target,this.evTarget,this.domHandler),this.evWin&&m(w(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(w(this.element),this.evWin,this.domHandler)}};var Sa={mousedown:Ea,mousemove:Fa,mouseup:Ga},Ta=\\\"mousedown\\\",Ua=\\\"mousemove mouseup\\\";i(L,x,{handler:function(a){var b=Sa[a.type];b&Ea&&0===a.button&&(this.pressed=!0),b&Fa&&1!==a.which&&(b=Ga),this.pressed&&(b&Ga&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:Ba,srcEvent:a}))}});var Va={pointerdown:Ea,pointermove:Fa,pointerup:Ga,pointercancel:Ha,pointerout:Ha},Wa={2:za,3:Aa,4:Ba,5:Ca},Xa=\\\"pointerdown\\\",Ya=\\\"pointermove pointerup pointercancel\\\";a.MSPointerEvent&&!a.PointerEvent&&(Xa=\\\"MSPointerDown\\\",Ya=\\\"MSPointerMove MSPointerUp MSPointerCancel\\\"),i(M,x,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace(\\\"ms\\\",\\\"\\\"),e=Va[d],f=Wa[a.pointerType]||a.pointerType,g=f==za,h=r(b,a.pointerId,\\\"pointerId\\\");e&Ea&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Ga|Ha)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Za={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},$a=\\\"touchstart\\\",_a=\\\"touchstart touchmove touchend touchcancel\\\";i(N,x,{handler:function(a){var b=Za[a.type];if(b===Ea&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ga|Ha)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}}});var ab={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},bb=\\\"touchstart touchmove touchend touchcancel\\\";i(P,x,{handler:function(a){var b=ab[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}});var cb=2500,db=25;i(R,x,{handler:function(a,b,c){var d=c.pointerType==za,e=c.pointerType==Ba;if(!(e&&c.sourceCapabilities&&c.sourceCapabilities.firesTouchEvents)){if(d)S.call(this,b,c);else if(e&&U.call(this,c))return;this.callback(a,b,c)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var eb=u(na.style,\\\"touchAction\\\"),fb=eb!==d,gb=\\\"compute\\\",hb=\\\"auto\\\",ib=\\\"manipulation\\\",jb=\\\"none\\\",kb=\\\"pan-x\\\",lb=\\\"pan-y\\\",mb=X();V.prototype={set:function(a){a==gb&&(a=this.compute()),fb&&this.manager.element.style&&mb[a]&&(this.manager.element.style[eb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),W(a.join(\\\" \\\"))},preventDefaults:function(a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,jb)&&!mb[jb],f=p(d,lb)&&!mb[lb],g=p(d,kb)&&!mb[kb];if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}return g&&f?void 0:e||f&&c&Na||g&&c&Oa?this.preventSrc(b):void 0},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var nb=1,ob=2,pb=4,qb=8,rb=qb,sb=16,tb=32;Y.prototype={defaults:{},set:function(a){return la(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,\\\"recognizeWith\\\",this))return this;var b=this.simultaneous;return a=_(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,\\\"dropRecognizeWith\\\",this)?this:(a=_(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,\\\"requireFailure\\\",this))return this;var b=this.requireFail;return a=_(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,\\\"dropRequireFailure\\\",this))return this;a=_(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;qb>d&&b(c.options.event+Z(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=qb&&b(c.options.event+Z(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=tb)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(tb|nb)))return!1;a++}return!0},recognize:function(a){var b=la({},a);return k(this.options.enable,[this,b])?(this.state&(rb|sb|tb)&&(this.state=nb),this.state=this.process(b),void(this.state&(ob|pb|qb|sb)&&this.tryEmit(b))):(this.reset(),void(this.state=tb))},process:function(a){},getTouchAction:function(){},reset:function(){}},i(aa,Y,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(ob|pb),e=this.attrTest(a);return d&&(c&Ha||!e)?b|sb:d||e?c&Ga?b|qb:b&ob?b|pb:ob:tb}}),i(ba,aa,{defaults:{event:\\\"pan\\\",threshold:10,pointers:1,direction:Pa},getTouchAction:function(){var a=this.options.direction,b=[];return a&Na&&b.push(lb),a&Oa&&b.push(kb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Na?(e=0===f?Ia:0>f?Ja:Ka,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ia:0>g?La:Ma,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return aa.prototype.attrTest.call(this,a)&&(this.state&ob||!(this.state&ob)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i(ca,aa,{defaults:{event:\\\"pinch\\\",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&ob)},emit:function(a){if(1!==a.scale){var b=a.scale<1?\\\"in\\\":\\\"out\\\";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(da,Y,{defaults:{event:\\\"press\\\",pointers:1,time:251,threshold:9},getTouchAction:function(){return[hb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Ga|Ha)&&!f)this.reset();else if(a.eventType&Ea)this.reset(),this._timer=e(function(){this.state=rb,this.tryEmit()},b.time,this);else if(a.eventType&Ga)return rb;return tb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===rb&&(a&&a.eventType&Ga?this.manager.emit(this.options.event+\\\"up\\\",a):(this._input.timeStamp=ra(),this.manager.emit(this.options.event,this._input)))}}),i(ea,aa,{defaults:{event:\\\"rotate\\\",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&ob)}}),i(fa,aa,{defaults:{event:\\\"swipe\\\",threshold:10,velocity:.3,direction:Na|Oa,pointers:1},getTouchAction:function(){return ba.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Na|Oa)?b=a.overallVelocity:c&Na?b=a.overallVelocityX:c&Oa&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&qa(b)>this.options.velocity&&a.eventType&Ga},emit:function(a){var b=$(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ga,Y,{defaults:{event:\\\"tap\\\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ib]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&Ea&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Ga)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||H(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=rb,this.tryEmit()},b.interval,this),ob):rb}return tb},failTimeout:function(){return this._timer=e(function(){this.state=tb},this.options.interval,this),tb},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==rb&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),ha.VERSION=\\\"2.0.8\\\",ha.defaults={domEvents:!1,touchAction:gb,enable:!0,inputTarget:null,inputClass:null,preset:[[ea,{enable:!1}],[ca,{enable:!1},[\\\"rotate\\\"]],[fa,{direction:Na}],[ba,{direction:Na},[\\\"swipe\\\"]],[ga],[ga,{event:\\\"doubletap\\\",taps:2},[\\\"tap\\\"]],[da]],cssProps:{userSelect:\\\"none\\\",touchSelect:\\\"none\\\",touchCallout:\\\"none\\\",contentZooming:\\\"none\\\",userDrag:\\\"none\\\",tapHighlightColor:\\\"rgba(0,0,0,0)\\\"}};var ub=1,vb=2;ia.prototype={set:function(a){return la(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?vb:ub},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&rb)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===vb||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(ob|pb|qb)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof Y)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,\\\"add\\\",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,\\\"remove\\\",this))return this;if(a=this.get(a)){var b=this.recognizers,c=r(b,a);-1!==c&&(b.splice(c,1),this.touchAction.update())}return this},on:function(a,b){if(a!==d&&b!==d){var c=this.handlers;return g(q(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this}},off:function(a,b){if(a!==d){var c=this.handlers;return g(q(a),function(a){b?c[a]&&c[a].splice(r(c[a],b),1):delete c[a]}),this}},emit:function(a,b){this.options.domEvents&&ka(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},la(ha,{INPUT_START:Ea,INPUT_MOVE:Fa,INPUT_END:Ga,INPUT_CANCEL:Ha,STATE_POSSIBLE:nb,STATE_BEGAN:ob,STATE_CHANGED:pb,STATE_ENDED:qb,STATE_RECOGNIZED:rb,STATE_CANCELLED:sb,STATE_FAILED:tb,DIRECTION_NONE:Ia,DIRECTION_LEFT:Ja,DIRECTION_RIGHT:Ka,DIRECTION_UP:La,DIRECTION_DOWN:Ma,DIRECTION_HORIZONTAL:Na,DIRECTION_VERTICAL:Oa,DIRECTION_ALL:Pa,Manager:ia,Input:x,TouchAction:V,TouchInput:P,MouseInput:L,PointerEventInput:M,TouchMouseInput:R,SingleTouchInput:N,Recognizer:Y,AttrRecognizer:aa,Tap:ga,Pan:ba,Swipe:fa,Pinch:ca,Rotate:ea,Press:da,on:m,off:n,each:g,merge:ta,extend:sa,assign:la,inherit:i,bindFn:j,prefixed:u});var wb=\\\"undefined\\\"!=typeof a?a:\\\"undefined\\\"!=typeof self?self:{};wb.Hammer=ha,\\\"function\\\"==typeof define&&define.amd?define(function(){return ha}):\\\"undefined\\\"!=typeof module&&module.exports?module.exports=ha:a[c]=ha}(window,document,\\\"Hammer\\\");\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/hammerjs/hammer.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/hammerjs/license\": {\n \"text\": \"The MIT License (MIT)\\n\\nCopyright (C) 2011-2017 by Jorik Tangelder (Eight Media)\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\"Software\\\"), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is\\nfurnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in\\nall copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\\nTHE SOFTWARE.\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/hammerjs/license\"\n },\n \"$:/plugins/tiddlywiki/hammerjs/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/hammerjs/readme\",\n \"text\": \"This plugin packages [[HammerJS|https://hammerjs.github.io]] for use by other plugins. It does not provide any end-user visible features.\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/help":{"title":"$:/plugins/tiddlywiki/help","name":"Help","description":"Floating help panel","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/help/HelpPanel\": {\n \"title\": \"$:/plugins/tiddlywiki/help/HelpPanel\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"text\": \"<$reveal type=\\\"match\\\" state=\\\"$:/config/ShowHelp\\\" text=\\\"yes\\\">\\n<div class=\\\"tc-help-panel\\\">\\n<div class=\\\"tc-tiddler-controls\\\">\\n<$button set=\\\"$:/config/ShowHelp\\\" setTo=\\\"no\\\" class=\\\"tc-btn-invisible\\\">{{$:/core/images/close-button}}</$button> ''Help Panel''\\n</div>\\n<<tabs \\\"[all[shadows+tiddlers]tag[$:/tags/HelpPanel]!has[draft.of]]\\\" \\\"$:/plugins/tiddlywiki/help/HelpPanel/Support\\\" \\\"$:/state/tab/help\\\">>\\n</div>\\n</$reveal>\\n\\n\"\n },\n \"$:/config/Help/CurrentVideo\": {\n \"title\": \"$:/config/Help/CurrentVideo\",\n \"text\": \"$:/plugins/tiddlywiki/help/Videos/Introduction\"\n },\n \"$:/config/ShowHelp\": {\n \"title\": \"$:/config/ShowHelp\",\n \"text\": \"no\"\n },\n \"$:/plugins/help/Buttons/help\": {\n \"title\": \"$:/plugins/help/Buttons/help\",\n \"tags\": \"$:/tags/PageControls\",\n \"caption\": \"{{$:/core/images/help}} {{$:/language/Buttons/Help/Caption}}\",\n \"description\": \"{{$:/language/Buttons/Help/Hint}}\",\n \"text\": \"\\\\whitespace trim\\n\\\\define help-inner()\\n\\\\whitespace trim\\n<$list filter=\\\"[[$:/config/ShowHelp]get[text]] +[else[no]match[yes]]\\\" variable=\\\"ignore\\\">\\n<$button set=\\\"$:/config/ShowHelp\\\" setTo=\\\"no\\\" tooltip={{$:/language/Buttons/Help/Hint}} aria-label={{$:/language/Buttons/Help/Caption}} class=\\\"\\\"\\\"$(tv-config-toolbar-class)$ tc-selected\\\"\\\"\\\">\\n<$list filter=\\\"[<tv-config-toolbar-icons>match[yes]]\\\">\\n{{$:/core/images/help}}\\n</$list>\\n<$list filter=\\\"[<tv-config-toolbar-text>match[yes]]\\\">\\n<span class=\\\"tc-btn-text\\\"><$text text={{$:/language/Buttons/Help/Caption}}/></span>\\n</$list>\\n</$button>\\n</$list>\\n<$list filter=\\\"[[$:/config/ShowHelp]get[text]] +[else[no]!match[yes]]\\\" variable=\\\"ignore\\\">\\n<$button set=\\\"$:/config/ShowHelp\\\" setTo=\\\"yes\\\" tooltip={{$:/language/Buttons/Help/Hint}} aria-label={{$:/language/Buttons/Help/Caption}} class=<<tv-config-toolbar-class>>>\\n<$list filter=\\\"[<tv-config-toolbar-icons>match[yes]]\\\">\\n{{$:/core/images/help}}\\n</$list>\\n<$list filter=\\\"[<tv-config-toolbar-text>match[yes]]\\\">\\n<span class=\\\"tc-btn-text\\\"><$text text={{$:/language/Buttons/Help/Caption}}/></span>\\n</$list>\\n</$button>\\n</$list>\\n\\\\end\\n<<help-inner>>\\n\"\n },\n \"$:/plugins/tiddlywiki/help/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/help/readme\",\n \"text\": \"This plugin provides an overlay help panel at the bottom right of the window.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/help]]\\n\"\n },\n \"$:/plugins/tiddlywiki/help/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/help/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-help-panel {\\n\\tposition: fixed;\\n\\tbottom: 0;\\n\\tright: 0;\\n\\twidth: 310px;\\n\\theight: 400px;\\n\\toverflow: auto;\\n\\t-webkit-overflow-scrolling: touch;\\n\\t<<box-shadow \\\"0px 0px 5px rgba(0, 0, 0, 0.3)\\\">>\\n\\tborder: 1px solid <<colour tiddler-border>>;\\n\\tbackground: <<colour tiddler-background>>;\\n\\tpadding: 1em;\\n\\tmargin: 0.5em;\\n\\tz-index: 1000;\\n}\\n\\ndl.tc-help-cheatsheet {\\n\\toverflow: hidden;\\n}\\n\\ndl.tc-help-cheatsheet .red {\\n\\tcolor: red;\\n}\\n\\n.tc-help-cheatsheet > dt {\\n\\tdisplay: block;\\n\\tfloat: left;\\n\\tclear: left;\\n\\tmargin: 2% 1em 0 0;\\n\\tpadding;\\n\\tfont-weight: normal;\\n\\twidth: 45%;\\n}\\n\\n.tc-help-cheatsheet > dt > pre {\\n\\tmargin: 0;\\n}\\n\\n.tc-help-cheatsheet > dd {\\n\\tdisplay: block;\\n\\tfloat: left;\\n\\twidth: 45%;\\n\\tmargin: 1em 0 0 0;\\n\\tpadding: 0;\\n}\\n\\n.tc-help-cheatsheet > dd > p,\\n.tc-help-cheatsheet > dd > h1,\\n.tc-help-cheatsheet > dd > pre,\\n.tc-help-cheatsheet > dd > ul,\\n.tc-help-cheatsheet > dd > ol,\\n.tc-help-cheatsheet > dd > dl,\\n.tc-help-cheatsheet > dd > table,\\n.tc-help-cheatsheet > dd > blockquote,\\n.tc-help-cheatsheet > dd > blockquote >p {\\n\\tmargin: 0;\\n}\\n\\n.tc-help-cheatsheet .tc-image {\\n\\twidth: 16px;\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/help/HelpPanel/Support\": {\n \"title\": \"$:/plugins/tiddlywiki/help/HelpPanel/Support\",\n \"tags\": \"$:/tags/HelpPanel\",\n \"caption\": \"Support\",\n \"text\": \"~TiddlyWiki is an open source project with a vibrant community of users and developers. We're always happy to help new users get the most from ~TiddlyWiki.\\n\\nJoin the ~TiddlyWiki mailing list:\\n\\nhttp://groups.google.com/group/TiddlyWiki\\n\\nPost bug reports to the ~TiddlyWiki ~GitHub repository:\\n\\nhttps://github.com/Jermolene/TiddlyWiki5\\n\"\n },\n \"$:/plugins/tiddlywiki/help/HelpPanel/Videos\": {\n \"title\": \"$:/plugins/tiddlywiki/help/HelpPanel/Videos\",\n \"tags\": \"$:/tags/HelpPanel\",\n \"caption\": \"Videos\",\n \"text\": \"\\\\define show-video-inner(embed)\\n<iframe width=\\\"280\\\" height=\\\"157\\\" src=\\\"\\\"\\\"https://www.youtube.com/embed/$embed$?autoplay=0&showinfo=0&theme=light&rel=0&modestbranding=1&autohide=1\\\"\\\"\\\" frameborder=\\\"0\\\" allowfullscreen></iframe>\\n\\\\end\\n\\n\\\\define show-video(title)\\n<$macrocall $name=\\\"show-video-inner\\\" embed={{$title$!!embed}}/>\\n<p>{{$title$!!text}}</p>\\n\\\\end\\n\\n<div class=\\\"tc-help-panel-inner\\\">\\n\\nChoose video: <$select tiddler=\\\"$:/config/Help/CurrentVideo\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/HelpPanel/Videos]]\\\">\\n<option value=<<currentTiddler>>><$view field=\\\"caption\\\"/></option>\\n</$list>\\n</$select>\\n\\n<$macrocall $name=\\\"show-video\\\" title={{$:/config/Help/CurrentVideo}}>>\\n\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/help/Videos/FirefoxAndroid\": {\n \"title\": \"$:/plugins/tiddlywiki/help/Videos/FirefoxAndroid\",\n \"tags\": \"$:/tags/HelpPanel/Videos\",\n \"caption\": \"Firefox for Android\",\n \"embed\": \"iikkv9orGGI\",\n \"text\": \"How to get started with using TiddlyWiki as a standalone HTML file with the TiddlyFox add-on for Firefox for Android.\\n\"\n },\n \"$:/plugins/tiddlywiki/help/Videos/GettingStarted\": {\n \"title\": \"$:/plugins/tiddlywiki/help/Videos/GettingStarted\",\n \"tags\": \"$:/tags/HelpPanel/Videos\",\n \"caption\": \"GettingStarted\",\n \"embed\": \"1g66s7UbyuU\",\n \"text\": \"How to get started with using TiddlyWiki as a standalone HTML file.\\n\"\n },\n \"$:/plugins/tiddlywiki/help/Videos/Introduction\": {\n \"title\": \"$:/plugins/tiddlywiki/help/Videos/Introduction\",\n \"tags\": \"$:/tags/HelpPanel/Videos\",\n \"caption\": \"Introduction\",\n \"embed\": \"KtCUr83XgyE\",\n \"text\": \"An introduction to the concepts of TiddlyWiki.\\n\"\n },\n \"$:/plugins/tiddlywiki/help/Videos/TiddlyDesktop\": {\n \"title\": \"$:/plugins/tiddlywiki/help/Videos/TiddlyDesktop\",\n \"tags\": \"$:/tags/HelpPanel/Videos\",\n \"caption\": \"TiddlyDesktop\",\n \"embed\": \"i3Bggkm7paA\",\n \"text\": \"Using TiddlyDesktop, the custom desktop TiddlyWiki application for Windows, OS X and Linux.\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/highlight":{"title":"$:/plugins/tiddlywiki/highlight","name":"Highlight","description":"Highlight.js syntax highlighting","author":"Joao Bolila","list":"readme usage howto license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/HighlightPlugin/TypeMappings/application/javascript\": {\n \"title\": \"$:/config/HighlightPlugin/TypeMappings/application/javascript\",\n \"text\": \"javascript\"\n },\n \"$:/config/HighlightPlugin/TypeMappings/application/json\": {\n \"title\": \"$:/config/HighlightPlugin/TypeMappings/application/json\",\n \"text\": \"json\"\n },\n \"$:/config/HighlightPlugin/TypeMappings/text/css\": {\n \"title\": \"$:/config/HighlightPlugin/TypeMappings/text/css\",\n \"text\": \"css\"\n },\n \"$:/config/HighlightPlugin/TypeMappings/text/html\": {\n \"title\": \"$:/config/HighlightPlugin/TypeMappings/text/html\",\n \"text\": \"html\"\n },\n \"$:/config/HighlightPlugin/TypeMappings/image/svg+xml\": {\n \"title\": \"$:/config/HighlightPlugin/TypeMappings/image/svg+xml\",\n \"text\": \"xml\"\n },\n \"$:/config/HighlightPlugin/TypeMappings/text/x-markdown\": {\n \"title\": \"$:/config/HighlightPlugin/TypeMappings/text/x-markdown\",\n \"text\": \"markdown\"\n },\n \"$:/plugins/tiddlywiki/highlight/highlight.js\": {\n \"text\": \"var hljs = require(\\\"$:/plugins/tiddlywiki/highlight/highlight.js\\\");\\n/*! highlight.js v9.18.1 | BSD3 License | git.io/hljslicense */\\n!function(e){var n=\\\"object\\\"==typeof window&&window||\\\"object\\\"==typeof self&&self;\\\"undefined\\\"==typeof exports||exports.nodeType?n&&(n.hljs=e({}),\\\"function\\\"==typeof define&&define.amd&&define([],function(){return n.hljs})):e(exports)}(function(a){var f=[],i=Object.keys,_={},c={},C=!0,n=/^(no-?highlight|plain|text)$/i,l=/\\\\blang(?:uage)?-([\\\\w-]+)\\\\b/i,t=/((^(<[^>]+>|\\\\t|)+|(?:\\\\n)))/gm,r={case_insensitive:\\\"cI\\\",lexemes:\\\"l\\\",contains:\\\"c\\\",keywords:\\\"k\\\",subLanguage:\\\"sL\\\",className:\\\"cN\\\",begin:\\\"b\\\",beginKeywords:\\\"bK\\\",end:\\\"e\\\",endsWithParent:\\\"eW\\\",illegal:\\\"i\\\",excludeBegin:\\\"eB\\\",excludeEnd:\\\"eE\\\",returnBegin:\\\"rB\\\",returnEnd:\\\"rE\\\",variants:\\\"v\\\",IDENT_RE:\\\"IR\\\",UNDERSCORE_IDENT_RE:\\\"UIR\\\",NUMBER_RE:\\\"NR\\\",C_NUMBER_RE:\\\"CNR\\\",BINARY_NUMBER_RE:\\\"BNR\\\",RE_STARTERS_RE:\\\"RSR\\\",BACKSLASH_ESCAPE:\\\"BE\\\",APOS_STRING_MODE:\\\"ASM\\\",QUOTE_STRING_MODE:\\\"QSM\\\",PHRASAL_WORDS_MODE:\\\"PWM\\\",C_LINE_COMMENT_MODE:\\\"CLCM\\\",C_BLOCK_COMMENT_MODE:\\\"CBCM\\\",HASH_COMMENT_MODE:\\\"HCM\\\",NUMBER_MODE:\\\"NM\\\",C_NUMBER_MODE:\\\"CNM\\\",BINARY_NUMBER_MODE:\\\"BNM\\\",CSS_NUMBER_MODE:\\\"CSSNM\\\",REGEXP_MODE:\\\"RM\\\",TITLE_MODE:\\\"TM\\\",UNDERSCORE_TITLE_MODE:\\\"UTM\\\",COMMENT:\\\"C\\\",beginRe:\\\"bR\\\",endRe:\\\"eR\\\",illegalRe:\\\"iR\\\",lexemesRe:\\\"lR\\\",terminators:\\\"t\\\",terminator_end:\\\"tE\\\"},m=\\\"</span>\\\",O=\\\"Could not find the language '{}', did you forget to load/include a language module?\\\",B={classPrefix:\\\"hljs-\\\",tabReplace:null,useBR:!1,languages:void 0},o=\\\"of and for in not or if then\\\".split(\\\" \\\");function x(e){return e.replace(/&/g,\\\"&\\\").replace(/</g,\\\"<\\\").replace(/>/g,\\\">\\\")}function g(e){return e.nodeName.toLowerCase()}function u(e){return n.test(e)}function s(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function E(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:\\\"start\\\",offset:t,node:r}),t=e(r,t),g(r).match(/br|hr|img|input/)||a.push({event:\\\"stop\\\",offset:t,node:r}));return t}(e,0),a}function d(e,n,t){var r=0,a=\\\"\\\",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:\\\"start\\\"===n[0].event?e:n:e.length?e:n}function c(e){a+=\\\"<\\\"+g(e)+f.map.call(e.attributes,function(e){return\\\" \\\"+e.nodeName+'=\\\"'+x(e.value).replace(/\\\"/g,\\\""\\\")+'\\\"'}).join(\\\"\\\")+\\\">\\\"}function l(e){a+=\\\"</\\\"+g(e)+\\\">\\\"}function u(e){(\\\"start\\\"===e.event?c:l)(e.node)}for(;e.length||n.length;){var s=o();if(a+=x(t.substring(r,s[0].offset)),r=s[0].offset,s===e){for(i.reverse().forEach(l);u(s.splice(0,1)[0]),(s=o())===e&&s.length&&s[0].offset===r;);i.reverse().forEach(c)}else\\\"start\\\"===s[0].event?i.push(s[0].node):i.pop(),u(s.splice(0,1)[0])}return a+x(t.substr(r))}function R(n){return n.v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return s(n,{v:null},e)})),n.cached_variants?n.cached_variants:function e(n){return!!n&&(n.eW||e(n.starts))}(n)?[s(n,{starts:n.starts?s(n.starts):null})]:Object.isFrozen(n)?[s(n)]:[n]}function p(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(p)}}function v(n,r){var a={};return\\\"string\\\"==typeof n?t(\\\"keyword\\\",n):i(n).forEach(function(e){t(e,n[e])}),a;function t(t,e){r&&(e=e.toLowerCase()),e.split(\\\" \\\").forEach(function(e){var n=e.split(\\\"|\\\");a[n[0]]=[t,function(e,n){return n?Number(n):function(e){return-1!=o.indexOf(e.toLowerCase())}(e)?0:1}(n[0],n[1])]})}}function S(r){function s(e){return e&&e.source||e}function f(e,n){return new RegExp(s(e),\\\"m\\\"+(r.cI?\\\"i\\\":\\\"\\\")+(n?\\\"g\\\":\\\"\\\"))}function a(a){var i,e,o={},c=[],l={},t=1;function n(e,n){o[t]=e,c.push([e,n]),t+=function(e){return new RegExp(e.toString()+\\\"|\\\").exec(\\\"\\\").length-1}(n)+1}for(var r=0;r<a.c.length;r++){n(e=a.c[r],e.bK?\\\"\\\\\\\\.?(?:\\\"+e.b+\\\")\\\\\\\\.?\\\":e.b)}a.tE&&n(\\\"end\\\",a.tE),a.i&&n(\\\"illegal\\\",a.i);var u=c.map(function(e){return e[1]});return i=f(function(e,n){for(var t=/\\\\[(?:[^\\\\\\\\\\\\]]|\\\\\\\\.)*\\\\]|\\\\(\\\\??|\\\\\\\\([1-9][0-9]*)|\\\\\\\\./,r=0,a=\\\"\\\",i=0;i<e.length;i++){var o=r+=1,c=s(e[i]);for(0<i&&(a+=n),a+=\\\"(\\\";0<c.length;){var l=t.exec(c);if(null==l){a+=c;break}a+=c.substring(0,l.index),c=c.substring(l.index+l[0].length),\\\"\\\\\\\\\\\"==l[0][0]&&l[1]?a+=\\\"\\\\\\\\\\\"+String(Number(l[1])+o):(a+=l[0],\\\"(\\\"==l[0]&&r++)}a+=\\\")\\\"}return a}(u,\\\"|\\\"),!0),l.lastIndex=0,l.exec=function(e){var n;if(0===c.length)return null;i.lastIndex=l.lastIndex;var t=i.exec(e);if(!t)return null;for(var r=0;r<t.length;r++)if(null!=t[r]&&null!=o[\\\"\\\"+r]){n=o[\\\"\\\"+r];break}return\\\"string\\\"==typeof n?(t.type=n,t.extra=[a.i,a.tE]):(t.type=\\\"begin\\\",t.rule=n),t},l}if(r.c&&-1!=r.c.indexOf(\\\"self\\\")){if(!C)throw new Error(\\\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\\\");r.c=r.c.filter(function(e){return\\\"self\\\"!=e})}!function n(t,e){t.compiled||(t.compiled=!0,t.k=t.k||t.bK,t.k&&(t.k=v(t.k,r.cI)),t.lR=f(t.l||/\\\\w+/,!0),e&&(t.bK&&(t.b=\\\"\\\\\\\\b(\\\"+t.bK.split(\\\" \\\").join(\\\"|\\\")+\\\")\\\\\\\\b\\\"),t.b||(t.b=/\\\\B|\\\\b/),t.bR=f(t.b),t.endSameAsBegin&&(t.e=t.b),t.e||t.eW||(t.e=/\\\\B|\\\\b/),t.e&&(t.eR=f(t.e)),t.tE=s(t.e)||\\\"\\\",t.eW&&e.tE&&(t.tE+=(t.e?\\\"|\\\":\\\"\\\")+e.tE)),t.i&&(t.iR=f(t.i)),null==t.relevance&&(t.relevance=1),t.c||(t.c=[]),t.c=Array.prototype.concat.apply([],t.c.map(function(e){return R(\\\"self\\\"===e?t:e)})),t.c.forEach(function(e){n(e,t)}),t.starts&&n(t.starts,e),t.t=a(t))}(r)}function T(n,e,a,t){var i=e;function o(e,n){if(function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}if(e.eW)return o(e.parent,n)}function c(e,n,t,r){if(!t&&\\\"\\\"===n)return\\\"\\\";if(!e)return n;var a='<span class=\\\"'+(r?\\\"\\\":B.classPrefix);return(a+=e+'\\\">')+n+(t?\\\"\\\":m)}function l(){p+=null!=d.sL?function(){var e=\\\"string\\\"==typeof d.sL;if(e&&!_[d.sL])return x(v);var n=e?T(d.sL,v,!0,R[d.sL]):w(v,d.sL.length?d.sL:void 0);return 0<d.relevance&&(M+=n.relevance),e&&(R[d.sL]=n.top),c(n.language,n.value,!1,!0)}():function(){var e,n,t,r,a,i,o;if(!d.k)return x(v);for(r=\\\"\\\",n=0,d.lR.lastIndex=0,t=d.lR.exec(v);t;)r+=x(v.substring(n,t.index)),a=d,i=t,void 0,o=g.cI?i[0].toLowerCase():i[0],(e=a.k.hasOwnProperty(o)&&a.k[o])?(M+=e[1],r+=c(e[0],x(t[0]))):r+=x(t[0]),n=d.lR.lastIndex,t=d.lR.exec(v);return r+x(v.substr(n))}(),v=\\\"\\\"}function u(e){p+=e.cN?c(e.cN,\\\"\\\",!0):\\\"\\\",d=Object.create(e,{parent:{value:d}})}function s(e){var n=e[0],t=e.rule;return t&&t.endSameAsBegin&&(t.eR=function(e){return new RegExp(e.replace(/[-\\\\/\\\\\\\\^$*+?.()|[\\\\]{}]/g,\\\"\\\\\\\\$&\\\"),\\\"m\\\")}(n)),t.skip?v+=n:(t.eB&&(v+=n),l(),t.rB||t.eB||(v=n)),u(t),t.rB?0:n.length}var f={};function r(e,n){var t=n&&n[0];if(v+=e,null==t)return l(),0;if(\\\"begin\\\"==f.type&&\\\"end\\\"==n.type&&f.index==n.index&&\\\"\\\"===t)return v+=i.slice(n.index,n.index+1),1;if(\\\"begin\\\"===(f=n).type)return s(n);if(\\\"illegal\\\"===n.type&&!a)throw new Error('Illegal lexeme \\\"'+t+'\\\" for mode \\\"'+(d.cN||\\\"<unnamed>\\\")+'\\\"');if(\\\"end\\\"===n.type){var r=function(e){var n=e[0],t=i.substr(e.index),r=o(d,t);if(r){var a=d;for(a.skip?v+=n:(a.rE||a.eE||(v+=n),l(),a.eE&&(v=n));d.cN&&(p+=m),d.skip||d.sL||(M+=d.relevance),(d=d.parent)!==r.parent;);return r.starts&&(r.endSameAsBegin&&(r.starts.eR=r.eR),u(r.starts)),a.rE?0:n.length}}(n);if(null!=r)return r}return v+=t,t.length}var g=D(n);if(!g)throw console.error(O.replace(\\\"{}\\\",n)),new Error('Unknown language: \\\"'+n+'\\\"');S(g);var E,d=t||g,R={},p=\\\"\\\";for(E=d;E!==g;E=E.parent)E.cN&&(p=c(E.cN,\\\"\\\",!0)+p);var v=\\\"\\\",M=0;try{for(var b,h,N=0;d.t.lastIndex=N,b=d.t.exec(i);)h=r(i.substring(N,b.index),b),N=b.index+h;for(r(i.substr(N)),E=d;E.parent;E=E.parent)E.cN&&(p+=m);return{relevance:M,value:p,i:!1,language:n,top:d}}catch(e){if(e.message&&-1!==e.message.indexOf(\\\"Illegal\\\"))return{i:!0,relevance:0,value:x(i)};if(C)return{relevance:0,value:x(i),language:n,top:d,errorRaised:e};throw e}}function w(t,e){e=e||B.languages||i(_);var r={relevance:0,value:x(t)},a=r;return e.filter(D).filter(L).forEach(function(e){var n=T(e,t,!1);n.language=e,n.relevance>a.relevance&&(a=n),n.relevance>r.relevance&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function M(e){return B.tabReplace||B.useBR?e.replace(t,function(e,n){return B.useBR&&\\\"\\\\n\\\"===e?\\\"<br>\\\":B.tabReplace?n.replace(/\\\\t/g,B.tabReplace):\\\"\\\"}):e}function b(e){var n,t,r,a,i,o=function(e){var n,t,r,a,i=e.className+\\\" \\\";if(i+=e.parentNode?e.parentNode.className:\\\"\\\",t=l.exec(i)){var o=D(t[1]);return o||(console.warn(O.replace(\\\"{}\\\",t[1])),console.warn(\\\"Falling back to no-highlight mode for this block.\\\",e)),o?t[1]:\\\"no-highlight\\\"}for(n=0,r=(i=i.split(/\\\\s+/)).length;n<r;n++)if(u(a=i[n])||D(a))return a}(e);u(o)||(B.useBR?(n=document.createElement(\\\"div\\\")).innerHTML=e.innerHTML.replace(/\\\\n/g,\\\"\\\").replace(/<br[ \\\\/]*>/g,\\\"\\\\n\\\"):n=e,i=n.textContent,r=o?T(o,i,!0):w(i),(t=E(n)).length&&((a=document.createElement(\\\"div\\\")).innerHTML=r.value,r.value=d(t,E(a),i)),r.value=M(r.value),e.innerHTML=r.value,e.className=function(e,n,t){var r=n?c[n]:t,a=[e.trim()];return e.match(/\\\\bhljs\\\\b/)||a.push(\\\"hljs\\\"),-1===e.indexOf(r)&&a.push(r),a.join(\\\" \\\").trim()}(e.className,o,r.language),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll(\\\"pre code\\\");f.forEach.call(e,b)}}var N={disableAutodetect:!0};function D(e){return e=(e||\\\"\\\").toLowerCase(),_[e]||_[c[e]]}function L(e){var n=D(e);return n&&!n.disableAutodetect}return a.highlight=T,a.highlightAuto=w,a.fixMarkup=M,a.highlightBlock=b,a.configure=function(e){B=s(B,e)},a.initHighlighting=h,a.initHighlightingOnLoad=function(){window.addEventListener(\\\"DOMContentLoaded\\\",h,!1),window.addEventListener(\\\"load\\\",h,!1)},a.registerLanguage=function(n,e){var t;try{t=e(a)}catch(e){if(console.error(\\\"Language definition for '{}' could not be registered.\\\".replace(\\\"{}\\\",n)),!C)throw e;console.error(e),t=N}p(_[n]=t),t.rawDefinition=e.bind(null,a),t.aliases&&t.aliases.forEach(function(e){c[e]=n})},a.listLanguages=function(){return i(_)},a.getLanguage=D,a.requireLanguage=function(e){var n=D(e);if(n)return n;throw new Error(\\\"The '{}' language is required, but not loaded.\\\".replace(\\\"{}\\\",e))},a.autoDetection=L,a.inherit=s,a.debugMode=function(){C=!1},a.IR=a.IDENT_RE=\\\"[a-zA-Z]\\\\\\\\w*\\\",a.UIR=a.UNDERSCORE_IDENT_RE=\\\"[a-zA-Z_]\\\\\\\\w*\\\",a.NR=a.NUMBER_RE=\\\"\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?\\\",a.CNR=a.C_NUMBER_RE=\\\"(-?)(\\\\\\\\b0[xX][a-fA-F0-9]+|(\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)([eE][-+]?\\\\\\\\d+)?)\\\",a.BNR=a.BINARY_NUMBER_RE=\\\"\\\\\\\\b(0b[01]+)\\\",a.RSR=a.RE_STARTERS_RE=\\\"!|!=|!==|%|%=|&|&&|&=|\\\\\\\\*|\\\\\\\\*=|\\\\\\\\+|\\\\\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\\\\\?|\\\\\\\\[|\\\\\\\\{|\\\\\\\\(|\\\\\\\\^|\\\\\\\\^=|\\\\\\\\||\\\\\\\\|=|\\\\\\\\|\\\\\\\\||~\\\",a.BE=a.BACKSLASH_ESCAPE={b:\\\"\\\\\\\\\\\\\\\\[\\\\\\\\s\\\\\\\\S]\\\",relevance:0},a.ASM=a.APOS_STRING_MODE={cN:\\\"string\\\",b:\\\"'\\\",e:\\\"'\\\",i:\\\"\\\\\\\\n\\\",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:\\\"string\\\",b:'\\\"',e:'\\\"',i:\\\"\\\\\\\\n\\\",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\\\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\\\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:\\\"comment\\\",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:\\\"doctag\\\",b:\\\"(?:TODO|FIXME|NOTE|BUG|XXX):\\\",relevance:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C(\\\"//\\\",\\\"$\\\"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C(\\\"/\\\\\\\\*\\\",\\\"\\\\\\\\*/\\\"),a.HCM=a.HASH_COMMENT_MODE=a.C(\\\"#\\\",\\\"$\\\"),a.NM=a.NUMBER_MODE={cN:\\\"number\\\",b:a.NR,relevance:0},a.CNM=a.C_NUMBER_MODE={cN:\\\"number\\\",b:a.CNR,relevance:0},a.BNM=a.BINARY_NUMBER_MODE={cN:\\\"number\\\",b:a.BNR,relevance:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:\\\"number\\\",b:a.NR+\\\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\\\",relevance:0},a.RM=a.REGEXP_MODE={cN:\\\"regexp\\\",b:/\\\\//,e:/\\\\/[gimuy]*/,i:/\\\\n/,c:[a.BE,{b:/\\\\[/,e:/\\\\]/,relevance:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:\\\"title\\\",b:a.IR,relevance:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:\\\"title\\\",b:a.UIR,relevance:0},a.METHOD_GUARD={b:\\\"\\\\\\\\.\\\\\\\\s*\\\"+a.UIR,relevance:0},[a.BE,a.ASM,a.QSM,a.PWM,a.C,a.CLCM,a.CBCM,a.HCM,a.NM,a.CNM,a.BNM,a.CSSNM,a.RM,a.TM,a.UTM,a.METHOD_GUARD].forEach(function(e){!function n(t){Object.freeze(t);var r=\\\"function\\\"==typeof t;Object.getOwnPropertyNames(t).forEach(function(e){!t.hasOwnProperty(e)||null===t[e]||\\\"object\\\"!=typeof t[e]&&\\\"function\\\"!=typeof t[e]||r&&(\\\"caller\\\"===e||\\\"callee\\\"===e||\\\"arguments\\\"===e)||Object.isFrozen(t[e])||n(t[e])});return t}(e)}),a});hljs.registerLanguage(\\\"swift\\\",function(e){var i={keyword:\\\"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet\\\",literal:\\\"true false nil\\\",built_in:\\\"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip\\\"},t=e.C(\\\"/\\\\\\\\*\\\",\\\"\\\\\\\\*/\\\",{c:[\\\"self\\\"]}),n={cN:\\\"subst\\\",b:/\\\\\\\\\\\\(/,e:\\\"\\\\\\\\)\\\",k:i,c:[]},r={cN:\\\"string\\\",c:[e.BE,n],v:[{b:/\\\"\\\"\\\"/,e:/\\\"\\\"\\\"/},{b:/\\\"/,e:/\\\"/}]},a={cN:\\\"number\\\",b:\\\"\\\\\\\\b([\\\\\\\\d_]+(\\\\\\\\.[\\\\\\\\deE_]+)?|0x[a-fA-F0-9_]+(\\\\\\\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\\\\\\\b\\\",relevance:0};return n.c=[a],{k:i,c:[r,e.CLCM,t,{cN:\\\"type\\\",b:\\\"\\\\\\\\b[A-Z][\\\\\\\\wÀ-ʸ']*[!?]\\\"},{cN:\\\"type\\\",b:\\\"\\\\\\\\b[A-Z][\\\\\\\\wÀ-ʸ']*\\\",relevance:0},a,{cN:\\\"function\\\",bK:\\\"func\\\",e:\\\"{\\\",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b:/</,e:/>/},{cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,endsParent:!0,k:i,c:[\\\"self\\\",a,r,e.CBCM,{b:\\\":\\\"}],i:/[\\\"']/}],i:/\\\\[|%/},{cN:\\\"class\\\",bK:\\\"struct protocol class extension enum\\\",k:i,e:\\\"\\\\\\\\{\\\",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\\\\u00C0-\\\\u02B80-9A-Za-z$_]*/})]},{cN:\\\"meta\\\",b:\\\"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\\"},{bK:\\\"import\\\",e:/$/,c:[e.CLCM,t]}]}});hljs.registerLanguage(\\\"less\\\",function(e){function r(e){return{cN:\\\"string\\\",b:\\\"~?\\\"+e+\\\".*?\\\"+e}}function t(e,r,t){return{cN:e,b:r,relevance:t}}var a=\\\"[\\\\\\\\w-]+\\\",c=\\\"(\\\"+a+\\\"|@{\\\"+a+\\\"})\\\",s=[],n=[],b={b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",c:n,relevance:0};n.push(e.CLCM,e.CBCM,r(\\\"'\\\"),r('\\\"'),e.CSSNM,{b:\\\"(url|data-uri)\\\\\\\\(\\\",starts:{cN:\\\"string\\\",e:\\\"[\\\\\\\\)\\\\\\\\n]\\\",eE:!0}},t(\\\"number\\\",\\\"#[0-9A-Fa-f]+\\\\\\\\b\\\"),b,t(\\\"variable\\\",\\\"@@?\\\"+a,10),t(\\\"variable\\\",\\\"@{\\\"+a+\\\"}\\\"),t(\\\"built_in\\\",\\\"~?`[^`]*?`\\\"),{cN:\\\"attribute\\\",b:a+\\\"\\\\\\\\s*:\\\",e:\\\":\\\",rB:!0,eE:!0},{cN:\\\"meta\\\",b:\\\"!important\\\"});var i=n.concat({b:\\\"{\\\",e:\\\"}\\\",c:s}),l={bK:\\\"when\\\",eW:!0,c:[{bK:\\\"and not\\\"}].concat(n)},o={b:c+\\\"\\\\\\\\s*:\\\",rB:!0,e:\\\"[;}]\\\",relevance:0,c:[{cN:\\\"attribute\\\",b:c,e:\\\":\\\",eE:!0,starts:{eW:!0,i:\\\"[<=$]\\\",relevance:0,c:n}}]},u={cN:\\\"keyword\\\",b:\\\"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\\\\\b\\\",starts:{e:\\\"[;{}]\\\",rE:!0,c:n,relevance:0}},v={cN:\\\"variable\\\",v:[{b:\\\"@\\\"+a+\\\"\\\\\\\\s*:\\\",relevance:15},{b:\\\"@\\\"+a}],starts:{e:\\\"[;}]\\\",rE:!0,c:i}},C={v:[{b:\\\"[\\\\\\\\.#:&\\\\\\\\[>]\\\",e:\\\"[;{}]\\\"},{b:c,e:\\\"{\\\"}],rB:!0,rE:!0,i:\\\"[<='$\\\\\\\"]\\\",relevance:0,c:[e.CLCM,e.CBCM,l,t(\\\"keyword\\\",\\\"all\\\\\\\\b\\\"),t(\\\"variable\\\",\\\"@{\\\"+a+\\\"}\\\"),t(\\\"selector-tag\\\",c+\\\"%?\\\",0),t(\\\"selector-id\\\",\\\"#\\\"+c),t(\\\"selector-class\\\",\\\"\\\\\\\\.\\\"+c,0),t(\\\"selector-tag\\\",\\\"&\\\",0),{cN:\\\"selector-attr\\\",b:\\\"\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\"},{cN:\\\"selector-pseudo\\\",b:/:(:)?[a-zA-Z0-9\\\\_\\\\-\\\\+\\\\(\\\\)\\\"'.]+/},{b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",c:i},{b:\\\"!important\\\"}]};return s.push(e.CLCM,e.CBCM,u,v,o,C),{cI:!0,i:\\\"[=>'/<($\\\\\\\"]\\\",c:s}});hljs.registerLanguage(\\\"armasm\\\",function(s){return{cI:!0,aliases:[\\\"arm\\\"],l:\\\"\\\\\\\\.?\\\"+s.IR,k:{meta:\\\".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND \\\",built_in:\\\"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @\\\"},c:[{cN:\\\"keyword\\\",b:\\\"\\\\\\\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?\\\",e:\\\"\\\\\\\\s\\\"},s.C(\\\"[;@]\\\",\\\"$\\\",{relevance:0}),s.CBCM,s.QSM,{cN:\\\"string\\\",b:\\\"'\\\",e:\\\"[^\\\\\\\\\\\\\\\\]'\\\",relevance:0},{cN:\\\"title\\\",b:\\\"\\\\\\\\|\\\",e:\\\"\\\\\\\\|\\\",i:\\\"\\\\\\\\n\\\",relevance:0},{cN:\\\"number\\\",v:[{b:\\\"[#$=]?0x[0-9a-f]+\\\"},{b:\\\"[#$=]?0b[01]+\\\"},{b:\\\"[#$=]\\\\\\\\d+\\\"},{b:\\\"\\\\\\\\b\\\\\\\\d+\\\"}],relevance:0},{cN:\\\"symbol\\\",v:[{b:\\\"^[a-z_\\\\\\\\.\\\\\\\\$][a-z0-9_\\\\\\\\.\\\\\\\\$]+\\\"},{b:\\\"^\\\\\\\\s*[a-z_\\\\\\\\.\\\\\\\\$][a-z0-9_\\\\\\\\.\\\\\\\\$]+:\\\"},{b:\\\"[=#]\\\\\\\\w+\\\"}],relevance:0}]}});hljs.registerLanguage(\\\"ruby\\\",function(e){var c=\\\"[a-zA-Z_]\\\\\\\\w*[!?=]?|[-+~]\\\\\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\\\\\*\\\\\\\\*|[-/+%^&*~`|]|\\\\\\\\[\\\\\\\\]=?\\\",b={keyword:\\\"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\\\",literal:\\\"true false nil\\\"},r={cN:\\\"doctag\\\",b:\\\"@[A-Za-z]+\\\"},a={b:\\\"#<\\\",e:\\\">\\\"},n=[e.C(\\\"#\\\",\\\"$\\\",{c:[r]}),e.C(\\\"^\\\\\\\\=begin\\\",\\\"^\\\\\\\\=end\\\",{c:[r],relevance:10}),e.C(\\\"^__END__\\\",\\\"\\\\\\\\n$\\\")],s={cN:\\\"subst\\\",b:\\\"#\\\\\\\\{\\\",e:\\\"}\\\",k:b},t={cN:\\\"string\\\",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/\\\"/,e:/\\\"/},{b:/`/,e:/`/},{b:\\\"%[qQwWx]?\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\"},{b:\\\"%[qQwWx]?\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\"},{b:\\\"%[qQwWx]?{\\\",e:\\\"}\\\"},{b:\\\"%[qQwWx]?<\\\",e:\\\">\\\"},{b:\\\"%[qQwWx]?/\\\",e:\\\"/\\\"},{b:\\\"%[qQwWx]?%\\\",e:\\\"%\\\"},{b:\\\"%[qQwWx]?-\\\",e:\\\"-\\\"},{b:\\\"%[qQwWx]?\\\\\\\\|\\\",e:\\\"\\\\\\\\|\\\"},{b:/\\\\B\\\\?(\\\\\\\\\\\\d{1,3}|\\\\\\\\x[A-Fa-f0-9]{1,2}|\\\\\\\\u[A-Fa-f0-9]{4}|\\\\\\\\?\\\\S)\\\\b/},{b:/<<[-~]?'?(\\\\w+)(?:.|\\\\n)*?\\\\n\\\\s*\\\\1\\\\b/,rB:!0,c:[{b:/<<[-~]?'?/},{b:/\\\\w+/,endSameAsBegin:!0,c:[e.BE,s]}]}]},i={cN:\\\"params\\\",b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",endsParent:!0,k:b},l=[t,a,{cN:\\\"class\\\",bK:\\\"class module\\\",e:\\\"$|;\\\",i:/=/,c:[e.inherit(e.TM,{b:\\\"[A-Za-z_]\\\\\\\\w*(::\\\\\\\\w+)*(\\\\\\\\?|\\\\\\\\!)?\\\"}),{b:\\\"<\\\\\\\\s*\\\",c:[{b:\\\"(\\\"+e.IR+\\\"::)?\\\"+e.IR}]}].concat(n)},{cN:\\\"function\\\",bK:\\\"def\\\",e:\\\"$|;\\\",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{b:e.IR+\\\"::\\\"},{cN:\\\"symbol\\\",b:e.UIR+\\\"(\\\\\\\\!|\\\\\\\\?)?:\\\",relevance:0},{cN:\\\"symbol\\\",b:\\\":(?!\\\\\\\\s)\\\",c:[t,{b:c}],relevance:0},{cN:\\\"number\\\",b:\\\"(\\\\\\\\b0[0-7_]+)|(\\\\\\\\b0x[0-9a-fA-F_]+)|(\\\\\\\\b[1-9][0-9_]*(\\\\\\\\.[0-9_]+)?)|[0_]\\\\\\\\b\\\",relevance:0},{b:\\\"(\\\\\\\\$\\\\\\\\W)|((\\\\\\\\$|\\\\\\\\@\\\\\\\\@?)(\\\\\\\\w+))\\\"},{cN:\\\"params\\\",b:/\\\\|/,e:/\\\\|/,k:b},{b:\\\"(\\\"+e.RSR+\\\"|unless)\\\\\\\\s*\\\",k:\\\"unless\\\",c:[a,{cN:\\\"regexp\\\",c:[e.BE,s],i:/\\\\n/,v:[{b:\\\"/\\\",e:\\\"/[a-z]*\\\"},{b:\\\"%r{\\\",e:\\\"}[a-z]*\\\"},{b:\\\"%r\\\\\\\\(\\\",e:\\\"\\\\\\\\)[a-z]*\\\"},{b:\\\"%r!\\\",e:\\\"![a-z]*\\\"},{b:\\\"%r\\\\\\\\[\\\",e:\\\"\\\\\\\\][a-z]*\\\"}]}].concat(n),relevance:0}].concat(n);s.c=l;var d=[{b:/^\\\\s*=>/,starts:{e:\\\"$\\\",c:i.c=l}},{cN:\\\"meta\\\",b:\\\"^([>?]>|[\\\\\\\\w#]+\\\\\\\\(\\\\\\\\w+\\\\\\\\):\\\\\\\\d+:\\\\\\\\d+>|(\\\\\\\\w+-)?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d(p\\\\\\\\d+)?[^>]+>)\\\",starts:{e:\\\"$\\\",c:l}}];return{aliases:[\\\"rb\\\",\\\"gemspec\\\",\\\"podspec\\\",\\\"thor\\\",\\\"irb\\\"],k:b,i:/\\\\/\\\\*/,c:n.concat(d).concat(l)}});hljs.registerLanguage(\\\"lua\\\",function(e){var t=\\\"\\\\\\\\[=*\\\\\\\\[\\\",a=\\\"\\\\\\\\]=*\\\\\\\\]\\\",n={b:t,e:a,c:[\\\"self\\\"]},l=[e.C(\\\"--(?!\\\"+t+\\\")\\\",\\\"$\\\"),e.C(\\\"--\\\"+t,a,{c:[n],relevance:10})];return{l:e.UIR,k:{literal:\\\"true false nil\\\",keyword:\\\"and break do else elseif end for goto if in local not or repeat return then until while\\\",built_in:\\\"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove\\\"},c:l.concat([{cN:\\\"function\\\",bK:\\\"function\\\",e:\\\"\\\\\\\\)\\\",c:[e.inherit(e.TM,{b:\\\"([_a-zA-Z]\\\\\\\\w*\\\\\\\\.)*([_a-zA-Z]\\\\\\\\w*:)?[_a-zA-Z]\\\\\\\\w*\\\"}),{cN:\\\"params\\\",b:\\\"\\\\\\\\(\\\",eW:!0,c:l}].concat(l)},e.CNM,e.ASM,e.QSM,{cN:\\\"string\\\",b:t,e:a,c:[n],relevance:5}])}});hljs.registerLanguage(\\\"matlab\\\",function(e){var a=\\\"('|\\\\\\\\.')+\\\",s={relevance:0,c:[{b:a}]};return{k:{keyword:\\\"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while\\\",built_in:\\\"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell \\\"},i:'(//|\\\"|#|/\\\\\\\\*|\\\\\\\\s+/\\\\\\\\w+)',c:[{cN:\\\"function\\\",bK:\\\"function\\\",e:\\\"$\\\",c:[e.UTM,{cN:\\\"params\\\",v:[{b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\"},{b:\\\"\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\"}]}]},{cN:\\\"built_in\\\",b:/true|false/,relevance:0,starts:s},{b:\\\"[a-zA-Z][a-zA-Z_0-9]*\\\"+a,relevance:0},{cN:\\\"number\\\",b:e.CNR,relevance:0,starts:s},{cN:\\\"string\\\",b:\\\"'\\\",e:\\\"'\\\",c:[e.BE,{b:\\\"''\\\"}]},{b:/\\\\]|}|\\\\)/,relevance:0,starts:s},{cN:\\\"string\\\",b:'\\\"',e:'\\\"',c:[e.BE,{b:'\\\"\\\"'}],starts:s},e.C(\\\"^\\\\\\\\s*\\\\\\\\%\\\\\\\\{\\\\\\\\s*$\\\",\\\"^\\\\\\\\s*\\\\\\\\%\\\\\\\\}\\\\\\\\s*$\\\"),e.C(\\\"\\\\\\\\%\\\",\\\"$\\\")]}});hljs.registerLanguage(\\\"apache\\\",function(e){var r={cN:\\\"number\\\",b:\\\"[\\\\\\\\$%]\\\\\\\\d+\\\"};return{aliases:[\\\"apacheconf\\\"],cI:!0,c:[e.HCM,{cN:\\\"section\\\",b:\\\"</?\\\",e:\\\">\\\"},{cN:\\\"attribute\\\",b:/\\\\w+/,relevance:0,k:{nomarkup:\\\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\\\"},starts:{e:/$/,relevance:0,k:{literal:\\\"on off all\\\"},c:[{cN:\\\"meta\\\",b:\\\"\\\\\\\\s\\\\\\\\[\\\",e:\\\"\\\\\\\\]$\\\"},{cN:\\\"variable\\\",b:\\\"[\\\\\\\\$%]\\\\\\\\{\\\",e:\\\"\\\\\\\\}\\\",c:[\\\"self\\\",r]},r,e.QSM]}}],i:/\\\\S/}});hljs.registerLanguage(\\\"yaml\\\",function(e){var b=\\\"true false yes no null\\\",a={cN:\\\"string\\\",relevance:0,v:[{b:/'/,e:/'/},{b:/\\\"/,e:/\\\"/},{b:/\\\\S+/}],c:[e.BE,{cN:\\\"template-variable\\\",v:[{b:\\\"{{\\\",e:\\\"}}\\\"},{b:\\\"%{\\\",e:\\\"}\\\"}]}]};return{cI:!0,aliases:[\\\"yml\\\",\\\"YAML\\\",\\\"yaml\\\"],c:[{cN:\\\"attr\\\",v:[{b:\\\"\\\\\\\\w[\\\\\\\\w :\\\\\\\\/.-]*:(?=[ \\\\t]|$)\\\"},{b:'\\\"\\\\\\\\w[\\\\\\\\w :\\\\\\\\/.-]*\\\":(?=[ \\\\t]|$)'},{b:\\\"'\\\\\\\\w[\\\\\\\\w :\\\\\\\\/.-]*':(?=[ \\\\t]|$)\\\"}]},{cN:\\\"meta\\\",b:\\\"^---s*$\\\",relevance:10},{cN:\\\"string\\\",b:\\\"[\\\\\\\\|>]([0-9]?[+-])?[ ]*\\\\\\\\n( *)[\\\\\\\\S ]+\\\\\\\\n(\\\\\\\\2[\\\\\\\\S ]+\\\\\\\\n?)*\\\"},{b:\\\"<%[%=-]?\\\",e:\\\"[%-]?%>\\\",sL:\\\"ruby\\\",eB:!0,eE:!0,relevance:0},{cN:\\\"type\\\",b:\\\"!\\\"+e.UIR},{cN:\\\"type\\\",b:\\\"!!\\\"+e.UIR},{cN:\\\"meta\\\",b:\\\"&\\\"+e.UIR+\\\"$\\\"},{cN:\\\"meta\\\",b:\\\"\\\\\\\\*\\\"+e.UIR+\\\"$\\\"},{cN:\\\"bullet\\\",b:\\\"\\\\\\\\-(?=[ ]|$)\\\",relevance:0},e.HCM,{bK:b,k:{literal:b}},{cN:\\\"number\\\",b:e.CNR+\\\"\\\\\\\\b\\\"},a]}});hljs.registerLanguage(\\\"plaintext\\\",function(e){return{disableAutodetect:!0}});hljs.registerLanguage(\\\"erlang-repl\\\",function(e){return{k:{built_in:\\\"spawn spawn_link self\\\",keyword:\\\"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor\\\"},c:[{cN:\\\"meta\\\",b:\\\"^[0-9]+> \\\",relevance:10},e.C(\\\"%\\\",\\\"$\\\"),{cN:\\\"number\\\",b:\\\"\\\\\\\\b(\\\\\\\\d+#[a-fA-F0-9]+|\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?([eE][-+]?\\\\\\\\d+)?)\\\",relevance:0},e.ASM,e.QSM,{b:\\\"\\\\\\\\?(::)?([A-Z]\\\\\\\\w*(::)?)+\\\"},{b:\\\"->\\\"},{b:\\\"ok\\\"},{b:\\\"!\\\"},{b:\\\"(\\\\\\\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\\\\\\\b[a-z'][a-zA-Z0-9_']*)\\\",relevance:0},{b:\\\"[A-Z][a-zA-Z0-9_']*\\\",relevance:0}]}});hljs.registerLanguage(\\\"cmake\\\",function(e){return{aliases:[\\\"cmake.in\\\"],cI:!0,k:{keyword:\\\"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined\\\"},c:[{cN:\\\"variable\\\",b:\\\"\\\\\\\\${\\\",e:\\\"}\\\"},e.HCM,e.QSM,e.NM]}});hljs.registerLanguage(\\\"kotlin\\\",function(e){var t={keyword:\\\"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default\\\",built_in:\\\"Byte Short Char Int Long Boolean Float Double Void Unit Nothing\\\",literal:\\\"true false null\\\"},a={cN:\\\"symbol\\\",b:e.UIR+\\\"@\\\"},n={cN:\\\"subst\\\",b:\\\"\\\\\\\\${\\\",e:\\\"}\\\",c:[e.CNM]},c={cN:\\\"variable\\\",b:\\\"\\\\\\\\$\\\"+e.UIR},r={cN:\\\"string\\\",v:[{b:'\\\"\\\"\\\"',e:'\\\"\\\"\\\"(?=[^\\\"])',c:[c,n]},{b:\\\"'\\\",e:\\\"'\\\",i:/\\\\n/,c:[e.BE]},{b:'\\\"',e:'\\\"',i:/\\\\n/,c:[e.BE,c,n]}]};n.c.push(r);var i={cN:\\\"meta\\\",b:\\\"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\\\\\s*:(?:\\\\\\\\s*\\\"+e.UIR+\\\")?\\\"},l={cN:\\\"meta\\\",b:\\\"@\\\"+e.UIR,c:[{b:/\\\\(/,e:/\\\\)/,c:[e.inherit(r,{cN:\\\"meta-string\\\"})]}]},s={cN:\\\"number\\\",b:\\\"\\\\\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\\\\\d]+[\\\\\\\\d_]+[\\\\\\\\d]+|[\\\\\\\\d]+)(\\\\\\\\.([\\\\\\\\d]+[\\\\\\\\d_]+[\\\\\\\\d]+|[\\\\\\\\d]+))?|\\\\\\\\.([\\\\\\\\d]+[\\\\\\\\d_]+[\\\\\\\\d]+|[\\\\\\\\d]+))([eE][-+]?\\\\\\\\d+)?)[lLfF]?\\\",relevance:0},b=e.C(\\\"/\\\\\\\\*\\\",\\\"\\\\\\\\*/\\\",{c:[e.CBCM]}),o={v:[{cN:\\\"type\\\",b:e.UIR},{b:/\\\\(/,e:/\\\\)/,c:[]}]},d=o;return d.v[1].c=[o],o.v[1].c=[d],{aliases:[\\\"kt\\\"],k:t,c:[e.C(\\\"/\\\\\\\\*\\\\\\\\*\\\",\\\"\\\\\\\\*/\\\",{relevance:0,c:[{cN:\\\"doctag\\\",b:\\\"@[A-Za-z]+\\\"}]}),e.CLCM,b,{cN:\\\"keyword\\\",b:/\\\\b(break|continue|return|this)\\\\b/,starts:{c:[{cN:\\\"symbol\\\",b:/@\\\\w+/}]}},a,i,l,{cN:\\\"function\\\",bK:\\\"fun\\\",e:\\\"[(]|$\\\",rB:!0,eE:!0,k:t,i:/fun\\\\s+(<.*>)?[^\\\\s\\\\(]+(\\\\s+[^\\\\s\\\\(]+)\\\\s*=/,relevance:5,c:[{b:e.UIR+\\\"\\\\\\\\s*\\\\\\\\(\\\",rB:!0,relevance:0,c:[e.UTM]},{cN:\\\"type\\\",b:/</,e:/>/,k:\\\"reified\\\",relevance:0},{cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,endsParent:!0,k:t,relevance:0,c:[{b:/:/,e:/[=,\\\\/]/,eW:!0,c:[o,e.CLCM,b],relevance:0},e.CLCM,b,i,l,r,e.CNM]},b]},{cN:\\\"class\\\",bK:\\\"class interface trait\\\",e:/[:\\\\{(]|$/,eE:!0,i:\\\"extends implements\\\",c:[{bK:\\\"public protected internal private constructor\\\"},e.UTM,{cN:\\\"type\\\",b:/</,e:/>/,eB:!0,eE:!0,relevance:0},{cN:\\\"type\\\",b:/[,:]\\\\s*/,e:/[<\\\\(,]|$/,eB:!0,rE:!0},i,l]},r,{cN:\\\"meta\\\",b:\\\"^#!/usr/bin/env\\\",e:\\\"$\\\",i:\\\"\\\\n\\\"},s]}});hljs.registerLanguage(\\\"javascript\\\",function(e){var r=\\\"<>\\\",a=\\\"</>\\\",t={b:/<[A-Za-z0-9\\\\\\\\._:-]+/,e:/\\\\/[A-Za-z0-9\\\\\\\\._:-]+>|\\\\/>/},c=\\\"[A-Za-z$_][0-9A-Za-z$_]*\\\",n={keyword:\\\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as\\\",literal:\\\"true false null undefined NaN Infinity\\\",built_in:\\\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\\\"},s={cN:\\\"number\\\",v:[{b:\\\"\\\\\\\\b(0[bB][01]+)n?\\\"},{b:\\\"\\\\\\\\b(0[oO][0-7]+)n?\\\"},{b:e.CNR+\\\"n?\\\"}],relevance:0},o={cN:\\\"subst\\\",b:\\\"\\\\\\\\$\\\\\\\\{\\\",e:\\\"\\\\\\\\}\\\",k:n,c:[]},i={b:\\\"html`\\\",e:\\\"\\\",starts:{e:\\\"`\\\",rE:!1,c:[e.BE,o],sL:\\\"xml\\\"}},b={b:\\\"css`\\\",e:\\\"\\\",starts:{e:\\\"`\\\",rE:!1,c:[e.BE,o],sL:\\\"css\\\"}},l={cN:\\\"string\\\",b:\\\"`\\\",e:\\\"`\\\",c:[e.BE,o]};o.c=[e.ASM,e.QSM,i,b,l,s,e.RM];var u=o.c.concat([e.CBCM,e.CLCM]);return{aliases:[\\\"js\\\",\\\"jsx\\\",\\\"mjs\\\",\\\"cjs\\\"],k:n,c:[{cN:\\\"meta\\\",relevance:10,b:/^\\\\s*['\\\"]use (strict|asm)['\\\"]/},{cN:\\\"meta\\\",b:/^#!/,e:/$/},e.ASM,e.QSM,i,b,l,e.CLCM,e.C(\\\"/\\\\\\\\*\\\\\\\\*\\\",\\\"\\\\\\\\*/\\\",{relevance:0,c:[{cN:\\\"doctag\\\",b:\\\"@[A-Za-z]+\\\",c:[{cN:\\\"type\\\",b:\\\"\\\\\\\\{\\\",e:\\\"\\\\\\\\}\\\",relevance:0},{cN:\\\"variable\\\",b:c+\\\"(?=\\\\\\\\s*(-)|$)\\\",endsParent:!0,relevance:0},{b:/(?=[^\\\\n])\\\\s/,relevance:0}]}]}),e.CBCM,s,{b:/[{,\\\\n]\\\\s*/,relevance:0,c:[{b:c+\\\"\\\\\\\\s*:\\\",rB:!0,relevance:0,c:[{cN:\\\"attr\\\",b:c,relevance:0}]}]},{b:\\\"(\\\"+e.RSR+\\\"|\\\\\\\\b(case|return|throw)\\\\\\\\b)\\\\\\\\s*\\\",k:\\\"return throw case\\\",c:[e.CLCM,e.CBCM,e.RM,{cN:\\\"function\\\",b:\\\"(\\\\\\\\(.*?\\\\\\\\)|\\\"+c+\\\")\\\\\\\\s*=>\\\",rB:!0,e:\\\"\\\\\\\\s*=>\\\",c:[{cN:\\\"params\\\",v:[{b:c},{b:/\\\\(\\\\s*\\\\)/},{b:/\\\\(/,e:/\\\\)/,eB:!0,eE:!0,k:n,c:u}]}]},{cN:\\\"\\\",b:/\\\\s/,e:/\\\\s*/,skip:!0},{v:[{b:r,e:a},{b:t.b,e:t.e}],sL:\\\"xml\\\",c:[{b:t.b,e:t.e,skip:!0,c:[\\\"self\\\"]}]}],relevance:0},{cN:\\\"function\\\",bK:\\\"function\\\",e:/\\\\{/,eE:!0,c:[e.inherit(e.TM,{b:c}),{cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,eB:!0,eE:!0,c:u}],i:/\\\\[|%/},{b:/\\\\$[(.]/},e.METHOD_GUARD,{cN:\\\"class\\\",bK:\\\"class\\\",e:/[{;=]/,eE:!0,i:/[:\\\"\\\\[\\\\]]/,c:[{bK:\\\"extends\\\"},e.UTM]},{bK:\\\"constructor get set\\\",e:/\\\\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage(\\\"scss\\\",function(e){var t=\\\"@[a-z-]+\\\",r={cN:\\\"variable\\\",b:\\\"(\\\\\\\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\\\\\\\b\\\"},i={cN:\\\"number\\\",b:\\\"#[0-9A-Fa-f]+\\\"};e.CSSNM,e.QSM,e.ASM,e.CBCM;return{cI:!0,i:\\\"[=/|']\\\",c:[e.CLCM,e.CBCM,{cN:\\\"selector-id\\\",b:\\\"\\\\\\\\#[A-Za-z0-9_-]+\\\",relevance:0},{cN:\\\"selector-class\\\",b:\\\"\\\\\\\\.[A-Za-z0-9_-]+\\\",relevance:0},{cN:\\\"selector-attr\\\",b:\\\"\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\",i:\\\"$\\\"},{cN:\\\"selector-tag\\\",b:\\\"\\\\\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\\\\\b\\\",relevance:0},{cN:\\\"selector-pseudo\\\",b:\\\":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)\\\"},{cN:\\\"selector-pseudo\\\",b:\\\"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)\\\"},r,{cN:\\\"attribute\\\",b:\\\"\\\\\\\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\\\\\b\\\",i:\\\"[^\\\\\\\\s]\\\"},{b:\\\"\\\\\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\\\\\b\\\"},{b:\\\":\\\",e:\\\";\\\",c:[r,i,e.CSSNM,e.QSM,e.ASM,{cN:\\\"meta\\\",b:\\\"!important\\\"}]},{b:\\\"@(page|font-face)\\\",l:t,k:\\\"@page @font-face\\\"},{b:\\\"@\\\",e:\\\"[{;]\\\",rB:!0,k:\\\"and or not only\\\",c:[{b:t,cN:\\\"keyword\\\"},r,e.QSM,e.ASM,i,e.CSSNM]}]}});hljs.registerLanguage(\\\"perl\\\",function(e){var t=\\\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\\\",r={cN:\\\"subst\\\",b:\\\"[$@]\\\\\\\\{\\\",e:\\\"\\\\\\\\}\\\",k:t},s={b:\\\"->{\\\",e:\\\"}\\\"},n={v:[{b:/\\\\$\\\\d/},{b:/[\\\\$%@](\\\\^\\\\w\\\\b|#\\\\w+(::\\\\w+)*|{\\\\w+}|\\\\w+(::\\\\w*)*)/},{b:/[\\\\$%@][^\\\\s\\\\w{]/,relevance:0}]},c=[e.BE,r,n],a=[n,e.HCM,e.C(\\\"^\\\\\\\\=\\\\\\\\w\\\",\\\"\\\\\\\\=cut\\\",{eW:!0}),s,{cN:\\\"string\\\",c:c,v:[{b:\\\"q[qwxr]?\\\\\\\\s*\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",relevance:5},{b:\\\"q[qwxr]?\\\\\\\\s*\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\",relevance:5},{b:\\\"q[qwxr]?\\\\\\\\s*\\\\\\\\{\\\",e:\\\"\\\\\\\\}\\\",relevance:5},{b:\\\"q[qwxr]?\\\\\\\\s*\\\\\\\\|\\\",e:\\\"\\\\\\\\|\\\",relevance:5},{b:\\\"q[qwxr]?\\\\\\\\s*\\\\\\\\<\\\",e:\\\"\\\\\\\\>\\\",relevance:5},{b:\\\"qw\\\\\\\\s+q\\\",e:\\\"q\\\",relevance:5},{b:\\\"'\\\",e:\\\"'\\\",c:[e.BE]},{b:'\\\"',e:'\\\"'},{b:\\\"`\\\",e:\\\"`\\\",c:[e.BE]},{b:\\\"{\\\\\\\\w+}\\\",c:[],relevance:0},{b:\\\"-?\\\\\\\\w+\\\\\\\\s*\\\\\\\\=\\\\\\\\>\\\",c:[],relevance:0}]},{cN:\\\"number\\\",b:\\\"(\\\\\\\\b0[0-7_]+)|(\\\\\\\\b0x[0-9a-fA-F_]+)|(\\\\\\\\b[1-9][0-9_]*(\\\\\\\\.[0-9_]+)?)|[0_]\\\\\\\\b\\\",relevance:0},{b:\\\"(\\\\\\\\/\\\\\\\\/|\\\"+e.RSR+\\\"|\\\\\\\\b(split|return|print|reverse|grep)\\\\\\\\b)\\\\\\\\s*\\\",k:\\\"split return print reverse grep\\\",relevance:0,c:[e.HCM,{cN:\\\"regexp\\\",b:\\\"(s|tr|y)/(\\\\\\\\\\\\\\\\.|[^/])*/(\\\\\\\\\\\\\\\\.|[^/])*/[a-z]*\\\",relevance:10},{cN:\\\"regexp\\\",b:\\\"(m|qr)?/\\\",e:\\\"/[a-z]*\\\",c:[e.BE],relevance:0}]},{cN:\\\"function\\\",bK:\\\"sub\\\",e:\\\"(\\\\\\\\s*\\\\\\\\(.*?\\\\\\\\))?[;{]\\\",eE:!0,relevance:5,c:[e.TM]},{b:\\\"-\\\\\\\\w\\\\\\\\b\\\",relevance:0},{b:\\\"^__DATA__$\\\",e:\\\"^__END__$\\\",sL:\\\"mojolicious\\\",c:[{b:\\\"^@@.*\\\",e:\\\"$\\\",cN:\\\"comment\\\"}]}];return r.c=a,{aliases:[\\\"pl\\\",\\\"pm\\\"],l:/[\\\\w\\\\.]+/,k:t,c:s.c=a}});hljs.registerLanguage(\\\"go\\\",function(e){var n={keyword:\\\"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune\\\",literal:\\\"true false iota nil\\\",built_in:\\\"append cap close complex copy imag len make new panic print println real recover delete\\\"};return{aliases:[\\\"golang\\\"],k:n,i:\\\"</\\\",c:[e.CLCM,e.CBCM,{cN:\\\"string\\\",v:[e.QSM,e.ASM,{b:\\\"`\\\",e:\\\"`\\\"}]},{cN:\\\"number\\\",v:[{b:e.CNR+\\\"[i]\\\",relevance:1},e.CNM]},{b:/:=/},{cN:\\\"function\\\",bK:\\\"func\\\",e:\\\"\\\\\\\\s*(\\\\\\\\{|$)\\\",eE:!0,c:[e.TM,{cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,k:n,i:/[\\\"']/}]}]}});hljs.registerLanguage(\\\"x86asm\\\",function(s){return{cI:!0,l:\\\"[.%]?\\\"+s.IR,k:{keyword:\\\"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63\\\",built_in:\\\"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr\\\",meta:\\\"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__\\\"},c:[s.C(\\\";\\\",\\\"$\\\",{relevance:0}),{cN:\\\"number\\\",v:[{b:\\\"\\\\\\\\b(?:([0-9][0-9_]*)?\\\\\\\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\\\\\\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\\\\\\\b\\\",relevance:0},{b:\\\"\\\\\\\\$[0-9][0-9A-Fa-f]*\\\",relevance:0},{b:\\\"\\\\\\\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\\\\\\\b\\\"},{b:\\\"\\\\\\\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\\\\\\\b\\\"}]},s.QSM,{cN:\\\"string\\\",v:[{b:\\\"'\\\",e:\\\"[^\\\\\\\\\\\\\\\\]'\\\"},{b:\\\"`\\\",e:\\\"[^\\\\\\\\\\\\\\\\]`\\\"}],relevance:0},{cN:\\\"symbol\\\",v:[{b:\\\"^\\\\\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\\\\\s+label)\\\"},{b:\\\"^\\\\\\\\s*%%[A-Za-z0-9_$#@~.?]*:\\\"}],relevance:0},{cN:\\\"subst\\\",b:\\\"%[0-9]+\\\",relevance:0},{cN:\\\"subst\\\",b:\\\"%!S+\\\",relevance:0},{cN:\\\"meta\\\",b:/^\\\\s*\\\\.[\\\\w_-]+/}]}});hljs.registerLanguage(\\\"cpp\\\",function(e){function t(e){return\\\"(?:\\\"+e+\\\")?\\\"}var r=\\\"decltype\\\\\\\\(auto\\\\\\\\)\\\",a=\\\"[a-zA-Z_]\\\\\\\\w*::\\\",i=\\\"(\\\"+r+\\\"|\\\"+t(a)+\\\"[a-zA-Z_]\\\\\\\\w*\\\"+t(\\\"<.*?>\\\")+\\\")\\\",c={cN:\\\"keyword\\\",b:\\\"\\\\\\\\b[a-z\\\\\\\\d_]*_t\\\\\\\\b\\\"},s={cN:\\\"string\\\",v:[{b:'(u8?|U|L)?\\\"',e:'\\\"',i:\\\"\\\\\\\\n\\\",c:[e.BE]},{b:\\\"(u8?|U|L)?'(\\\\\\\\\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\\\\\S)|.)\\\",e:\\\"'\\\",i:\\\".\\\"},{b:/(?:u8?|U|L)?R\\\"([^()\\\\\\\\ ]{0,16})\\\\((?:.|\\\\n)*?\\\\)\\\\1\\\"/}]},n={cN:\\\"number\\\",v:[{b:\\\"\\\\\\\\b(0b[01']+)\\\"},{b:\\\"(-?)\\\\\\\\b([\\\\\\\\d']+(\\\\\\\\.[\\\\\\\\d']*)?|\\\\\\\\.[\\\\\\\\d']+)(u|U|l|L|ul|UL|f|F|b|B)\\\"},{b:\\\"(-?)(\\\\\\\\b0[xX][a-fA-F0-9']+|(\\\\\\\\b[\\\\\\\\d']+(\\\\\\\\.[\\\\\\\\d']*)?|\\\\\\\\.[\\\\\\\\d']+)([eE][-+]?[\\\\\\\\d']+)?)\\\"}],relevance:0},o={cN:\\\"meta\\\",b:/#\\\\s*[a-z]+\\\\b/,e:/$/,k:{\\\"meta-keyword\\\":\\\"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include\\\"},c:[{b:/\\\\\\\\\\\\n/,relevance:0},e.inherit(s,{cN:\\\"meta-string\\\"}),{cN:\\\"meta-string\\\",b:/<.*?>/,e:/$/,i:\\\"\\\\\\\\n\\\"},e.CLCM,e.CBCM]},l={cN:\\\"title\\\",b:t(a)+e.IR,relevance:0},u=t(a)+e.IR+\\\"\\\\\\\\s*\\\\\\\\(\\\",p={keyword:\\\"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq\\\",built_in:\\\"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary\\\",literal:\\\"true false nullptr NULL\\\"},m=[c,e.CLCM,e.CBCM,n,s],d={v:[{b:/=/,e:/;/},{b:/\\\\(/,e:/\\\\)/},{bK:\\\"new throw return else\\\",e:/;/}],k:p,c:m.concat([{b:/\\\\(/,e:/\\\\)/,k:p,c:m.concat([\\\"self\\\"]),relevance:0}]),relevance:0},b={cN:\\\"function\\\",b:\\\"(\\\"+i+\\\"[\\\\\\\\*&\\\\\\\\s]+)+\\\"+u,rB:!0,e:/[{;=]/,eE:!0,k:p,i:/[^\\\\w\\\\s\\\\*&:<>]/,c:[{b:r,k:p,relevance:0},{b:u,rB:!0,c:[l],relevance:0},{cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,k:p,relevance:0,c:[e.CLCM,e.CBCM,s,n,c,{b:/\\\\(/,e:/\\\\)/,k:p,relevance:0,c:[\\\"self\\\",e.CLCM,e.CBCM,s,n,c]}]},c,e.CLCM,e.CBCM,o]};return{aliases:[\\\"c\\\",\\\"cc\\\",\\\"h\\\",\\\"c++\\\",\\\"h++\\\",\\\"hpp\\\",\\\"hh\\\",\\\"hxx\\\",\\\"cxx\\\"],k:p,i:\\\"</\\\",c:[].concat(d,b,m,[o,{b:\\\"\\\\\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\\\\\s*<\\\",e:\\\">\\\",k:p,c:[\\\"self\\\",c]},{b:e.IR+\\\"::\\\",k:p},{cN:\\\"class\\\",bK:\\\"class struct\\\",e:/[{;:]/,c:[{b:/</,e:/>/,c:[\\\"self\\\"]},e.TM]}]),exports:{preprocessor:o,strings:s,k:p}}});hljs.registerLanguage(\\\"arduino\\\",function(e){var t=\\\"boolean byte word String\\\",r=\\\"setup loopKeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put\\\",i=\\\"DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW\\\",o=e.requireLanguage(\\\"cpp\\\").rawDefinition(),a=o.k;return a.keyword+=\\\" \\\"+t,a.literal+=\\\" \\\"+i,a.built_in+=\\\" \\\"+r,o});hljs.registerLanguage(\\\"nginx\\\",function(e){var r={cN:\\\"variable\\\",v:[{b:/\\\\$\\\\d+/},{b:/\\\\$\\\\{/,e:/}/},{b:\\\"[\\\\\\\\$\\\\\\\\@]\\\"+e.UIR}]},b={eW:!0,l:\\\"[a-z/_]+\\\",k:{literal:\\\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\\\"},relevance:0,i:\\\"=>\\\",c:[e.HCM,{cN:\\\"string\\\",c:[e.BE,r],v:[{b:/\\\"/,e:/\\\"/},{b:/'/,e:/'/}]},{b:\\\"([a-z]+):/\\\",e:\\\"\\\\\\\\s\\\",eW:!0,eE:!0,c:[r]},{cN:\\\"regexp\\\",c:[e.BE,r],v:[{b:\\\"\\\\\\\\s\\\\\\\\^\\\",e:\\\"\\\\\\\\s|{|;\\\",rE:!0},{b:\\\"~\\\\\\\\*?\\\\\\\\s+\\\",e:\\\"\\\\\\\\s|{|;\\\",rE:!0},{b:\\\"\\\\\\\\*(\\\\\\\\.[a-z\\\\\\\\-]+)+\\\"},{b:\\\"([a-z\\\\\\\\-]+\\\\\\\\.)+\\\\\\\\*\\\"}]},{cN:\\\"number\\\",b:\\\"\\\\\\\\b\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}(:\\\\\\\\d{1,5})?\\\\\\\\b\\\"},{cN:\\\"number\\\",b:\\\"\\\\\\\\b\\\\\\\\d+[kKmMgGdshdwy]*\\\\\\\\b\\\",relevance:0},r]};return{aliases:[\\\"nginxconf\\\"],c:[e.HCM,{b:e.UIR+\\\"\\\\\\\\s+{\\\",rB:!0,e:\\\"{\\\",c:[{cN:\\\"section\\\",b:e.UIR}],relevance:0},{b:e.UIR+\\\"\\\\\\\\s\\\",e:\\\";|{\\\",rB:!0,c:[{cN:\\\"attribute\\\",b:e.UIR,starts:b}],relevance:0}],i:\\\"[^\\\\\\\\s\\\\\\\\}]\\\"}});hljs.registerLanguage(\\\"xml\\\",function(e){var c={cN:\\\"symbol\\\",b:\\\"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;\\\"},s={b:\\\"\\\\\\\\s\\\",c:[{cN:\\\"meta-keyword\\\",b:\\\"#?[a-z_][a-z1-9_-]+\\\",i:\\\"\\\\\\\\n\\\"}]},a=e.inherit(s,{b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\"}),t=e.inherit(e.ASM,{cN:\\\"meta-string\\\"}),l=e.inherit(e.QSM,{cN:\\\"meta-string\\\"}),r={eW:!0,i:/</,relevance:0,c:[{cN:\\\"attr\\\",b:\\\"[A-Za-z0-9\\\\\\\\._:-]+\\\",relevance:0},{b:/=\\\\s*/,relevance:0,c:[{cN:\\\"string\\\",endsParent:!0,v:[{b:/\\\"/,e:/\\\"/,c:[c]},{b:/'/,e:/'/,c:[c]},{b:/[^\\\\s\\\"'=<>`]+/}]}]}]};return{aliases:[\\\"html\\\",\\\"xhtml\\\",\\\"rss\\\",\\\"atom\\\",\\\"xjb\\\",\\\"xsd\\\",\\\"xsl\\\",\\\"plist\\\",\\\"wsf\\\",\\\"svg\\\"],cI:!0,c:[{cN:\\\"meta\\\",b:\\\"<![a-z]\\\",e:\\\">\\\",relevance:10,c:[s,l,t,a,{b:\\\"\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\",c:[{cN:\\\"meta\\\",b:\\\"<![a-z]\\\",e:\\\">\\\",c:[s,a,l,t]}]}]},e.C(\\\"\\\\x3c!--\\\",\\\"--\\\\x3e\\\",{relevance:10}),{b:\\\"<\\\\\\\\!\\\\\\\\[CDATA\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\\\\\\]>\\\",relevance:10},c,{cN:\\\"meta\\\",b:/<\\\\?xml/,e:/\\\\?>/,relevance:10},{b:/<\\\\?(php)?/,e:/\\\\?>/,sL:\\\"php\\\",c:[{b:\\\"/\\\\\\\\*\\\",e:\\\"\\\\\\\\*/\\\",skip:!0},{b:'b\\\"',e:'\\\"',skip:!0},{b:\\\"b'\\\",e:\\\"'\\\",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:\\\"tag\\\",b:\\\"<style(?=\\\\\\\\s|>)\\\",e:\\\">\\\",k:{name:\\\"style\\\"},c:[r],starts:{e:\\\"</style>\\\",rE:!0,sL:[\\\"css\\\",\\\"xml\\\"]}},{cN:\\\"tag\\\",b:\\\"<script(?=\\\\\\\\s|>)\\\",e:\\\">\\\",k:{name:\\\"script\\\"},c:[r],starts:{e:\\\"<\\\\/script>\\\",rE:!0,sL:[\\\"actionscript\\\",\\\"javascript\\\",\\\"handlebars\\\",\\\"xml\\\"]}},{cN:\\\"tag\\\",b:\\\"</?\\\",e:\\\"/?>\\\",c:[{cN:\\\"name\\\",b:/[^\\\\/><\\\\s]+/,relevance:0},r]}]}});hljs.registerLanguage(\\\"markdown\\\",function(e){return{aliases:[\\\"md\\\",\\\"mkdown\\\",\\\"mkd\\\"],c:[{cN:\\\"section\\\",v:[{b:\\\"^#{1,6}\\\",e:\\\"$\\\"},{b:\\\"^.+?\\\\\\\\n[=-]{2,}$\\\"}]},{b:\\\"<\\\",e:\\\">\\\",sL:\\\"xml\\\",relevance:0},{cN:\\\"bullet\\\",b:\\\"^\\\\\\\\s*([*+-]|(\\\\\\\\d+\\\\\\\\.))\\\\\\\\s+\\\"},{cN:\\\"strong\\\",b:\\\"[*_]{2}.+?[*_]{2}\\\"},{cN:\\\"emphasis\\\",v:[{b:\\\"\\\\\\\\*.+?\\\\\\\\*\\\"},{b:\\\"_.+?_\\\",relevance:0}]},{cN:\\\"quote\\\",b:\\\"^>\\\\\\\\s+\\\",e:\\\"$\\\"},{cN:\\\"code\\\",v:[{b:\\\"^```\\\\\\\\w*\\\\\\\\s*$\\\",e:\\\"^```[ ]*$\\\"},{b:\\\"`.+?`\\\"},{b:\\\"^( {4}|\\\\\\\\t)\\\",e:\\\"$\\\",relevance:0}]},{b:\\\"^[-\\\\\\\\*]{3,}\\\",e:\\\"$\\\"},{b:\\\"\\\\\\\\[.+?\\\\\\\\][\\\\\\\\(\\\\\\\\[].*?[\\\\\\\\)\\\\\\\\]]\\\",rB:!0,c:[{cN:\\\"string\\\",b:\\\"\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\",eB:!0,rE:!0,relevance:0},{cN:\\\"link\\\",b:\\\"\\\\\\\\]\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",eB:!0,eE:!0},{cN:\\\"symbol\\\",b:\\\"\\\\\\\\]\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\",eB:!0,eE:!0}],relevance:10},{b:/^\\\\[[^\\\\n]+\\\\]:/,rB:!0,c:[{cN:\\\"symbol\\\",b:/\\\\[/,e:/\\\\]/,eB:!0,eE:!0},{cN:\\\"link\\\",b:/:\\\\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage(\\\"properties\\\",function(e){var r=\\\"[ \\\\\\\\t\\\\\\\\f]*\\\",t=\\\"(\\\"+r+\\\"[:=]\\\"+r+\\\"|[ \\\\\\\\t\\\\\\\\f]+)\\\",n=\\\"([^\\\\\\\\\\\\\\\\\\\\\\\\W:= \\\\\\\\t\\\\\\\\f\\\\\\\\n]|\\\\\\\\\\\\\\\\.)+\\\",a=\\\"([^\\\\\\\\\\\\\\\\:= \\\\\\\\t\\\\\\\\f\\\\\\\\n]|\\\\\\\\\\\\\\\\.)+\\\",c={e:t,relevance:0,starts:{cN:\\\"string\\\",e:/$/,relevance:0,c:[{b:\\\"\\\\\\\\\\\\\\\\\\\\\\\\n\\\"}]}};return{cI:!0,i:/\\\\S/,c:[e.C(\\\"^\\\\\\\\s*[!#]\\\",\\\"$\\\"),{b:n+t,rB:!0,c:[{cN:\\\"attr\\\",b:n,endsParent:!0,relevance:0}],starts:c},{b:a+t,rB:!0,relevance:0,c:[{cN:\\\"meta\\\",b:a,endsParent:!0,relevance:0}],starts:c},{cN:\\\"attr\\\",relevance:0,b:a+r+\\\"$\\\"}]}});hljs.registerLanguage(\\\"bash\\\",function(e){var t={cN:\\\"variable\\\",v:[{b:/\\\\$[\\\\w\\\\d#@][\\\\w\\\\d_]*/},{b:/\\\\$\\\\{(.*?)}/}]},a={cN:\\\"string\\\",b:/\\\"/,e:/\\\"/,c:[e.BE,t,{cN:\\\"variable\\\",b:/\\\\$\\\\(/,e:/\\\\)/,c:[e.BE]}]};return{aliases:[\\\"sh\\\",\\\"zsh\\\"],l:/\\\\b-?[a-z\\\\._]+\\\\b/,k:{keyword:\\\"if then else elif fi for while in do done case esac function\\\",literal:\\\"true false\\\",built_in:\\\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\\\",_:\\\"-ne -eq -lt -gt -f -d -e -s -l -a\\\"},c:[{cN:\\\"meta\\\",b:/^#![^\\\\n]+sh\\\\s*$/,relevance:10},{cN:\\\"function\\\",b:/\\\\w[\\\\w\\\\d_]*\\\\s*\\\\(\\\\s*\\\\)\\\\s*\\\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\\\w[\\\\w\\\\d_]*/})],relevance:0},e.HCM,a,{cN:\\\"\\\",b:/\\\\\\\\\\\"/},{cN:\\\"string\\\",b:/'/,e:/'/},t]}});hljs.registerLanguage(\\\"dockerfile\\\",function(e){return{aliases:[\\\"docker\\\"],cI:!0,k:\\\"from maintainer expose env arg user onbuild stopsignal\\\",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:\\\"run cmd entrypoint volume add copy workdir label healthcheck shell\\\",starts:{e:/[^\\\\\\\\]$/,sL:\\\"bash\\\"}}],i:\\\"</\\\"}});hljs.registerLanguage(\\\"python\\\",function(e){var r={keyword:\\\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10\\\",built_in:\\\"Ellipsis NotImplemented\\\",literal:\\\"False None True\\\"},b={cN:\\\"meta\\\",b:/^(>>>|\\\\.\\\\.\\\\.) /},c={cN:\\\"subst\\\",b:/\\\\{/,e:/\\\\}/,k:r,i:/#/},a={b:/\\\\{\\\\{/,relevance:0},l={cN:\\\"string\\\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],relevance:10},{b:/(u|b)?r?\\\"\\\"\\\"/,e:/\\\"\\\"\\\"/,c:[e.BE,b],relevance:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,a,c]},{b:/(fr|rf|f)\\\"\\\"\\\"/,e:/\\\"\\\"\\\"/,c:[e.BE,b,a,c]},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)\\\"/,e:/\\\"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\\\"/,e:/\\\"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a,c]},{b:/(fr|rf|f)\\\"/,e:/\\\"/,c:[e.BE,a,c]},e.ASM,e.QSM]},n={cN:\\\"number\\\",relevance:0,v:[{b:e.BNR+\\\"[lLjJ]?\\\"},{b:\\\"\\\\\\\\b(0o[0-7]+)[lLjJ]?\\\"},{b:e.CNR+\\\"[lLjJ]?\\\"}]},i={cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,c:[\\\"self\\\",b,n,l,e.HCM]};return c.c=[l,n,b],{aliases:[\\\"py\\\",\\\"gyp\\\",\\\"ipython\\\"],k:r,i:/(<\\\\/|->|\\\\?)|=>/,c:[b,n,{bK:\\\"if\\\",relevance:0},l,e.HCM,{v:[{cN:\\\"function\\\",bK:\\\"def\\\"},{cN:\\\"class\\\",bK:\\\"class\\\"}],e:/:/,i:/[${=;\\\\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:\\\"None\\\"}]},{cN:\\\"meta\\\",b:/^[\\\\t ]*@/,e:/$/},{b:/\\\\b(print|exec)\\\\(/}]}});hljs.registerLanguage(\\\"ini\\\",function(e){var b={cN:\\\"number\\\",relevance:0,v:[{b:/([\\\\+\\\\-]+)?[\\\\d]+_[\\\\d_]+/},{b:e.NR}]},a=e.C();a.v=[{b:/;/,e:/$/},{b:/#/,e:/$/}];var c={cN:\\\"variable\\\",v:[{b:/\\\\$[\\\\w\\\\d\\\"][\\\\w\\\\d_]*/},{b:/\\\\$\\\\{(.*?)}/}]},r={cN:\\\"literal\\\",b:/\\\\bon|off|true|false|yes|no\\\\b/},n={cN:\\\"string\\\",c:[e.BE],v:[{b:\\\"'''\\\",e:\\\"'''\\\",relevance:10},{b:'\\\"\\\"\\\"',e:'\\\"\\\"\\\"',relevance:10},{b:'\\\"',e:'\\\"'},{b:\\\"'\\\",e:\\\"'\\\"}]};return{aliases:[\\\"toml\\\"],cI:!0,i:/\\\\S/,c:[a,{cN:\\\"section\\\",b:/\\\\[+/,e:/\\\\]+/},{b:/^[a-z0-9\\\\[\\\\]_\\\\.-]+(?=\\\\s*=\\\\s*)/,cN:\\\"attr\\\",starts:{e:/$/,c:[a,{b:/\\\\[/,e:/\\\\]/,c:[a,r,c,n,b,\\\"self\\\"],relevance:0},r,c,n,b]}}]}});hljs.registerLanguage(\\\"diff\\\",function(e){return{aliases:[\\\"patch\\\"],c:[{cN:\\\"meta\\\",relevance:10,v:[{b:/^@@ +\\\\-\\\\d+,\\\\d+ +\\\\+\\\\d+,\\\\d+ +@@$/},{b:/^\\\\*\\\\*\\\\* +\\\\d+,\\\\d+ +\\\\*\\\\*\\\\*\\\\*$/},{b:/^\\\\-\\\\-\\\\- +\\\\d+,\\\\d+ +\\\\-\\\\-\\\\-\\\\-$/}]},{cN:\\\"comment\\\",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\\\\-{3}/,e:/$/},{b:/^\\\\*{3} /,e:/$/},{b:/^\\\\+{3}/,e:/$/},{b:/^\\\\*{15}$/}]},{cN:\\\"addition\\\",b:\\\"^\\\\\\\\+\\\",e:\\\"$\\\"},{cN:\\\"deletion\\\",b:\\\"^\\\\\\\\-\\\",e:\\\"$\\\"},{cN:\\\"addition\\\",b:\\\"^\\\\\\\\!\\\",e:\\\"$\\\"}]}});hljs.registerLanguage(\\\"http\\\",function(e){var t=\\\"HTTP/[0-9\\\\\\\\.]+\\\";return{aliases:[\\\"https\\\"],i:\\\"\\\\\\\\S\\\",c:[{b:\\\"^\\\"+t,e:\\\"$\\\",c:[{cN:\\\"number\\\",b:\\\"\\\\\\\\b\\\\\\\\d{3}\\\\\\\\b\\\"}]},{b:\\\"^[A-Z]+ (.*?) \\\"+t+\\\"$\\\",rB:!0,e:\\\"$\\\",c:[{cN:\\\"string\\\",b:\\\" \\\",e:\\\" \\\",eB:!0,eE:!0},{b:t},{cN:\\\"keyword\\\",b:\\\"[A-Z]+\\\"}]},{cN:\\\"attribute\\\",b:\\\"^\\\\\\\\w\\\",e:\\\": \\\",eE:!0,i:\\\"\\\\\\\\n|\\\\\\\\s|=\\\",starts:{e:\\\"$\\\",relevance:0}},{b:\\\"\\\\\\\\n\\\\\\\\n\\\",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage(\\\"sql\\\",function(e){var t=e.C(\\\"--\\\",\\\"$\\\");return{cI:!0,i:/[<>{}*]/,c:[{bK:\\\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with\\\",e:/;/,eW:!0,l:/[\\\\w\\\\.]+/,k:{keyword:\\\"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek\\\",literal:\\\"true false null unknown\\\",built_in:\\\"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void\\\"},c:[{cN:\\\"string\\\",b:\\\"'\\\",e:\\\"'\\\",c:[{b:\\\"''\\\"}]},{cN:\\\"string\\\",b:'\\\"',e:'\\\"',c:[{b:'\\\"\\\"'}]},{cN:\\\"string\\\",b:\\\"`\\\",e:\\\"`\\\"},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage(\\\"vala\\\",function(e){return{k:{keyword:\\\"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var\\\",built_in:\\\"DBus GLib CCode Gee Object Gtk Posix\\\",literal:\\\"false true null\\\"},c:[{cN:\\\"class\\\",bK:\\\"class interface namespace\\\",e:\\\"{\\\",eE:!0,i:\\\"[^,:\\\\\\\\n\\\\\\\\s\\\\\\\\.]\\\",c:[e.UTM]},e.CLCM,e.CBCM,{cN:\\\"string\\\",b:'\\\"\\\"\\\"',e:'\\\"\\\"\\\"',relevance:5},e.ASM,e.QSM,e.CNM,{cN:\\\"meta\\\",b:\\\"^#\\\",e:\\\"$\\\",relevance:2}]}});hljs.registerLanguage(\\\"asciidoc\\\",function(e){return{aliases:[\\\"adoc\\\"],c:[e.C(\\\"^/{4,}\\\\\\\\n\\\",\\\"\\\\\\\\n/{4,}$\\\",{relevance:10}),e.C(\\\"^//\\\",\\\"$\\\",{relevance:0}),{cN:\\\"title\\\",b:\\\"^\\\\\\\\.\\\\\\\\w.*$\\\"},{b:\\\"^[=\\\\\\\\*]{4,}\\\\\\\\n\\\",e:\\\"\\\\\\\\n^[=\\\\\\\\*]{4,}$\\\",relevance:10},{cN:\\\"section\\\",relevance:10,v:[{b:\\\"^(={1,5}) .+?( \\\\\\\\1)?$\\\"},{b:\\\"^[^\\\\\\\\[\\\\\\\\]\\\\\\\\n]+?\\\\\\\\n[=\\\\\\\\-~\\\\\\\\^\\\\\\\\+]{2,}$\\\"}]},{cN:\\\"meta\\\",b:\\\"^:.+?:\\\",e:\\\"\\\\\\\\s\\\",eE:!0,relevance:10},{cN:\\\"meta\\\",b:\\\"^\\\\\\\\[.+?\\\\\\\\]$\\\",relevance:0},{cN:\\\"quote\\\",b:\\\"^_{4,}\\\\\\\\n\\\",e:\\\"\\\\\\\\n_{4,}$\\\",relevance:10},{cN:\\\"code\\\",b:\\\"^[\\\\\\\\-\\\\\\\\.]{4,}\\\\\\\\n\\\",e:\\\"\\\\\\\\n[\\\\\\\\-\\\\\\\\.]{4,}$\\\",relevance:10},{b:\\\"^\\\\\\\\+{4,}\\\\\\\\n\\\",e:\\\"\\\\\\\\n\\\\\\\\+{4,}$\\\",c:[{b:\\\"<\\\",e:\\\">\\\",sL:\\\"xml\\\",relevance:0}],relevance:10},{cN:\\\"bullet\\\",b:\\\"^(\\\\\\\\*+|\\\\\\\\-+|\\\\\\\\.+|[^\\\\\\\\n]+?::)\\\\\\\\s+\\\"},{cN:\\\"symbol\\\",b:\\\"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\\\\\s+\\\",relevance:10},{cN:\\\"strong\\\",b:\\\"\\\\\\\\B\\\\\\\\*(?![\\\\\\\\*\\\\\\\\s])\\\",e:\\\"(\\\\\\\\n{2}|\\\\\\\\*)\\\",c:[{b:\\\"\\\\\\\\\\\\\\\\*\\\\\\\\w\\\",relevance:0}]},{cN:\\\"emphasis\\\",b:\\\"\\\\\\\\B'(?!['\\\\\\\\s])\\\",e:\\\"(\\\\\\\\n{2}|')\\\",c:[{b:\\\"\\\\\\\\\\\\\\\\'\\\\\\\\w\\\",relevance:0}],relevance:0},{cN:\\\"emphasis\\\",b:\\\"_(?![_\\\\\\\\s])\\\",e:\\\"(\\\\\\\\n{2}|_)\\\",relevance:0},{cN:\\\"string\\\",v:[{b:\\\"``.+?''\\\"},{b:\\\"`.+?'\\\"}]},{cN:\\\"code\\\",b:\\\"(`.+?`|\\\\\\\\+.+?\\\\\\\\+)\\\",relevance:0},{cN:\\\"code\\\",b:\\\"^[ \\\\\\\\t]\\\",e:\\\"$\\\",relevance:0},{b:\\\"^'{3,}[ \\\\\\\\t]*$\\\",relevance:10},{b:\\\"(link:)?(http|https|ftp|file|irc|image:?):\\\\\\\\S+\\\\\\\\[.*?\\\\\\\\]\\\",rB:!0,c:[{b:\\\"(link|image:?):\\\",relevance:0},{cN:\\\"link\\\",b:\\\"\\\\\\\\w\\\",e:\\\"[^\\\\\\\\[]+\\\",relevance:0},{cN:\\\"string\\\",b:\\\"\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\",eB:!0,eE:!0,relevance:0}],relevance:10}]}});hljs.registerLanguage(\\\"json\\\",function(e){var i={literal:\\\"true false null\\\"},n=[e.CLCM,e.CBCM],c=[e.QSM,e.CNM],r={e:\\\",\\\",eW:!0,eE:!0,c:c,k:i},t={b:\\\"{\\\",e:\\\"}\\\",c:[{cN:\\\"attr\\\",b:/\\\"/,e:/\\\"/,c:[e.BE],i:\\\"\\\\\\\\n\\\"},e.inherit(r,{b:/:/})].concat(n),i:\\\"\\\\\\\\S\\\"},a={b:\\\"\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\",c:[e.inherit(r)],i:\\\"\\\\\\\\S\\\"};return c.push(t,a),n.forEach(function(e){c.push(e)}),{c:c,k:i,i:\\\"\\\\\\\\S\\\"}});hljs.registerLanguage(\\\"rust\\\",function(e){var t=\\\"([ui](8|16|32|64|128|size)|f(32|64))?\\\",r=\\\"drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!\\\";return{aliases:[\\\"rs\\\"],k:{keyword:\\\"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield\\\",literal:\\\"true false Some None Ok Err\\\",built_in:r},l:e.IR+\\\"!?\\\",i:\\\"</\\\",c:[e.CLCM,e.C(\\\"/\\\\\\\\*\\\",\\\"\\\\\\\\*/\\\",{c:[\\\"self\\\"]}),e.inherit(e.QSM,{b:/b?\\\"/,i:null}),{cN:\\\"string\\\",v:[{b:/r(#*)\\\"(.|\\\\n)*?\\\"\\\\1(?!#)/},{b:/b?'\\\\\\\\?(x\\\\w{2}|u\\\\w{4}|U\\\\w{8}|.)'/}]},{cN:\\\"symbol\\\",b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:\\\"number\\\",v:[{b:\\\"\\\\\\\\b0b([01_]+)\\\"+t},{b:\\\"\\\\\\\\b0o([0-7_]+)\\\"+t},{b:\\\"\\\\\\\\b0x([A-Fa-f0-9_]+)\\\"+t},{b:\\\"\\\\\\\\b(\\\\\\\\d[\\\\\\\\d_]*(\\\\\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)\\\"+t}],relevance:0},{cN:\\\"function\\\",bK:\\\"fn\\\",e:\\\"(\\\\\\\\(|<)\\\",eE:!0,c:[e.UTM]},{cN:\\\"meta\\\",b:\\\"#\\\\\\\\!?\\\\\\\\[\\\",e:\\\"\\\\\\\\]\\\",c:[{cN:\\\"meta-string\\\",b:/\\\"/,e:/\\\"/}]},{cN:\\\"class\\\",bK:\\\"type\\\",e:\\\";\\\",c:[e.inherit(e.UTM,{endsParent:!0})],i:\\\"\\\\\\\\S\\\"},{cN:\\\"class\\\",bK:\\\"trait enum struct union\\\",e:\\\"{\\\",c:[e.inherit(e.UTM,{endsParent:!0})],i:\\\"[\\\\\\\\w\\\\\\\\d]\\\"},{b:e.IR+\\\"::\\\",k:{built_in:r}},{b:\\\"->\\\"}]}});hljs.registerLanguage(\\\"awk\\\",function(e){return{k:{keyword:\\\"BEGIN END if else while do for in break continue delete next nextfile function func exit|10\\\"},c:[{cN:\\\"variable\\\",v:[{b:/\\\\$[\\\\w\\\\d#@][\\\\w\\\\d_]*/},{b:/\\\\$\\\\{(.*?)}/}]},{cN:\\\"string\\\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,relevance:10},{b:/(u|b)?r?\\\"\\\"\\\"/,e:/\\\"\\\"\\\"/,relevance:10},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)\\\"/,e:/\\\"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\\\"/,e:/\\\"/},e.ASM,e.QSM]},e.RM,e.HCM,e.NM]}});hljs.registerLanguage(\\\"java\\\",function(e){var a=\\\"false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do\\\",t={cN:\\\"number\\\",b:\\\"\\\\\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\\\\\d]+[\\\\\\\\d_]+[\\\\\\\\d]+|[\\\\\\\\d]+)(\\\\\\\\.([\\\\\\\\d]+[\\\\\\\\d_]+[\\\\\\\\d]+|[\\\\\\\\d]+))?|\\\\\\\\.([\\\\\\\\d]+[\\\\\\\\d_]+[\\\\\\\\d]+|[\\\\\\\\d]+))([eE][-+]?\\\\\\\\d+)?)[lLfF]?\\\",relevance:0};return{aliases:[\\\"jsp\\\"],k:a,i:/<\\\\/|#/,c:[e.C(\\\"/\\\\\\\\*\\\\\\\\*\\\",\\\"\\\\\\\\*/\\\",{relevance:0,c:[{b:/\\\\w+@/,relevance:0},{cN:\\\"doctag\\\",b:\\\"@[A-Za-z]+\\\"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:\\\"class\\\",bK:\\\"class interface\\\",e:/[{;=]/,eE:!0,k:\\\"class interface\\\",i:/[:\\\"\\\\[\\\\]]/,c:[{bK:\\\"extends implements\\\"},e.UTM]},{bK:\\\"new throw return else\\\",relevance:0},{cN:\\\"function\\\",b:\\\"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\\\\\\\s*,\\\\\\\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\\\\\\\s+)+\\\"+e.UIR+\\\"\\\\\\\\s*\\\\\\\\(\\\",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+\\\"\\\\\\\\s*\\\\\\\\(\\\",rB:!0,relevance:0,c:[e.UTM]},{cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,k:a,relevance:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:\\\"meta\\\",b:\\\"@[A-Za-z]+\\\"}]}});hljs.registerLanguage(\\\"cs\\\",function(e){var a={keyword:\\\"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield\\\",literal:\\\"null false true\\\"},i={cN:\\\"number\\\",v:[{b:\\\"\\\\\\\\b(0b[01']+)\\\"},{b:\\\"(-?)\\\\\\\\b([\\\\\\\\d']+(\\\\\\\\.[\\\\\\\\d']*)?|\\\\\\\\.[\\\\\\\\d']+)(u|U|l|L|ul|UL|f|F|b|B)\\\"},{b:\\\"(-?)(\\\\\\\\b0[xX][a-fA-F0-9']+|(\\\\\\\\b[\\\\\\\\d']+(\\\\\\\\.[\\\\\\\\d']*)?|\\\\\\\\.[\\\\\\\\d']+)([eE][-+]?[\\\\\\\\d']+)?)\\\"}],relevance:0},c={cN:\\\"string\\\",b:'@\\\"',e:'\\\"',c:[{b:'\\\"\\\"'}]},r=e.inherit(c,{i:/\\\\n/}),n={cN:\\\"subst\\\",b:\\\"{\\\",e:\\\"}\\\",k:a},t=e.inherit(n,{i:/\\\\n/}),s={cN:\\\"string\\\",b:/\\\\$\\\"/,e:'\\\"',i:/\\\\n/,c:[{b:\\\"{{\\\"},{b:\\\"}}\\\"},e.BE,t]},l={cN:\\\"string\\\",b:/\\\\$@\\\"/,e:'\\\"',c:[{b:\\\"{{\\\"},{b:\\\"}}\\\"},{b:'\\\"\\\"'},n]},b=e.inherit(l,{i:/\\\\n/,c:[{b:\\\"{{\\\"},{b:\\\"}}\\\"},{b:'\\\"\\\"'},t]});n.c=[l,s,c,e.ASM,e.QSM,i,e.CBCM],t.c=[b,s,r,e.ASM,e.QSM,i,e.inherit(e.CBCM,{i:/\\\\n/})];var o={v:[l,s,c,e.ASM,e.QSM]},d=e.IR+\\\"(<\\\"+e.IR+\\\"(\\\\\\\\s*,\\\\\\\\s*\\\"+e.IR+\\\")*>)?(\\\\\\\\[\\\\\\\\])?\\\";return{aliases:[\\\"csharp\\\",\\\"c#\\\"],k:a,i:/::/,c:[e.C(\\\"///\\\",\\\"$\\\",{rB:!0,c:[{cN:\\\"doctag\\\",v:[{b:\\\"///\\\",relevance:0},{b:\\\"\\\\x3c!--|--\\\\x3e\\\"},{b:\\\"</?\\\",e:\\\">\\\"}]}]}),e.CLCM,e.CBCM,{cN:\\\"meta\\\",b:\\\"#\\\",e:\\\"$\\\",k:{\\\"meta-keyword\\\":\\\"if else elif endif define undef warning error line region endregion pragma checksum\\\"}},o,i,{bK:\\\"class interface\\\",e:/[{;=]/,i:/[^\\\\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:\\\"namespace\\\",e:/[{;=]/,i:/[^\\\\s:]/,c:[e.inherit(e.TM,{b:\\\"[a-zA-Z](\\\\\\\\.?\\\\\\\\w)*\\\"}),e.CLCM,e.CBCM]},{cN:\\\"meta\\\",b:\\\"^\\\\\\\\s*\\\\\\\\[\\\",eB:!0,e:\\\"\\\\\\\\]\\\",eE:!0,c:[{cN:\\\"meta-string\\\",b:/\\\"/,e:/\\\"/}]},{bK:\\\"new return throw await else\\\",relevance:0},{cN:\\\"function\\\",b:\\\"(\\\"+d+\\\"\\\\\\\\s+)+\\\"+e.IR+\\\"\\\\\\\\s*\\\\\\\\(\\\",rB:!0,e:/\\\\s*[{;=]/,eE:!0,k:a,c:[{b:e.IR+\\\"\\\\\\\\s*\\\\\\\\(\\\",rB:!0,c:[e.TM],relevance:0},{cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,eB:!0,eE:!0,k:a,relevance:0,c:[o,i,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage(\\\"mathematica\\\",function(e){return{aliases:[\\\"mma\\\",\\\"wl\\\"],l:\\\"(\\\\\\\\$|\\\\\\\\b)\\\"+e.IR+\\\"\\\\\\\\b\\\",k:\\\"AASTriangle AbelianGroup Abort AbortKernels AbortProtect AbortScheduledTask Above Abs AbsArg AbsArgPlot Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AcceptanceThreshold AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Activate Active ActiveClassification ActiveClassificationObject ActiveItem ActivePrediction ActivePredictionObject ActiveStyle AcyclicGraphQ AddOnHelpPath AddSides AddTo AddToSearchIndex AddUsers AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AdministrativeDivisionData AffineHalfSpace AffineSpace AffineStateSpaceModel AffineTransform After AggregatedEntityClass AggregationLayer AircraftData AirportData AirPressureData AirTemperatureData AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowAdultContent AllowedCloudExtraParameters AllowedCloudParameterExtensions AllowedDimensions AllowedFrequencyRange AllowedHeads AllowGroupClose AllowIncomplete AllowInlineCells AllowKernelInitialization AllowLooseGrammar AllowReverseGroupClose AllowScriptLevelChange AllTrue Alphabet AlphabeticOrder AlphabeticSort AlphaChannel AlternateImage AlternatingFactorial AlternatingGroup AlternativeHypothesis Alternatives AltitudeMethod AmbientLight AmbiguityFunction AmbiguityList Analytic AnatomyData AnatomyForm AnatomyPlot3D AnatomySkinStyle AnatomyStyling AnchoredSearch And AndersonDarlingTest AngerJ AngleBisector AngleBracket AnglePath AnglePath3D AngleVector AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning AnimationRunTime AnimationTimeIndex Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotate Annotation AnnotationDelete AnnotationNames AnnotationRules AnnotationValue Annuity AnnuityDue Annulus AnomalyDetection AnomalyDetectorFunction Anonymous Antialiasing AntihermitianMatrixQ Antisymmetric AntisymmetricMatrixQ Antonyms AnyOrder AnySubset AnyTrue Apart ApartSquareFree APIFunction Appearance AppearanceElements AppearanceRules AppellF1 Append AppendCheck AppendLayer AppendTo ApplicationIdentificationKey Apply ApplySides ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcCurvature ARCHProcess ArcLength ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Area Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess Around AroundReplace ARProcess Array ArrayComponents ArrayDepth ArrayFilter ArrayFlatten ArrayMesh ArrayPad ArrayPlot ArrayQ ArrayResample ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads ASATriangle Ask AskAppend AskConfirm AskDisplay AskedQ AskedValue AskFunction AskState AskTemplateDisplay AspectRatio AspectRatioFixed Assert AssociateTo Association AssociationFormat AssociationMap AssociationQ AssociationThread AssumeDeterministic Assuming Assumptions AstronomicalData AsymptoticDSolveValue AsymptoticEqual AsymptoticEquivalent AsymptoticGreater AsymptoticGreaterEqual AsymptoticIntegrate AsymptoticLess AsymptoticLessEqual AsymptoticOutputTracker AsymptoticRSolveValue AsymptoticSolve AsymptoticSum Asynchronous AsynchronousTaskObject AsynchronousTasks Atom AtomCoordinates AtomCount AtomDiagramCoordinates AtomList AtomQ AttentionLayer Attributes Audio AudioAmplify AudioAnnotate AudioAnnotationLookup AudioBlockMap AudioCapture AudioChannelAssignment AudioChannelCombine AudioChannelMix AudioChannels AudioChannelSeparate AudioData AudioDelay AudioDelete AudioDevice AudioDistance AudioFade AudioFrequencyShift AudioGenerator AudioIdentify AudioInputDevice AudioInsert AudioIntervals AudioJoin AudioLabel AudioLength AudioLocalMeasurements AudioLooping AudioLoudness AudioMeasurements AudioNormalize AudioOutputDevice AudioOverlay AudioPad AudioPan AudioPartition AudioPause AudioPitchShift AudioPlay AudioPlot AudioQ AudioRecord AudioReplace AudioResample AudioReverb AudioSampleRate AudioSpectralMap AudioSpectralTransformation AudioSplit AudioStop AudioStream AudioStreams AudioTimeStretch AudioTrim AudioType AugmentedPolyhedron AugmentedSymmetricPolynomial Authenticate Authentication AuthenticationDialog AutoAction Autocomplete AutocompletionFunction AutoCopy AutocorrelationTest AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutoQuoteCharacters AutoRefreshed AutoRemove AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords AutoSubmitting Axes AxesEdge AxesLabel AxesOrigin AxesStyle AxiomaticTheory AxisBabyMonsterGroupB Back Background BackgroundAppearance BackgroundTasksSettings Backslash Backsubstitution Backward Ball Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarcodeImage BarcodeRecognize BaringhausHenzeTest BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseDecode BaseEncode BaseForm Baseline BaselinePosition BaseStyle BasicRecurrentLayer BatchNormalizationLayer BatchSize BatesDistribution BattleLemarieWavelet BayesianMaximization BayesianMaximizationObject BayesianMinimization BayesianMinimizationObject Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized Between BetweennessCentrality BeveledPolyhedron BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryDeserialize BinaryDistance BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinarySerialize BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BiquadraticFilterModel BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor BiweightLocation BiweightMidvariance Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockchainAddressData BlockchainBase BlockchainBlockData BlockchainContractValue BlockchainData BlockchainGet BlockchainKeyEncode BlockchainPut BlockchainTokenData BlockchainTransaction BlockchainTransactionData BlockchainTransactionSign BlockchainTransactionSubmit BlockMap BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bond BondCount BondList BondQ Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms BooleanQ BooleanRegion Booleans BooleanStrings BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryDiscretizeGraphics BoundaryDiscretizeRegion BoundaryMesh BoundaryMeshRegion BoundaryMeshRegionQ BoundaryStyle BoundedRegionQ BoundingRegion Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxObject BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break BridgeData BrightnessEqualize BroadcastStationData Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurve3DBoxOptions BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BSplineSurface3DBoxOptions BubbleChart BubbleChart3D BubbleScale BubbleSizes BuildingData BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteArray ByteArrayFormat ByteArrayQ ByteArrayToString ByteCount ByteOrderingC CachedValue CacheGraphics CachePersistence CalendarConvert CalendarData CalendarType Callout CalloutMarker CalloutStyle CallPacket CanberraDistance Cancel CancelButton CandlestickChart CanonicalGraph CanonicalizePolygon CanonicalizePolyhedron CanonicalName CanonicalWarpingCorrespondence CanonicalWarpingDistance CantorMesh CantorStaircase Cap CapForm CapitalDifferentialD Capitalize CapsuleShape CaptureRunning CardinalBSplineBasis CarlemanLinearize CarmichaelLambda CaseOrdering Cases CaseSensitive Cashflow Casoratian Catalan CatalanNumber Catch Catenate CatenateLayer CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling CelestialSystem Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEvaluationLanguage CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellLabelStyle CellLabelTemplate CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterArray CenterDot CentralFeature CentralMoment CentralMomentGeneratingFunction Cepstrogram CepstrogramArray CepstrumArray CForm ChampernowneNumber ChangeOptions ChannelBase ChannelBrokerAction ChannelDatabin ChannelHistoryLength ChannelListen ChannelListener ChannelListeners ChannelListenerWait ChannelObject ChannelPreSendFunction ChannelReceiverFunction ChannelSend ChannelSubscribers ChanVeseBinarize Character CharacterCounts CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterName CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop ChromaticityPlot ChromaticityPlot3D ChromaticPolynomial Circle CircleBox CircleDot CircleMinus CirclePlus CirclePoints CircleThrough CircleTimes CirculantGraph CircularOrthogonalMatrixDistribution CircularQuaternionMatrixDistribution CircularRealMatrixDistribution CircularSymplecticMatrixDistribution CircularUnitaryMatrixDistribution Circumsphere CityData ClassifierFunction ClassifierInformation ClassifierMeasurements ClassifierMeasurementsObject Classify ClassPriors Clear ClearAll ClearAttributes ClearCookies ClearPermissions ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipPlanesStyle ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent CloudAccountData CloudBase CloudConnect CloudDeploy CloudDirectory CloudDisconnect CloudEvaluate CloudExport CloudExpression CloudExpressions CloudFunction CloudGet CloudImport CloudLoggingData CloudObject CloudObjectInformation CloudObjectInformationData CloudObjectNameFormat CloudObjects CloudObjectURLType CloudPublish CloudPut CloudRenderingMethod CloudSave CloudShare CloudSubmit CloudSymbol CloudUnshare ClusterClassify ClusterDissimilarityFunction ClusteringComponents ClusteringTree CMYKColor Coarse CodeAssistOptions Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorBalance ColorCombine ColorConvert ColorCoverage ColorData ColorDataFunction ColorDetect ColorDistance ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQ ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorsNear ColorSpace ColorToneMapping Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CombinedEntityClass CombinerFunction CometData CommonDefaultFormatTypes Commonest CommonestFilter CommonName CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompanyData CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledCodeFunction CompiledFunction CompilerOptions Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComplexListPlot ComplexPlot ComplexPlot3D ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries CompositeQ Composition CompoundElement CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData ComputeUncertainty Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath ConformAudio ConformImages Congruent ConicHullRegion ConicHullRegion3DBox ConicHullRegionBox ConicOptimization Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphComponents ConnectedGraphQ ConnectedMeshComponents ConnectedMoleculeComponents ConnectedMoleculeQ ConnectionSettings ConnectLibraryCallbackFunction ConnectSystemModelComponents ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray ConstantArrayLayer ConstantImage ConstantPlusLayer ConstantRegionQ Constants ConstantTimesLayer ConstellationData ConstrainedMax ConstrainedMin Construct Containing ContainsAll ContainsAny ContainsExactly ContainsNone ContainsOnly ContentFieldOptions ContentLocationFunction ContentObject ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTask ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean ContrastiveLossLayer Control ControlActive ControlAlignment ControlGroupContentsBox ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket ConvexHullMesh ConvexPolygonQ ConvexPolyhedronQ ConvolutionLayer Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CookieFunction Cookies CoordinateBoundingBox CoordinateBoundingBoxArray CoordinateBounds CoordinateBoundsArray CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDatabin CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CountDistinct CountDistinctBy CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Counts CountsBy Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateCellID CreateChannel CreateCloudExpression CreateDatabin CreateDataSystemModel CreateDialog CreateDirectory CreateDocument CreateFile CreateIntermediateDirectories CreateManagedLibraryExpression CreateNotebook CreatePalette CreatePalettePacket CreatePermissionsGroup CreateScheduledTask CreateSearchIndex CreateSystemModel CreateTemporary CreateUUID CreateWindow CriterionFunction CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossEntropyLossLayer CrossingCount CrossingDetect CrossingPolygon CrossMatrix Csc Csch CTCLossLayer Cube CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrencyConvert CurrentDate CurrentImage CurrentlySpeakingPacket CurrentNotebookImage CurrentScreenImage CurrentValue Curry CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecompositionD DagumDistribution DamData DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DatabaseConnect DatabaseDisconnect DatabaseReference Databin DatabinAdd DatabinRemove Databins DatabinUpload DataCompression DataDistribution DataRange DataReversed Dataset Date DateBounds Dated DateDelimiters DateDifference DatedUnit DateFormat DateFunction DateHistogram DateList DateListLogPlot DateListPlot DateListStepPlot DateObject DateObjectQ DateOverlapsQ DatePattern DatePlus DateRange DateReduction DateString DateTicksFormat DateValue DateWithinQ DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayHemisphere DaylightQ DayMatchQ DayName DayNightTerminator DayPlus DayRange DayRound DeBruijnGraph DeBruijnSequence Debug DebugTag Decapitalize Decimal DecimalForm DeclareKnownSymbols DeclarePackage Decompose DeconvolutionLayer Decrement Decrypt DecryptFile DedekindEta DeepSpaceProbeData Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultPrintPrecision DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValue DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod DefineResourceFunction Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic DEigensystem DEigenvalues Deinitialization Del DelaunayMesh Delayed Deletable Delete DeleteAnomalies DeleteBorderComponents DeleteCases DeleteChannel DeleteCloudExpression DeleteContents DeleteDirectory DeleteDuplicates DeleteDuplicatesBy DeleteFile DeleteMissing DeleteObject DeletePermissionsKey DeleteSearchIndex DeleteSmallComponents DeleteStopwords DeleteWithContents DeletionWarning DelimitedArray DelimitedSequence Delimiter DelimiterFlashTime DelimiterMatching Delimiters DeliveryFunction Dendrogram Denominator DensityGraphics DensityHistogram DensityPlot DensityPlot3D DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DerivedKey DescriptorStateSpace DesignMatrix DestroyAfterEvaluation Det DeviceClose DeviceConfigure DeviceExecute DeviceExecuteAsynchronous DeviceObject DeviceOpen DeviceOpenQ DeviceRead DeviceReadBuffer DeviceReadLatest DeviceReadList DeviceReadTimeSeries Devices DeviceStreams DeviceWrite DeviceWriteBuffer DGaussianWavelet DiacriticalPositioning Diagonal DiagonalizableMatrixQ DiagonalMatrix DiagonalMatrixQ Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DictionaryWordQ DifferenceDelta DifferenceOrder DifferenceQuotient DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitalSignature DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralAngle DihedralGroup Dilation DimensionalCombinations DimensionalMeshComponents DimensionReduce DimensionReducerFunction DimensionReduction Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletBeta DirichletCharacter DirichletCondition DirichletConvolve DirichletDistribution DirichletEta DirichletL DirichletLambda DirichletTransform DirichletWindow DisableConsolePrintPacket DisableFormatting DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLimit DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscreteMaxLimit DiscreteMinLimit DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform DiscretizeGraphics DiscretizeRegion Discriminant DisjointQ Disjunction Disk DiskBox DiskMatrix DiskSegment Dispatch DispatchQ DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceMatrix DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers DivideSides Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentGenerator DocumentGeneratorInformation DocumentGeneratorInformationData DocumentGenerators DocumentNotebook DocumentWeightingRules Dodecahedron DomainRegistrationInformation DominantColors DOSTextFormat Dot DotDashed DotEqual DotLayer DotPlusLayer Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DropoutLayer DSolve DSolveValue Dt DualLinearProgramming DualPolyhedron DualSystemsModel DumpGet DumpSave DuplicateFreeQ Duration Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicGeoGraphics DynamicImage DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptionsE EarthImpactData EarthquakeData EccentricityCentrality Echo EchoFunction EclipseType EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeContract EdgeCost EdgeCount EdgeCoverQ EdgeCycleMatrix EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight EdgeWeightedGraphQ Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData ElementwiseLayer ElidedForms Eliminate EliminationOrder Ellipsoid EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmbedCode EmbeddedHTML EmbeddedService EmbeddingLayer EmbeddingObject EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EmptyRegion EnableConsolePrintPacket Enabled Encode Encrypt EncryptedObject EncryptFile End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfBuffer EndOfFile EndOfLine EndOfString EndPackage EngineEnvironment EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entity EntityClass EntityClassList EntityCopies EntityFunction EntityGroup EntityInstance EntityList EntityPrefetch EntityProperties EntityProperty EntityPropertyClass EntityRegister EntityStore EntityStores EntityTypeName EntityUnregister EntityValue Entropy EntropyFilter Environment Epilog EpilogFunction Equal EqualColumns EqualRows EqualTilde EqualTo EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EscapeRadius EstimatedBackground EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerAngles EulerCharacteristic EulerE EulerGamma EulerianGraphQ EulerMatrix EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluateScheduledTask EvaluationBox EvaluationCell EvaluationCompletionAction EvaluationData EvaluationElements EvaluationEnvironment EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels EventSeries ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludedLines ExcludedPhysicalQuantities ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog ExoplanetData Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi ExpirationDate Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportByteArray ExportForm ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpressionUUID ExpToTrig ExtendedEntityClass ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalBundle ExternalCall ExternalDataCharacterEncoding ExternalEvaluate ExternalFunction ExternalFunctionName ExternalObject ExternalOptions ExternalSessionObject ExternalSessions ExternalTypeSignature ExternalValue Extract ExtractArchive ExtractLayer ExtremeValueDistributionFaceForm FaceGrids FaceGridsStyle FacialFeatures Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail Failure FailureAction FailureDistribution FailureQ False FareySequence FARIMAProcess FeatureDistance FeatureExtract FeatureExtraction FeatureExtractor FeatureExtractorFunction FeatureNames FeatureNearest FeatureSpacePlot FeatureSpacePlot3D FeatureTypes FEDisableConsolePrintPacket FeedbackLinearize FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket FetalGrowthData Fibonacci Fibonorial FieldCompletionFunction FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileConvert FileDate FileExistsQ FileExtension FileFormat FileHandler FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameForms FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileSize FileSystemMap FileSystemScan FileTemplate FileTemplateApply FileType FilledCurve FilledCurveBox FilledCurveBoxOptions Filling FillingStyle FillingTransform FilteredEntityClass FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindAnomalies FindArgMax FindArgMin FindChannels FindClique FindClusters FindCookies FindCurvePath FindCycle FindDevices FindDistribution FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEdgeIndependentPaths FindEquationalProof FindEulerianCycle FindExternalEvaluators FindFaces FindFile FindFit FindFormula FindFundamentalCycles FindGeneratingFunction FindGeoLocation FindGeometricConjectures FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindHamiltonianPath FindHiddenMarkovStates FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMatchingColor FindMaximum FindMaximumFlow FindMaxValue FindMeshDefects FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindMoleculeSubstructure FindPath FindPeaks FindPermutation FindPostmanTour FindProcessParameters FindRepeat FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindSpanningTree FindSystemModelEquilibrium FindTextualAnswer FindThreshold FindTransientRepeat FindVertexCover FindVertexCut FindVertexIndependentPaths Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstCase FirstPassageTimeDistribution FirstPosition FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FitRegularization FittedModel FixedOrder FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlattenLayer FlatTopWindow FlipView Floor FlowPolynomial FlushPrintOutputPacket Fold FoldList FoldPair FoldPairList FollowRedirects Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FormControl FormFunction FormLayoutFunction FormObject FormPage FormTheme FormulaData FormulaLookup FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalGaussianNoiseProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameRate FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrenetSerretSystem FrequencySamplingFilterKernel FresnelC FresnelF FresnelG FresnelS Friday FrobeniusNumber FrobeniusSolve FromAbsoluteTime FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS FromEntity FromJulianDate FromLetterNumber FromPolarCoordinates FromRomanNumeral FromSphericalCoordinates FromUnixTime Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullInformationOutputRegulator FullOptions FullRegion FullSimplify Function FunctionCompile FunctionCompileExport FunctionCompileExportByteArray FunctionCompileExportLibrary FunctionCompileExportString FunctionDomain FunctionExpand FunctionInterpolation FunctionPeriod FunctionRange FunctionSpace FussellVeselyImportanceGaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins GalaxyData GalleryView Gamma GammaDistribution GammaRegularized GapPenalty GARCHProcess GatedRecurrentLayer Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianOrthogonalMatrixDistribution GaussianSymplecticMatrixDistribution GaussianUnitaryMatrixDistribution GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateAsymmetricKeyPair GenerateConditions GeneratedCell GeneratedDocumentBinding GenerateDerivedKey GenerateDigitalSignature GenerateDocument GeneratedParameters GeneratedQuantityMagnitudes GenerateHTTPResponse GenerateSecuredAuthenticationKey GenerateSymmetricKey GeneratingFunction GeneratorDescription GeneratorHistoryLength GeneratorOutputType Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeoAntipode GeoArea GeoArraySize GeoBackground GeoBoundingBox GeoBounds GeoBoundsRegion GeoBubbleChart GeoCenter GeoCircle GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDisk GeoDisplacement GeoDistance GeoDistanceList GeoElevationData GeoEntities GeoGraphics GeogravityModelData GeoGridDirectionDifference GeoGridLines GeoGridLinesStyle GeoGridPosition GeoGridRange GeoGridRangePadding GeoGridUnitArea GeoGridUnitDistance GeoGridVector GeoGroup GeoHemisphere GeoHemisphereBoundary GeoHistogram GeoIdentify GeoImage GeoLabels GeoLength GeoListPlot GeoLocation GeologicalPeriodData GeomagneticModelData GeoMarker GeometricAssertion GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricScene GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoModel GeoNearest GeoPath GeoPosition GeoPositionENU GeoPositionXYZ GeoProjection GeoProjectionData GeoRange GeoRangePadding GeoRegionValuePlot GeoResolution GeoScaleBar GeoServer GeoSmoothHistogram GeoStreamPlot GeoStyling GeoStylingImageFunction GeoVariant GeoVector GeoVectorENU GeoVectorPlot GeoVectorXYZ GeoVisibleRegion GeoVisibleRegionBoundary GeoWithinQ GeoZoomLevel GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenAngle GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter GrammarApply GrammarRules GrammarToken Graph Graph3D GraphAssortativity GraphAutomorphismGroup GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel Greater GreaterEqual GreaterEqualLess GreaterEqualThan GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterThan GreaterTilde Green GreenFunction Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupBy GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators Groupings GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain GroupTogetherGrouping GroupTogetherNestedGrouping GrowCutComponents Gudermannian GuidedFilter GumbelDistributionHaarWavelet HadamardMatrix HalfLine HalfNormalDistribution HalfPlane HalfSpace HamiltonianGraphQ HammingDistance HammingWindow HandlerFunctions HandlerFunctionsKeys HankelH1 HankelH2 HankelMatrix HankelTransform HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash Haversine HazardFunction Head HeadCompose HeaderLines Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings Here HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenMarkovProcess HiddenSurface Highlighted HighlightGraph HighlightImage HighlightMesh HighpassFilter HigmanSimsGroupHS HilbertCurve HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HistoricalPeriodData HitMissTransform HITSCentrality HjorthDistribution HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HostLookup HotellingTSquareDistribution HoytDistribution HTMLSave HTTPErrorResponse HTTPRedirect HTTPRequest HTTPRequestData HTTPResponse Hue HumanGrowthData HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyperplane Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestDataI IconData Iconize IconizedObject IconRules Icosahedron Identity IdentityMatrix If IgnoreCase IgnoreDiacritics IgnorePunctuation IgnoreSpellCheck IgnoringInactive Im Image Image3D Image3DProjection Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageApplyIndexed ImageAspectRatio ImageAssemble ImageAugmentationLayer ImageBoundingBoxes ImageCache ImageCacheValid ImageCapture ImageCaptureFunction ImageCases ImageChannels ImageClip ImageCollage ImageColorSpace ImageCompose ImageContainsQ ImageContents ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDisplacements ImageDistance ImageEffect ImageExposureCombine ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageFocusCombine ImageForestingComponents ImageFormattingWidth ImageForwardTransformation ImageGraphics ImageHistogram ImageIdentify ImageInstanceQ ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarker ImageMarkers ImageMeasurements ImageMesh ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImagePosition ImagePreviewFunction ImagePyramid ImagePyramidApply ImageQ ImageRangeCache ImageRecolor ImageReflect ImageRegion ImageResize ImageResolution ImageRestyle ImageRotate ImageRotated ImageSaliencyFilter ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions ImagingDevice ImplicitRegion Implies Import ImportAutoReplacements ImportByteArray ImportOptions ImportString ImprovementImportance In Inactivate Inactive IncidenceGraph IncidenceList IncidenceMatrix IncludeAromaticBonds IncludeConstantBasis IncludeDefinitions IncludeDirectories IncludeFileExtension IncludeGeneratorTasks IncludeHydrogens IncludeInflections IncludeMetaInformation IncludePods IncludeQuantities IncludeRelatedTables IncludeSingularTerm IncludeWindowTimes Increment IndefiniteMatrixQ Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentPhysicalQuantity IndependentUnit IndependentUnitDimension IndependentVertexSetQ Indeterminate IndeterminateThreshold IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers InfiniteLine InfinitePlane Infinity Infix InflationAdjust InflationMethod Information InformationData InformationDataGrid Inherited InheritScope InhomogeneousPoissonProcess InitialEvaluationHistory Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InitializationObjects InitializationValue Initialize InitialSeeding InlineCounterAssignments InlineCounterIncrements InlineRules Inner InnerPolygon InnerPolyhedron Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionFunction InsertionPointObject InsertLinebreaks InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Insphere Install InstallService InstanceNormalizationLayer InString Integer IntegerDigits IntegerExponent IntegerLength IntegerName IntegerPart IntegerPartitions IntegerQ IntegerReverse Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction Interpreter InterpretTemplate InterquartileRange Interrupt InterruptSettings IntersectingQ Intersection Interval IntervalIntersection IntervalMarkers IntervalMarkersStyle IntervalMemberQ IntervalSlider IntervalUnion Into Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHankelTransform InverseHaversine InverseImagePyramid InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InverseMellinTransform InversePermutation InverseRadon InverseRadonTransform InverseSeries InverseShortTimeFourier InverseSpectrogram InverseSurvivalFunction InverseTransformedRegion InverseWaveletTransform InverseWeierstrassP InverseWishartMatrixDistribution InverseZTransform Invisible InvisibleApplication InvisibleTimes IPAddress IrreduciblePolynomialQ IslandData IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemAspectRatio ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcessJaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join JoinAcross Joined JoinedCurve JoinedCurveBox JoinedCurveBoxOptions JoinForm JordanDecomposition JordanModelDecomposition JulianDate JuliaSetBoettcher JuliaSetIterationCount JuliaSetPlot JuliaSetPointsK KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KEdgeConnectedComponents KEdgeConnectedGraphQ KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelFunction KernelMixtureDistribution Kernels Ket Key KeyCollisionFunction KeyComplement KeyDrop KeyDropFrom KeyExistsQ KeyFreeQ KeyIntersection KeyMap KeyMemberQ KeypointStrength Keys KeySelect KeySort KeySortBy KeyTake KeyUnion KeyValueMap KeyValuePattern Khinchin KillProcess KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnapsackSolve KnightTourGraph KnotData KnownUnitQ KochCurve KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter KVertexConnectedComponents KVertexConnectedGraphQLABColor Label Labeled LabeledSlider LabelingFunction LabelingSize LabelStyle LabelVisibility LaguerreL LakeData LambdaComponents LambertW LaminaData LanczosWindow LandauDistribution Language LanguageCategory LanguageData LanguageIdentify LanguageOptions LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCHColor LCM LeaderSize LeafCount LeapYearQ LearnDistribution LearnedDistribution LearningRate LearningRateMultipliers LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessEqualThan LessFullEqual LessGreater LessLess LessSlantEqual LessThan LessTilde LetterCharacter LetterCounts LetterNumber LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryDataType LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox Line3DBoxOptions LinearFilter LinearFractionalOptimization LinearFractionalTransform LinearGradientImage LinearizingTransformationData LinearLayer LinearModelFit LinearOffsetFunction LinearOptimization LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBoxOptions LineBreak LinebreakAdjustments LineBreakChart LinebreakSemicolonWeighting LineBreakWithin LineColor LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRankCentrality LinkRead LinkReadHeld LinkReadyQ Links LinkService LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot ListDensityPlot3D Listen ListFormat ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListSliceContourPlot3D ListSliceDensityPlot3D ListSliceVectorPlot3D ListStepPlot ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalAdaptiveBinarize LocalCache LocalClusteringCoefficient LocalizeDefinitions LocalizeVariables LocalObject LocalObjects LocalResponseNormalizationLayer LocalSubmit LocalSymbol LocalTime LocalTimeZone LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogisticSigmoid LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongestOrderedSequence LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow LongShortTermMemoryLayer Lookup Loopback LoopFreeGraphQ LossFunction LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowerTriangularMatrixQ LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LunarEclipse LUVColor LyapunovSolve LyonsGroupLyMachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MailAddressValidation MailExecute MailFolder MailItem MailReceiverFunction MailResponseFunction MailSearch MailServerConnect MailServerConnection MailSettings MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules ManagedLibraryExpressionID ManagedLibraryExpressionQ MandelbrotSetBoettcher MandelbrotSetDistance MandelbrotSetIterationCount MandelbrotSetMemberQ MandelbrotSetPlot MangoldtLambda ManhattanDistance Manipulate Manipulator MannedSpaceMissionData MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarchenkoPasturDistribution MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicalFunctionData MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixNormalDistribution MatrixPlot MatrixPower MatrixPropertyDistribution MatrixQ MatrixRank MatrixTDistribution Max MaxBend MaxCellMeasure MaxColorDistance MaxDetect MaxDuration MaxExtraBandwidths MaxExtraConditions MaxFeatureDisplacement MaxFeatures MaxFilter MaximalBy Maximize MaxItems MaxIterations MaxLimit MaxMemoryUsed MaxMixtureKernels MaxOverlapFraction MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxTrainingRounds MaxValue MaxwellDistribution MaxWordGap McLaughlinGroupMcL Mean MeanAbsoluteLossLayer MeanAround MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter MeanSquaredLossLayer Median MedianDeviation MedianFilter MedicalTestData Medium MeijerG MeijerGReduce MeixnerDistribution MellinConvolve MellinTransform MemberQ MemoryAvailable MemoryConstrained MemoryConstraint MemoryInUse MengerMesh Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuList MenuPacket MenuSortingValue MenuStyle MenuView Merge MergeDifferences MergingFunction MersennePrimeExponent MersennePrimeExponentQ Mesh MeshCellCentroid MeshCellCount MeshCellHighlight MeshCellIndex MeshCellLabel MeshCellMarker MeshCellMeasure MeshCellQuality MeshCells MeshCellShapeFunction MeshCellStyle MeshCoordinates MeshFunctions MeshPrimitives MeshQualityGoal MeshRange MeshRefinementFunction MeshRegion MeshRegionQ MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageObject MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation MeteorShowerData Method MethodOptions MexicanHatWavelet MeyerWavelet Midpoint Min MinColorDistance MinDetect MineralData MinFilter MinimalBy MinimalPolynomial MinimalStateSpaceModel Minimize MinimumTimeIncrement MinIntervalSize MinkowskiQuestionMark MinLimit MinMax MinorPlanetData Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingBehavior MissingDataMethod MissingDataRules MissingQ MissingString MissingStyle MissingValuePattern MittagLefflerE MixedFractionParts MixedGraphQ MixedMagnitude MixedRadix MixedRadixQuantity MixedUnit MixtureDistribution Mod Modal Mode Modular ModularInverse ModularLambda Module Modulus MoebiusMu Molecule MoleculeContainsQ MoleculeEquivalentQ MoleculeGraph MoleculeModify MoleculePattern MoleculePlot MoleculePlot3D MoleculeProperty MoleculeQ MoleculeValue Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction MomentOfInertia Monday Monitor MonomialList MonomialOrder MonsterGroupM MoonPhase MoonPosition MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform MortalityData Most MountainData MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovieData MovingAverage MovingMap MovingMedian MoyalDistribution Multicolumn MultiedgeStyle MultigraphQ MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity MultiplySides Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistributionN NakagamiDistribution NameQ Names NamespaceBox NamespaceBoxOptions Nand NArgMax NArgMin NBernoulliB NBodySimulation NBodySimulationData NCache NDEigensystem NDEigenvalues NDSolve NDSolveValue Nearest NearestFunction NearestNeighborGraph NearestTo NebulaData NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeDefiniteMatrixQ NegativeIntegers NegativeMultinomialDistribution NegativeRationals NegativeReals NegativeSemidefiniteMatrixQ NeighborhoodData NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestGraph NestList NestWhile NestWhileList NetAppend NetBidirectionalOperator NetChain NetDecoder NetDelete NetDrop NetEncoder NetEvaluationMode NetExtract NetFlatten NetFoldOperator NetGraph NetInformation NetInitialize NetInsert NetInsertSharedArrays NetJoin NetMapOperator NetMapThreadOperator NetMeasurements NetModel NetNestOperator NetPairEmbeddingOperator NetPort NetPortGradient NetPrepend NetRename NetReplace NetReplacePart NetSharedArray NetStateObject NetTake NetTrain NetTrainResultsObject NetworkPacketCapture NetworkPacketRecording NetworkPacketRecordingDuring NetworkPacketTrace NeumannValue NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextCell NextDate NextPrime NextScheduledTaskTime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NightHemisphere NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants NondimensionalizationTransform None NoneTrue NonlinearModelFit NonlinearStateSpaceModel NonlocalMeansFilter NonNegative NonNegativeIntegers NonNegativeRationals NonNegativeReals NonPositive NonPositiveIntegers NonPositiveRationals NonPositiveReals Nor NorlundB Norm Normal NormalDistribution NormalGrouping NormalizationLayer Normalize Normalized NormalizedSquaredEuclideanDistance NormalMatrixQ NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookImport NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookTemplate NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde Nothing NotHumpDownHump NotHumpEqual NotificationFunction NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar Now NoWhitespace NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms NuclearExplosionData NuclearReactorData Null NullRecords NullSpace NullWords Number NumberCompose NumberDecompose NumberExpand NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberLinePlot NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumeratorDenominator NumericalOrder NumericalSort NumericArray NumericArrayQ NumericArrayType NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlotO ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OceanData Octahedron OddQ Off Offset OLEData On ONanGroupON Once OneIdentity Opacity OpacityFunction OpacityFunctionScaling Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionalElement OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering OrderingBy OrderingLayer Orderless OrderlessPatternSequence OrnsteinUhlenbeckProcess Orthogonalize OrthogonalMatrixQ Out Outer OuterPolygon OuterPolyhedron OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OverwriteTarget OwenT OwnValuesPackage PackingMethod PaddedForm Padding PaddingLayer PaddingSize PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageTheme PageWidth Pagination PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath PalindromeQ Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo Parallelepiped ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds Parallelogram ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParametricRegion ParentBox ParentCell ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParentNotebook ParetoDistribution ParetoPickandsDistribution ParkData Part PartBehavior PartialCorrelationFunction PartialD ParticleAcceleratorData ParticleData Partition PartitionGranularity PartitionsP PartitionsQ PartLayer PartOfSpeech PartProtection ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteAutoQuoteCharacters PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PeakDetect PeanoCurve PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PercentForm PerfectNumber PerfectNumberQ PerformanceGoal Perimeter PeriodicBoundaryCondition PeriodicInterpolation Periodogram PeriodogramArray Permanent Permissions PermissionsGroup PermissionsGroupMemberQ PermissionsGroups PermissionsKey PermissionsKeys PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PerpendicularBisector PersistenceLocation PersistenceTime PersistentObject PersistentObjects PersistentValue PersonData PERTDistribution PetersenGraph PhaseMargins PhaseRange PhysicalSystemData Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest PingTime Pink PitchRecognize Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarAngle PlanarGraph PlanarGraphQ PlanckRadiationLaw PlaneCurveData PlanetaryMoonData PlanetData PlantData Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLabels PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangeClipPlanesStyle PlotRangePadding PlotRegion PlotStyle PlotTheme Pluralize Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox Point3DBoxOptions PointBox PointBoxOptions PointFigureChart PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonalNumber PolygonAngle PolygonBox PolygonBoxOptions PolygonCoordinates PolygonDecomposition PolygonHoleScale PolygonIntersections PolygonScale Polyhedron PolyhedronAngle PolyhedronCoordinates PolyhedronData PolyhedronDecomposition PolyhedronGenus PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PoolingLayer PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position PositionIndex Positive PositiveDefiniteMatrixQ PositiveIntegers PositiveRationals PositiveReals PositiveSemidefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerRange PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement Predict PredictionRoot PredictorFunction PredictorInformation PredictorMeasurements PredictorMeasurementsObject PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependLayer PrependTo PreprocessingRules PreserveColor PreserveImageOptions Previous PreviousCell PreviousDate PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitivePolynomialQ PrimitiveRoot PrimitiveRootList PrincipalComponents PrincipalValue Print PrintableASCIIQ PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment Printout3D Printout3DPreviewer PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateKey PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessConnection ProcessDirectory ProcessEnvironment Processes ProcessEstimator ProcessInformation ProcessObject ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessStatus ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm ProofObject Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse PsychrometricPropertyData PublicKey PublisherID PulsarData PunctuationCharacter Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptionsQBinomial QFactorial QGamma QHypergeometricPFQ QnDispersion QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ QuadraticOptimization Quantile QuantilePlot Quantity QuantityArray QuantityDistribution QuantityForm QuantityMagnitude QuantityQ QuantityUnit QuantityVariable QuantityVariableCanonicalUnit QuantityVariableDimensions QuantityVariableIdentifier QuantityVariablePhysicalQuantity Quartics QuartileDeviation Quartiles QuartileSkewness Query QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainderRadialGradientImage RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RadonTransform RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Ramp Random RandomChoice RandomColor RandomComplex RandomEntity RandomFunction RandomGeoPosition RandomGraph RandomImage RandomInstance RandomInteger RandomPermutation RandomPoint RandomPolygon RandomPolyhedron RandomPrime RandomReal RandomSample RandomSeed RandomSeeding RandomVariate RandomWalkProcess RandomWord Range RangeFilter RangeSpecification RankedMax RankedMin RarerProbability Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadByteArray ReadLine ReadList ReadProtected ReadString Real RealAbs RealBlockDiagonalForm RealDigits RealExponent Reals RealSign Reap RecognitionPrior RecognitionThreshold Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RectangularRepeatingElement RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate Region RegionBinarize RegionBoundary RegionBounds RegionCentroid RegionDifference RegionDimension RegionDisjoint RegionDistance RegionDistanceFunction RegionEmbeddingDimension RegionEqual RegionFunction RegionImage RegionIntersection RegionMeasure RegionMember RegionMemberFunction RegionMoment RegionNearest RegionNearestFunction RegionPlot RegionPlot3D RegionProduct RegionQ RegionResize RegionSize RegionSymmetricDifference RegionUnion RegionWithin RegisterExternalEvaluator RegularExpression Regularization RegularlySampledQ RegularPolygon ReIm ReImLabels ReImPlot ReImStyle Reinstall RelationalDatabase RelationGraph Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot RemoteAuthorizationCaching RemoteConnect RemoteConnectionObject RemoteFile RemoteRun RemoteRunProcess Remove RemoveAlphaChannel RemoveAsynchronousTask RemoveAudioStream RemoveBackground RemoveChannelListener RemoveChannelSubscribers Removed RemoveDiacritics RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RemoveUsers RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart RepairMesh Repeated RepeatedNull RepeatedString RepeatedTiming RepeatingElement Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated ReplicateLayer RequiredPhysicalQuantities Resampling ResamplingAlgorithmData ResamplingMethod Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask ReshapeLayer Residue ResizeLayer Resolve ResourceAcquire ResourceData ResourceFunction ResourceObject ResourceRegister ResourceRemove ResourceSearch ResourceSubmissionObject ResourceSubmit ResourceSystemBase ResourceUpdate ResponseForm Rest RestartInterval Restricted Resultant ResumePacket Return ReturnEntersInput ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnReceiptFunction ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseSort ReverseSortBy ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ RiemannXi Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightComposition RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity RollPitchYawAngles RollPitchYawMatrix RomanNumeral Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RSolveValue RudinShapiro RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulePlot RulerUnits Run RunProcess RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilaritySameQ SameTest SampledEntityClass SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SASTriangle SatelliteData SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveConnection SaveDefinitions SavitzkyGolayMatrix SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTask ScheduledTaskActiveQ ScheduledTaskInformation ScheduledTaskInformationData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScientificNotationThreshold ScorerGi ScorerGiPrime ScorerHi ScorerHiPrime ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptForm ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition SearchAdjustment SearchIndexObject SearchIndices SearchQueryString SearchResultObject Sec Sech SechDistribution SecondOrderConeOptimization SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SecuredAuthenticationKey SecuredAuthenticationKeys SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook SelectFirst Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemanticImport SemanticImportString SemanticInterpretation SemialgebraicComponentInstances SemidefiniteOptimization SendMail SendMessage Sequence SequenceAlignment SequenceAttentionLayer SequenceCases SequenceCount SequenceFold SequenceFoldList SequenceForm SequenceHold SequenceLastLayer SequenceMostLayer SequencePosition SequencePredict SequencePredictorFunction SequenceReplace SequenceRestLayer SequenceReverseLayer SequenceSplit Series SeriesCoefficient SeriesData ServiceConnect ServiceDisconnect ServiceExecute ServiceObject ServiceRequest ServiceResponse ServiceSubmit SessionSubmit SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetCloudDirectory SetCookies SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPermissions SetPrecision SetProperty SetSecuredAuthenticationKey SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemModel SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetUsers SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share SharingList Sharpen ShearingMatrix ShearingTransform ShellRegion ShenCastanMatrix ShiftedGompertzDistribution ShiftRegisterSequence Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortTimeFourier ShortTimeFourierData ShortUpArrow Show ShowAutoConvert ShowAutoSpellCheck ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowCodeAssist ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiderealTime SiegelTheta SiegelTukeyTest SierpinskiCurve SierpinskiMesh Sign Signature SignedRankTest SignedRegionDistance SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ SimplePolygonQ SimplePolyhedronQ Simplex Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution SkinStyle Skip SliceContourPlot3D SliceDensityPlot3D SliceDistribution SliceVectorPlot3D Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDecomposition SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SnDispersion Snippet SnubPolyhedron SocialMediaData Socket SocketConnect SocketListen SocketListener SocketObject SocketOpen SocketReadMessage SocketReadyQ Sockets SocketWaitAll SocketWaitNext SoftmaxLayer SokalSneathDissimilarity SolarEclipse SolarSystemFeatureData SolidAngle SolidData SolidRegionQ Solve SolveAlways SolveDelayed Sort SortBy SortedBy SortedEntityClass Sound SoundAndGraphics SoundNote SoundVolume SourceLink Sow Space SpaceCurveData SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution SpatialMedian SpatialTransformationLayer Speak SpeakTextPacket SpearmanRankTest SpearmanRho SpeciesData SpecificityGoal SpectralLineData Spectrogram SpectrogramArray Specularity SpeechRecognize SpeechSynthesize SpellingCorrection SpellingCorrectionList SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SpherePoints SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SphericalShell SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquareMatrixQ SquareRepeatingElement SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave SSSTriangle StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackedDateListPlot StackedListPlot StackInhibit StadiumShape StandardAtmosphereData StandardDeviation StandardDeviationFilter StandardForm Standardize Standardized StandardOceanData StandbyDistribution Star StarClusterData StarData StarGraph StartAsynchronousTask StartExternalSession StartingStepSize StartOfLine StartOfString StartProcess StartScheduledTask StartupSound StartWebSession StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StateTransformationLinearize StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StereochemistryElements StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StoppingPowerData StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamMarkers StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringContainsQ StringCount StringDelete StringDrop StringEndsQ StringExpression StringExtract StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPadLeft StringPadRight StringPart StringPartition StringPosition StringQ StringRepeat StringReplace StringReplaceList StringReplacePart StringReverse StringRiffle StringRotateLeft StringRotateRight StringSkeleton StringSplit StringStartsQ StringTake StringTemplate StringToByteArray StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleData StyleDefinitions StyleForm StyleHints StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subdivide Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subsequences Subset SubsetEqual SubsetMap SubsetQ Subsets SubStar SubstitutionSystem Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubtractSides SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde Success SuchThat Sum SumConvergence SummationLayer Sunday SunPosition Sunrise Sunset SuperDagger SuperMinus SupernovaData SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceArea SurfaceColor SurfaceData SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricKey SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Synonyms Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SynthesizeMissingValues SystemDialogInput SystemException SystemGet SystemHelpPath SystemInformation SystemInformationData SystemInstall SystemModel SystemModeler SystemModelExamples SystemModelLinearize SystemModelParametricSimulate SystemModelPlot SystemModelProgressReporting SystemModelReliability SystemModels SystemModelSimulate SystemModelSimulateSensitivity SystemModelSimulationData SystemOpen SystemOptions SystemProcessData SystemProcesses SystemsConnectionsModel SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelLinearity SystemsModelMerge SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemsModelVectorRelativeOrders SystemStub SystemTestTab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TableViewBoxBackground TableViewBoxOptions TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeDrop TakeLargest TakeLargestBy TakeList TakeSmallest TakeSmallestBy TakeWhile Tally Tan Tanh TargetDevice TargetFunctions TargetSystem TargetUnits TaskAbort TaskExecute TaskObject TaskRemove TaskResume Tasks TaskSuspend TaskWait TautologyQ TelegraphProcess TemplateApply TemplateArgBox TemplateBox TemplateBoxOptions TemplateEvaluate TemplateExpression TemplateIf TemplateObject TemplateSequence TemplateSlot TemplateSlotSequence TemplateUnevaluated TemplateVerbatim TemplateWith TemporalData TemporalRegularity Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge TestID TestReport TestReportObject TestResultObject Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCases TextCell TextClipboardType TextContents TextData TextElement TextForm TextGrid TextJustification TextLine TextPacket TextParagraph TextPosition TextRecognize TextSearch TextSearchReport TextSentences TextString TextStructure TextStyle TextTranslation Texture TextureCoordinateFunction TextureCoordinateScaling TextWords Therefore ThermodynamicData ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreadingLayer ThreeJSymbol Threshold Through Throw ThueMorse Thumbnail Thursday Ticks TicksStyle TideData Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint TimeDirection TimeFormat TimeGoal TimelinePlot TimeObject TimeObjectQ Times TimesBy TimeSeries TimeSeriesAggregate TimeSeriesForecast TimeSeriesInsert TimeSeriesInvertibility TimeSeriesMap TimeSeriesMapThread TimeSeriesModel TimeSeriesModelFit TimeSeriesResample TimeSeriesRescale TimeSeriesShift TimeSeriesThread TimeSeriesWindow TimeUsed TimeValue TimeWarpingCorrespondence TimeWarpingDistance TimeZone TimeZoneConvert TimeZoneOffset Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate Today ToDiscreteTimeModel ToEntity ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase Tomorrow ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform ToPolarCoordinates TopologicalSort ToRadicals ToRules ToSphericalCoordinates ToString Total TotalHeight TotalLayer TotalVariationFilter TotalWidth TouchPosition TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TrackingFunction TracyWidomDistribution TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TrainingProgressCheckpointing TrainingProgressFunction TrainingProgressMeasurements TrainingProgressReporting TrainingStoppingCriterion TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationClass TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField TransformedProcess TransformedRegion TransitionDirection TransitionDuration TransitionEffect TransitiveClosureGraph TransitiveReductionGraph Translate TranslationOptions TranslationTransform Transliterate Transparent TransparentColor Transpose TransposeLayer TrapSelection TravelDirections TravelDirectionsData TravelDistance TravelDistanceList TravelMethod TravelTime TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle Triangle TriangleCenter TriangleConstruct TriangleMeasurement TriangleWave TriangularDistribution TriangulateMesh Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean TrimmedVariance TropicalStormData True TrueQ TruncatedDistribution TruncatedPolyhedron TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBoxOptions TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow TunnelData Tuples TuranGraph TuringMachine TuttePolynomial TwoWayRule Typed TypeSpecifierUnateQ Uncompress UnconstrainedParameters Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UnderseaFeatureData UndirectedEdge UndirectedGraph UndirectedGraphQ UndoOptions UndoTrackedVariables Unequal UnequalTo Unevaluated UniformDistribution UniformGraphDistribution UniformPolyhedron UniformSumDistribution Uninstall Union UnionPlus Unique UnitaryMatrixQ UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitSystem UnitTriangle UnitVector UnitVectorLayer UnityDimensions UniverseModelData UniversityData UnixTime Unprotect UnregisterExternalEvaluator UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpdateSearchIndex UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize UpperTriangularMatrixQ Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpTo UpValues URL URLBuild URLDecode URLDispatcher URLDownload URLDownloadSubmit URLEncode URLExecute URLExpand URLFetch URLFetchAsynchronous URLParse URLQueryDecode URLQueryEncode URLRead URLResponseTime URLSave URLSaveAsynchronous URLShorten URLSubmit UseGraphicsRange UserDefinedWavelet Using UsingFrontEnd UtilityFunctionV2Get ValenceErrorHandling ValidationLength ValidationSet Value ValueBox ValueBoxOptions ValueDimensions ValueForm ValuePreprocessingFunction ValueQ Values ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorAround VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorGreater VectorGreaterEqual VectorLess VectorLessEqual VectorMarkers VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerificationTest VerifyConvergence VerifyDerivedKey VerifyDigitalSignature VerifyInterpretation VerifySecurityCertificates VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexContract VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight VertexWeightedGraphQ Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewProjection ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoiceStyleData VoigtDistribution VolcanoData Volume VonMisesDistribution VoronoiMeshWaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WarpingCorrespondence WarpingDistance WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeatherForecastData WebAudioSearch WebElementObject WeberE WebExecute WebImage WebImageSearch WebSearch WebSessionObject WebSessions WebWindowObject Wedge Wednesday WeibullDistribution WeierstrassE1 WeierstrassE2 WeierstrassE3 WeierstrassEta1 WeierstrassEta2 WeierstrassEta3 WeierstrassHalfPeriods WeierstrassHalfPeriodW1 WeierstrassHalfPeriodW2 WeierstrassHalfPeriodW3 WeierstrassInvariantG2 WeierstrassInvariantG3 WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White WhiteNoiseProcess WhitePoint Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WikipediaData WikipediaSearch WilksW WilksWTest WindDirectionData WindingCount WindingPolygon WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowPersistentStyles WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth WindSpeedData WindVectorData WinsorizedMean WinsorizedVariance WishartMatrixDistribution With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult WolframLanguageData Word WordBoundary WordCharacter WordCloud WordCount WordCounts WordData WordDefinition WordFrequency WordFrequencyData WordList WordOrientation WordSearch WordSelectionFunction WordSeparators WordSpacings WordStem WordTranslation WorkingPrecision WrapAround Write WriteLine WriteString WronskianXMLElement XMLObject XMLTemplate Xnor Xor XYZColorYellow Yesterday YuleDissimilarityZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZIPCodeData ZipfDistribution ZoomCenter ZoomFactor ZTest ZTransform$Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AllowExternalChannelFunctions $AssertFunction $Assumptions $AsynchronousTask $AudioInputDevices $AudioOutputDevices $BaseDirectory $BatchInput $BatchOutput $BlockchainBase $BoxForms $ByteOrdering $CacheBaseDirectory $Canceled $ChannelBase $CharacterEncoding $CharacterEncodings $CloudBase $CloudConnected $CloudCreditsAvailable $CloudEvaluation $CloudExpressionBase $CloudObjectNameFormat $CloudObjectURLType $CloudRootDirectory $CloudSymbolBase $CloudUserID $CloudUserUUID $CloudVersion $CloudVersionNumber $CloudWolframEngineVersionNumber $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $Cookies $CookieStore $CreationDate $CurrentLink $CurrentTask $CurrentWebSession $DateStringFormat $DefaultAudioInputDevice $DefaultAudioOutputDevice $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultLocalBase $DefaultMailbox $DefaultNetworkInterface $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $EmbedCodeEnvironments $EmbeddableServices $EntityStores $Epilog $EvaluationCloudBase $EvaluationCloudObject $EvaluationEnvironment $ExportFormats $Failed $FinancialDataSource $FontFamilies $FormatType $FrontEnd $FrontEndSession $GeoEntityTypes $GeoLocation $GeoLocationCity $GeoLocationCountry $GeoLocationPrecision $GeoLocationSource $HistoryLength $HomeDirectory $HTMLExportRules $HTTPCookies $HTTPRequest $IgnoreEOF $ImageFormattingWidth $ImagingDevice $ImagingDevices $ImportFormats $IncomingMailSettings $InitialDirectory $Initialization $InitializationContexts $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $InterpreterTypes $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $LocalBase $LocalSymbolBase $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $MobilePhone $ModuleNumber $NetworkConnected $NetworkInterfaces $NetworkLicense $NewMessage $NewSymbol $Notebooks $NoValue $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $Permissions $PermissionsGroupBase $PersistenceBase $PersistencePath $PipeSupported $PlotTheme $Post $Pre $PreferencesDirectory $PreInitialization $PrePrint $PreRead $PrintForms $PrintLiteral $Printout3DPreviewer $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $PublisherID $RandomState $RecursionLimit $RegisteredDeviceClasses $RegisteredUserName $ReleaseNumber $RequesterAddress $RequesterWolframID $RequesterWolframUUID $ResourceSystemBase $RootDirectory $ScheduledTask $ScriptCommandLine $ScriptInputString $SecuredAuthenticationKeyTokens $ServiceCreditsAvailable $Services $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SourceLink $SSHAuthentication $SummaryBoxDataSizeLimit $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemMemory $SystemShell $SystemTimeZone $SystemWordLength $TemplatePath $TemporaryDirectory $TemporaryPrefix $TestFileName $TextStyle $TimedOut $TimeUnit $TimeZone $TimeZoneEntity $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $UnitSystem $Urgent $UserAddOnsDirectory $UserAgentLanguages $UserAgentMachine $UserAgentName $UserAgentOperatingSystem $UserAgentString $UserAgentVersion $UserBaseDirectory $UserDocumentsDirectory $Username $UserName $UserURLBase $Version $VersionNumber $VoiceStyles $WolframID $WolframUUID\\\",c:[e.C(\\\"\\\\\\\\(\\\\\\\\*\\\",\\\"\\\\\\\\*\\\\\\\\)\\\",{c:[\\\"self\\\"]}),e.QSM,e.CNM]}});hljs.registerLanguage(\\\"vim\\\",function(e){return{l:/[!#@\\\\w]+/,k:{keyword:\\\"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank\\\",built_in:\\\"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp\\\"},i:/;/,c:[e.NM,{cN:\\\"string\\\",b:\\\"'\\\",e:\\\"'\\\",i:\\\"\\\\\\\\n\\\"},{cN:\\\"string\\\",b:/\\\"(\\\\\\\\\\\"|\\\\n\\\\\\\\|[^\\\"\\\\n])*\\\"/},e.C('\\\"',\\\"$\\\"),{cN:\\\"variable\\\",b:/[bwtglsav]:[\\\\w\\\\d_]*/},{cN:\\\"function\\\",bK:\\\"function function!\\\",e:\\\"$\\\",relevance:0,c:[e.TM,{cN:\\\"params\\\",b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\"}]},{cN:\\\"symbol\\\",b:/<[\\\\w-]+>/}]}});hljs.registerLanguage(\\\"makefile\\\",function(e){var i={cN:\\\"variable\\\",v:[{b:\\\"\\\\\\\\$\\\\\\\\(\\\"+e.UIR+\\\"\\\\\\\\)\\\",c:[e.BE]},{b:/\\\\$[@%<?\\\\^\\\\+\\\\*]/}]},r={cN:\\\"string\\\",b:/\\\"/,e:/\\\"/,c:[e.BE,i]},a={cN:\\\"variable\\\",b:/\\\\$\\\\([\\\\w-]+\\\\s/,e:/\\\\)/,k:{built_in:\\\"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value\\\"},c:[i]},n={b:\\\"^\\\"+e.UIR+\\\"\\\\\\\\s*(?=[:+?]?=)\\\"},t={cN:\\\"section\\\",b:/^[^\\\\s]+:/,e:/$/,c:[i]};return{aliases:[\\\"mk\\\",\\\"mak\\\"],k:\\\"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath\\\",l:/[\\\\w-]+/,c:[e.HCM,i,r,a,n,{cN:\\\"meta\\\",b:/^\\\\.PHONY:/,e:/$/,k:{\\\"meta-keyword\\\":\\\".PHONY\\\"},l:/[\\\\.\\\\w]+/},t]}});hljs.registerLanguage(\\\"objectivec\\\",function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,i=\\\"@interface @class @protocol @implementation\\\";return{aliases:[\\\"mm\\\",\\\"objc\\\",\\\"obj-c\\\"],k:{keyword:\\\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN\\\",literal:\\\"false true FALSE TRUE nil YES NO NULL\\\",built_in:\\\"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\\\"},l:t,i:\\\"</\\\",c:[{cN:\\\"built_in\\\",b:\\\"\\\\\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\\\\\w+\\\"},e.CLCM,e.CBCM,e.CNM,e.QSM,e.ASM,{cN:\\\"string\\\",v:[{b:'@\\\"',e:'\\\"',i:\\\"\\\\\\\\n\\\",c:[e.BE]}]},{cN:\\\"meta\\\",b:/#\\\\s*[a-z]+\\\\b/,e:/$/,k:{\\\"meta-keyword\\\":\\\"if else elif endif define undef warning error line pragma ifdef ifndef include\\\"},c:[{b:/\\\\\\\\\\\\n/,relevance:0},e.inherit(e.QSM,{cN:\\\"meta-string\\\"}),{cN:\\\"meta-string\\\",b:/<.*?>/,e:/$/,i:\\\"\\\\\\\\n\\\"},e.CLCM,e.CBCM]},{cN:\\\"class\\\",b:\\\"(\\\"+i.split(\\\" \\\").join(\\\"|\\\")+\\\")\\\\\\\\b\\\",e:\\\"({|$)\\\",eE:!0,k:i,l:t,c:[e.UTM]},{b:\\\"\\\\\\\\.\\\"+e.UIR,relevance:0}]}});hljs.registerLanguage(\\\"shell\\\",function(s){return{aliases:[\\\"console\\\"],c:[{cN:\\\"meta\\\",b:\\\"^\\\\\\\\s{0,3}[/\\\\\\\\w\\\\\\\\d\\\\\\\\[\\\\\\\\]()@-]*[>%$#]\\\",starts:{e:\\\"$\\\",sL:\\\"bash\\\"}}]}});hljs.registerLanguage(\\\"erlang\\\",function(e){var r=\\\"[a-z'][a-zA-Z0-9_']*\\\",c=\\\"(\\\"+r+\\\":\\\"+r+\\\"|\\\"+r+\\\")\\\",n={keyword:\\\"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor\\\",literal:\\\"false true\\\"},a=e.C(\\\"%\\\",\\\"$\\\"),b={cN:\\\"number\\\",b:\\\"\\\\\\\\b(\\\\\\\\d+#[a-fA-F0-9]+|\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?([eE][-+]?\\\\\\\\d+)?)\\\",relevance:0},i={b:\\\"fun\\\\\\\\s+\\\"+r+\\\"/\\\\\\\\d+\\\"},l={b:c+\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",rB:!0,relevance:0,c:[{b:c,relevance:0},{b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",eW:!0,rE:!0,relevance:0}]},d={b:\\\"{\\\",e:\\\"}\\\",relevance:0},o={b:\\\"\\\\\\\\b_([A-Z][A-Za-z0-9_]*)?\\\",relevance:0},t={b:\\\"[A-Z][a-zA-Z0-9_]*\\\",relevance:0},v={b:\\\"#\\\"+e.UIR,relevance:0,rB:!0,c:[{b:\\\"#\\\"+e.UIR,relevance:0},{b:\\\"{\\\",e:\\\"}\\\",relevance:0}]},f={bK:\\\"fun receive if try case\\\",e:\\\"end\\\",k:n};f.c=[a,i,e.inherit(e.ASM,{cN:\\\"\\\"}),f,l,e.QSM,b,d,o,t,v];var s=[a,i,f,l,e.QSM,b,d,o,t,v];l.c[1].c=s,d.c=s;var u={cN:\\\"params\\\",b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",c:v.c[1].c=s};return{aliases:[\\\"erl\\\"],k:n,i:\\\"(</|\\\\\\\\*=|\\\\\\\\+=|-=|/\\\\\\\\*|\\\\\\\\*/|\\\\\\\\(\\\\\\\\*|\\\\\\\\*\\\\\\\\))\\\",c:[{cN:\\\"function\\\",b:\\\"^\\\"+r+\\\"\\\\\\\\s*\\\\\\\\(\\\",e:\\\"->\\\",rB:!0,i:\\\"\\\\\\\\(|#|//|/\\\\\\\\*|\\\\\\\\\\\\\\\\|:|;\\\",c:[u,e.inherit(e.TM,{b:r})],starts:{e:\\\";|\\\\\\\\.\\\",k:n,c:s}},a,{b:\\\"^-\\\",e:\\\"\\\\\\\\.\\\",relevance:0,eE:!0,rB:!0,l:\\\"-\\\"+e.IR,k:\\\"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec\\\",c:[u]},b,e.QSM,v,o,t,d,{b:/\\\\.$/}]}});hljs.registerLanguage(\\\"powershell\\\",function(e){var t={keyword:\\\"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter\\\"},n={b:\\\"`[\\\\\\\\s\\\\\\\\S]\\\",relevance:0},c={cN:\\\"variable\\\",v:[{b:/\\\\$\\\\B/},{cN:\\\"keyword\\\",b:/\\\\$this/},{b:/\\\\$[\\\\w\\\\d][\\\\w\\\\d_:]*/}]},i={cN:\\\"string\\\",v:[{b:/\\\"/,e:/\\\"/},{b:/@\\\"/,e:/^\\\"@/}],c:[n,c,{cN:\\\"variable\\\",b:/\\\\$[A-z]/,e:/[^A-z]/}]},a={cN:\\\"string\\\",v:[{b:/'/,e:/'/},{b:/@'/,e:/^'@/}]},r=e.inherit(e.C(null,null),{v:[{b:/#/,e:/$/},{b:/<#/,e:/#>/}],c:[{cN:\\\"doctag\\\",v:[{b:/\\\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{b:/\\\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\\\s+\\\\S+/}]}]}),o={cN:\\\"built_in\\\",v:[{b:\\\"(\\\".concat(\\\"Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where\\\",\\\")+(-)[\\\\\\\\w\\\\\\\\d]+\\\")}]},l={cN:\\\"class\\\",bK:\\\"class enum\\\",e:/\\\\s*[{]/,eE:!0,relevance:0,c:[e.TM]},s={cN:\\\"function\\\",b:/function\\\\s+/,e:/\\\\s*\\\\{|$/,eE:!0,rB:!0,relevance:0,c:[{b:\\\"function\\\",relevance:0,cN:\\\"keyword\\\"},{cN:\\\"title\\\",b:/\\\\w[\\\\w\\\\d]*((-)[\\\\w\\\\d]+)*/,relevance:0},{b:/\\\\(/,e:/\\\\)/,cN:\\\"params\\\",relevance:0,c:[c]}]},p={b:/using\\\\s/,e:/$/,rB:!0,c:[i,a,{cN:\\\"keyword\\\",b:/(using|assembly|command|module|namespace|type)/}]},b={v:[{cN:\\\"operator\\\",b:\\\"(\\\".concat(\\\"-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor\\\",\\\")\\\\\\\\b\\\")},{cN:\\\"literal\\\",b:/(-)[\\\\w\\\\d]+/,relevance:0}]},d={cN:\\\"function\\\",b:/\\\\[.*\\\\]\\\\s*[\\\\w]+[ ]??\\\\(/,e:/$/,rB:!0,relevance:0,c:[{cN:\\\"keyword\\\",b:\\\"(\\\".concat(t.keyword.toString().replace(/\\\\s/g,\\\"|\\\"),\\\")\\\\\\\\b\\\"),endsParent:!0,relevance:0},e.inherit(e.TM,{endsParent:!0})]},u=[d,r,n,e.NM,i,a,o,c,{cN:\\\"literal\\\",b:/\\\\$(null|true|false)\\\\b/},{cN:\\\"selector-tag\\\",b:/\\\\@\\\\B/,relevance:0}],m={b:/\\\\[/,e:/\\\\]/,eB:!0,eE:!0,relevance:0,c:[].concat(\\\"self\\\",u,{b:\\\"(\\\"+[\\\"string\\\",\\\"char\\\",\\\"byte\\\",\\\"int\\\",\\\"long\\\",\\\"bool\\\",\\\"decimal\\\",\\\"single\\\",\\\"double\\\",\\\"DateTime\\\",\\\"xml\\\",\\\"array\\\",\\\"hashtable\\\",\\\"void\\\"].join(\\\"|\\\")+\\\")\\\",cN:\\\"built_in\\\",relevance:0},{cN:\\\"type\\\",b:/[\\\\.\\\\w\\\\d]+/,relevance:0})};return d.c.unshift(m),{aliases:[\\\"ps\\\",\\\"ps1\\\"],l:/-?[A-z\\\\.\\\\-]+/,cI:!0,k:t,c:u.concat(l,s,p,b,m)}});hljs.registerLanguage(\\\"typescript\\\",function(e){var r=\\\"[A-Za-z$_][0-9A-Za-z$_]*\\\",t={keyword:\\\"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await\\\",literal:\\\"true false null undefined NaN Infinity\\\",built_in:\\\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise\\\"},n={cN:\\\"meta\\\",b:\\\"@\\\"+r},a={b:\\\"\\\\\\\\(\\\",e:/\\\\)/,k:t,c:[\\\"self\\\",e.QSM,e.ASM,e.NM]},c={cN:\\\"params\\\",b:/\\\\(/,e:/\\\\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM,n,a]},s={cN:\\\"number\\\",v:[{b:\\\"\\\\\\\\b(0[bB][01]+)n?\\\"},{b:\\\"\\\\\\\\b(0[oO][0-7]+)n?\\\"},{b:e.CNR+\\\"n?\\\"}],relevance:0},o={cN:\\\"subst\\\",b:\\\"\\\\\\\\$\\\\\\\\{\\\",e:\\\"\\\\\\\\}\\\",k:t,c:[]},i={b:\\\"html`\\\",e:\\\"\\\",starts:{e:\\\"`\\\",rE:!1,c:[e.BE,o],sL:\\\"xml\\\"}},l={b:\\\"css`\\\",e:\\\"\\\",starts:{e:\\\"`\\\",rE:!1,c:[e.BE,o],sL:\\\"css\\\"}},b={cN:\\\"string\\\",b:\\\"`\\\",e:\\\"`\\\",c:[e.BE,o]};return o.c=[e.ASM,e.QSM,i,l,b,s,e.RM],{aliases:[\\\"ts\\\"],k:t,c:[{cN:\\\"meta\\\",b:/^\\\\s*['\\\"]use strict['\\\"]/},e.ASM,e.QSM,i,l,b,e.CLCM,e.CBCM,s,{b:\\\"(\\\"+e.RSR+\\\"|\\\\\\\\b(case|return|throw)\\\\\\\\b)\\\\\\\\s*\\\",k:\\\"return throw case\\\",c:[e.CLCM,e.CBCM,e.RM,{cN:\\\"function\\\",b:\\\"(\\\\\\\\(.*?\\\\\\\\)|\\\"+e.IR+\\\")\\\\\\\\s*=>\\\",rB:!0,e:\\\"\\\\\\\\s*=>\\\",c:[{cN:\\\"params\\\",v:[{b:e.IR},{b:/\\\\(\\\\s*\\\\)/},{b:/\\\\(/,e:/\\\\)/,eB:!0,eE:!0,k:t,c:[\\\"self\\\",e.CLCM,e.CBCM]}]}]}],relevance:0},{cN:\\\"function\\\",bK:\\\"function\\\",e:/[\\\\{;]/,eE:!0,k:t,c:[\\\"self\\\",e.inherit(e.TM,{b:r}),c],i:/%/,relevance:0},{bK:\\\"constructor\\\",e:/[\\\\{;]/,eE:!0,c:[\\\"self\\\",c]},{b:/module\\\\./,k:{built_in:\\\"module\\\"},relevance:0},{bK:\\\"module\\\",e:/\\\\{/,eE:!0},{bK:\\\"interface\\\",e:/\\\\{/,eE:!0,k:\\\"interface extends\\\"},{b:/\\\\$[(.]/},{b:\\\"\\\\\\\\.\\\"+e.IR,relevance:0},n,a]}});hljs.registerLanguage(\\\"fortran\\\",function(e){return{cI:!0,aliases:[\\\"f90\\\",\\\"f95\\\"],k:{literal:\\\".False. .True.\\\",keyword:\\\"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data\\\",built_in:\\\"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image\\\"},i:/\\\\/\\\\*/,c:[e.inherit(e.ASM,{cN:\\\"string\\\",relevance:0}),e.inherit(e.QSM,{cN:\\\"string\\\",relevance:0}),{cN:\\\"function\\\",bK:\\\"subroutine function program\\\",i:\\\"[${=\\\\\\\\n]\\\",c:[e.UTM,{cN:\\\"params\\\",b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\"}]},e.C(\\\"!\\\",\\\"$\\\",{relevance:0}),{cN:\\\"number\\\",b:\\\"(?=\\\\\\\\b|\\\\\\\\+|\\\\\\\\-|\\\\\\\\.)(?=\\\\\\\\.\\\\\\\\d|\\\\\\\\d)(?:\\\\\\\\d+)?(?:\\\\\\\\.?\\\\\\\\d*)(?:[de][+-]?\\\\\\\\d+)?\\\\\\\\b\\\\\\\\.?\\\",relevance:0}]}});hljs.registerLanguage(\\\"php\\\",function(e){var c={b:\\\"\\\\\\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*\\\"},i={cN:\\\"meta\\\",b:/<\\\\?(php)?|\\\\?>/},t={cN:\\\"string\\\",c:[e.BE,i],v:[{b:'b\\\"',e:'\\\"'},{b:\\\"b'\\\",e:\\\"'\\\"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:[\\\"php\\\",\\\"php3\\\",\\\"php4\\\",\\\"php5\\\",\\\"php6\\\",\\\"php7\\\"],cI:!0,k:\\\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\\\",c:[e.HCM,e.C(\\\"//\\\",\\\"$\\\",{c:[i]}),e.C(\\\"/\\\\\\\\*\\\",\\\"\\\\\\\\*/\\\",{c:[{cN:\\\"doctag\\\",b:\\\"@[A-Za-z]+\\\"}]}),e.C(\\\"__halt_compiler.+?;\\\",!1,{eW:!0,k:\\\"__halt_compiler\\\",l:e.UIR}),{cN:\\\"string\\\",b:/<<<['\\\"]?\\\\w+['\\\"]?$/,e:/^\\\\w+;?$/,c:[e.BE,{cN:\\\"subst\\\",v:[{b:/\\\\$\\\\w+/},{b:/\\\\{\\\\$/,e:/\\\\}/}]}]},i,{cN:\\\"keyword\\\",b:/\\\\$this\\\\b/},c,{b:/(::|->)+[a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*/},{cN:\\\"function\\\",bK:\\\"function\\\",e:/[;{]/,eE:!0,i:\\\"\\\\\\\\$|\\\\\\\\[|%\\\",c:[e.UTM,{cN:\\\"params\\\",b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",c:[\\\"self\\\",c,e.CBCM,t,a]}]},{cN:\\\"class\\\",bK:\\\"class interface\\\",e:\\\"{\\\",eE:!0,i:/[:\\\\(\\\\$\\\"]/,c:[{bK:\\\"extends implements\\\"},e.UTM]},{bK:\\\"namespace\\\",e:\\\";\\\",i:/[\\\\.']/,c:[e.UTM]},{bK:\\\"use\\\",e:\\\";\\\",c:[e.UTM]},{b:\\\"=>\\\"},t,a]}});hljs.registerLanguage(\\\"haskell\\\",function(e){var i={v:[e.C(\\\"--\\\",\\\"$\\\"),e.C(\\\"{-\\\",\\\"-}\\\",{c:[\\\"self\\\"]})]},a={cN:\\\"meta\\\",b:\\\"{-#\\\",e:\\\"#-}\\\"},l={cN:\\\"meta\\\",b:\\\"^#\\\",e:\\\"$\\\"},c={cN:\\\"type\\\",b:\\\"\\\\\\\\b[A-Z][\\\\\\\\w']*\\\",relevance:0},n={b:\\\"\\\\\\\\(\\\",e:\\\"\\\\\\\\)\\\",i:'\\\"',c:[a,l,{cN:\\\"type\\\",b:\\\"\\\\\\\\b[A-Z][\\\\\\\\w]*(\\\\\\\\((\\\\\\\\.\\\\\\\\.|,|\\\\\\\\w+)\\\\\\\\))?\\\"},e.inherit(e.TM,{b:\\\"[_a-z][\\\\\\\\w']*\\\"}),i]};return{aliases:[\\\"hs\\\"],k:\\\"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec\\\",c:[{bK:\\\"module\\\",e:\\\"where\\\",k:\\\"module where\\\",c:[n,i],i:\\\"\\\\\\\\W\\\\\\\\.|;\\\"},{b:\\\"\\\\\\\\bimport\\\\\\\\b\\\",e:\\\"$\\\",k:\\\"import qualified as hiding\\\",c:[n,i],i:\\\"\\\\\\\\W\\\\\\\\.|;\\\"},{cN:\\\"class\\\",b:\\\"^(\\\\\\\\s*)?(class|instance)\\\\\\\\b\\\",e:\\\"where\\\",k:\\\"class family instance where\\\",c:[c,n,i]},{cN:\\\"class\\\",b:\\\"\\\\\\\\b(data|(new)?type)\\\\\\\\b\\\",e:\\\"$\\\",k:\\\"data family type newtype deriving\\\",c:[a,c,n,{b:\\\"{\\\",e:\\\"}\\\",c:n.c},i]},{bK:\\\"default\\\",e:\\\"$\\\",c:[c,n,i]},{bK:\\\"infix infixl infixr\\\",e:\\\"$\\\",c:[e.CNM,i]},{b:\\\"\\\\\\\\bforeign\\\\\\\\b\\\",e:\\\"$\\\",k:\\\"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe\\\",c:[c,e.QSM,i]},{cN:\\\"meta\\\",b:\\\"#!\\\\\\\\/usr\\\\\\\\/bin\\\\\\\\/env runhaskell\\\",e:\\\"$\\\"},a,l,e.QSM,e.CNM,c,e.inherit(e.TM,{b:\\\"^[_a-z][\\\\\\\\w']*\\\"}),i,{b:\\\"->|<-\\\"}]}});hljs.registerLanguage(\\\"coffeescript\\\",function(e){var c={keyword:\\\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not\\\",literal:\\\"true false null undefined yes no on off\\\",built_in:\\\"npm require console print module global window document\\\"},n=\\\"[A-Za-z$_][0-9A-Za-z$_]*\\\",r={cN:\\\"subst\\\",b:/#\\\\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:\\\"(\\\\\\\\s*/)?\\\",relevance:0}}),{cN:\\\"string\\\",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/\\\"\\\"\\\"/,e:/\\\"\\\"\\\"/,c:[e.BE,r]},{b:/\\\"/,e:/\\\"/,c:[e.BE,r]}]},{cN:\\\"regexp\\\",v:[{b:\\\"///\\\",e:\\\"///\\\",c:[r,e.HCM]},{b:\\\"//[gim]{0,3}(?=\\\\\\\\W)\\\",relevance:0},{b:/\\\\/(?![ *]).*?(?![\\\\\\\\]).\\\\/[gim]{0,3}(?=\\\\W)/}]},{b:\\\"@\\\"+n},{sL:\\\"javascript\\\",eB:!0,eE:!0,v:[{b:\\\"```\\\",e:\\\"```\\\"},{b:\\\"`\\\",e:\\\"`\\\"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t=\\\"(\\\\\\\\(.*\\\\\\\\))?\\\\\\\\s*\\\\\\\\B[-=]>\\\",a={cN:\\\"params\\\",b:\\\"\\\\\\\\([^\\\\\\\\(]\\\",rB:!0,c:[{b:/\\\\(/,e:/\\\\)/,k:c,c:[\\\"self\\\"].concat(i)}]};return{aliases:[\\\"coffee\\\",\\\"cson\\\",\\\"iced\\\"],k:c,i:/\\\\/\\\\*/,c:i.concat([e.C(\\\"###\\\",\\\"###\\\"),e.HCM,{cN:\\\"function\\\",b:\\\"^\\\\\\\\s*\\\"+n+\\\"\\\\\\\\s*=\\\\\\\\s*\\\"+t,e:\\\"[-=]>\\\",rB:!0,c:[s,a]},{b:/[:\\\\(,=]\\\\s*/,relevance:0,c:[{cN:\\\"function\\\",b:t,e:\\\"[-=]>\\\",rB:!0,c:[a]}]},{cN:\\\"class\\\",bK:\\\"class\\\",e:\\\"$\\\",i:/[:=\\\"\\\\[\\\\]]/,c:[{bK:\\\"extends\\\",eW:!0,i:/[:=\\\"\\\\[\\\\]]/,c:[s]},s]},{b:n+\\\":\\\",e:\\\":\\\",rB:!0,rE:!0,relevance:0}])}});hljs.registerLanguage(\\\"r\\\",function(e){var r=\\\"([a-zA-Z]|\\\\\\\\.[a-zA-Z.])[a-zA-Z0-9._]*\\\";return{c:[e.HCM,{b:r,l:r,k:{keyword:\\\"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...\\\",literal:\\\"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10\\\"},relevance:0},{cN:\\\"number\\\",b:\\\"0[xX][0-9a-fA-F]+[Li]?\\\\\\\\b\\\",relevance:0},{cN:\\\"number\\\",b:\\\"\\\\\\\\d+(?:[eE][+\\\\\\\\-]?\\\\\\\\d*)?L\\\\\\\\b\\\",relevance:0},{cN:\\\"number\\\",b:\\\"\\\\\\\\d+\\\\\\\\.(?!\\\\\\\\d)(?:i\\\\\\\\b)?\\\",relevance:0},{cN:\\\"number\\\",b:\\\"\\\\\\\\d+(?:\\\\\\\\.\\\\\\\\d*)?(?:[eE][+\\\\\\\\-]?\\\\\\\\d*)?i?\\\\\\\\b\\\",relevance:0},{cN:\\\"number\\\",b:\\\"\\\\\\\\.\\\\\\\\d+(?:[eE][+\\\\\\\\-]?\\\\\\\\d*)?i?\\\\\\\\b\\\",relevance:0},{b:\\\"`\\\",e:\\\"`\\\",relevance:0},{cN:\\\"string\\\",c:[e.BE],v:[{b:'\\\"',e:'\\\"'},{b:\\\"'\\\",e:\\\"'\\\"}]}]}});hljs.registerLanguage(\\\"autohotkey\\\",function(e){var a={b:\\\"`[\\\\\\\\s\\\\\\\\S]\\\"};return{cI:!0,aliases:[\\\"ahk\\\"],k:{keyword:\\\"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group\\\",literal:\\\"true false NOT AND OR\\\",built_in:\\\"ComSpec Clipboard ClipboardAll ErrorLevel\\\"},c:[a,e.inherit(e.QSM,{c:[a]}),e.C(\\\";\\\",\\\"$\\\",{relevance:0}),e.CBCM,{cN:\\\"number\\\",b:e.NR,relevance:0},{cN:\\\"variable\\\",b:\\\"%[a-zA-Z0-9#_$@]+%\\\"},{cN:\\\"built_in\\\",b:\\\"^\\\\\\\\s*\\\\\\\\w+\\\\\\\\s*(,|%)\\\"},{cN:\\\"title\\\",v:[{b:'^[^\\\\\\\\n\\\";]+::(?!=)'},{b:'^[^\\\\\\\\n\\\";]+:(?!=)',relevance:0}]},{cN:\\\"meta\\\",b:\\\"^\\\\\\\\s*#\\\\\\\\w+\\\",e:\\\"$\\\",relevance:0},{cN:\\\"built_in\\\",b:\\\"A_[a-zA-Z0-9]+\\\"},{b:\\\",\\\\\\\\s*,\\\"}]}});hljs.registerLanguage(\\\"elixir\\\",function(e){var b=\\\"[a-zA-Z_][a-zA-Z0-9_.]*(\\\\\\\\!|\\\\\\\\?)?\\\",c=\\\"and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0\\\",n={cN:\\\"subst\\\",b:\\\"#\\\\\\\\{\\\",e:\\\"}\\\",l:b,k:c},r=\\\"[/|([{<\\\\\\\"']\\\",a={cN:\\\"string\\\",b:\\\"~[a-z](?=\\\"+r+\\\")\\\",c:[{endsParent:!0,c:[{c:[e.BE,n],v:[{b:/\\\"/,e:/\\\"/},{b:/'/,e:/'/},{b:/\\\\//,e:/\\\\//},{b:/\\\\|/,e:/\\\\|/},{b:/\\\\(/,e:/\\\\)/},{b:/\\\\[/,e:/\\\\]/},{b:/\\\\{/,e:/\\\\}/},{b:/</,e:/>/}]}]}]},i={cN:\\\"string\\\",b:\\\"~[A-Z](?=\\\"+r+\\\")\\\",c:[{b:/\\\"/,e:/\\\"/},{b:/'/,e:/'/},{b:/\\\\//,e:/\\\\//},{b:/\\\\|/,e:/\\\\|/},{b:/\\\\(/,e:/\\\\)/},{b:/\\\\[/,e:/\\\\]/},{b:/\\\\{/,e:/\\\\}/},{b:/\\\\</,e:/\\\\>/}]},l={cN:\\\"string\\\",c:[e.BE,n],v:[{b:/\\\"\\\"\\\"/,e:/\\\"\\\"\\\"/},{b:/'''/,e:/'''/},{b:/~S\\\"\\\"\\\"/,e:/\\\"\\\"\\\"/,c:[]},{b:/~S\\\"/,e:/\\\"/,c:[]},{b:/~S'''/,e:/'''/,c:[]},{b:/~S'/,e:/'/,c:[]},{b:/'/,e:/'/},{b:/\\\"/,e:/\\\"/}]},s={cN:\\\"function\\\",bK:\\\"def defp defmacro\\\",e:/\\\\B\\\\b/,c:[e.inherit(e.TM,{b:b,endsParent:!0})]},t=e.inherit(s,{cN:\\\"class\\\",bK:\\\"defimpl defmodule defprotocol defrecord\\\",e:/\\\\bdo\\\\b|$|;/}),d=[l,i,a,e.HCM,t,s,{b:\\\"::\\\"},{cN:\\\"symbol\\\",b:\\\":(?![\\\\\\\\s:])\\\",c:[l,{b:\\\"[a-zA-Z_]\\\\\\\\w*[!?=]?|[-+~]\\\\\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\\\\\*\\\\\\\\*|[-/+%^&*~`|]|\\\\\\\\[\\\\\\\\]=?\\\"}],relevance:0},{cN:\\\"symbol\\\",b:b+\\\":(?!:)\\\",relevance:0},{cN:\\\"number\\\",b:\\\"(\\\\\\\\b0o[0-7_]+)|(\\\\\\\\b0b[01_]+)|(\\\\\\\\b0x[0-9a-fA-F_]+)|(-?\\\\\\\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)\\\",relevance:0},{cN:\\\"variable\\\",b:\\\"(\\\\\\\\$\\\\\\\\W)|((\\\\\\\\$|\\\\\\\\@\\\\\\\\@?)(\\\\\\\\w+))\\\"},{b:\\\"->\\\"},{b:\\\"(\\\"+e.RSR+\\\")\\\\\\\\s*\\\",c:[e.HCM,{cN:\\\"regexp\\\",i:\\\"\\\\\\\\n\\\",c:[e.BE,n],v:[{b:\\\"/\\\",e:\\\"/[a-z]*\\\"},{b:\\\"%r\\\\\\\\[\\\",e:\\\"\\\\\\\\][a-z]*\\\"}]}],relevance:0}];return{l:b,k:c,c:n.c=d}});hljs.registerLanguage(\\\"gradle\\\",function(e){return{cI:!0,k:{keyword:\\\"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine\\\"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.NM,e.RM]}});hljs.registerLanguage(\\\"css\\\",function(e){var c={b:/(?:[A-Z\\\\_\\\\.\\\\-]+|--[a-zA-Z0-9_-]+)\\\\s*:/,rB:!0,e:\\\";\\\",eW:!0,c:[{cN:\\\"attribute\\\",b:/\\\\S/,e:\\\":\\\",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\\\\w-]+\\\\(/,rB:!0,c:[{cN:\\\"built_in\\\",b:/[\\\\w-]+/},{b:/\\\\(/,e:/\\\\)/,c:[e.ASM,e.QSM,e.CSSNM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\\\"number\\\",b:\\\"#[0-9A-Fa-f]+\\\"},{cN:\\\"meta\\\",b:\\\"!important\\\"}]}}]};return{cI:!0,i:/[=\\\\/|'\\\\$]/,c:[e.CBCM,{cN:\\\"selector-id\\\",b:/#[A-Za-z0-9_-]+/},{cN:\\\"selector-class\\\",b:/\\\\.[A-Za-z0-9_-]+/},{cN:\\\"selector-attr\\\",b:/\\\\[/,e:/\\\\]/,i:\\\"$\\\",c:[e.ASM,e.QSM]},{cN:\\\"selector-pseudo\\\",b:/:(:)?[a-zA-Z0-9\\\\_\\\\-\\\\+\\\\(\\\\)\\\"'.]+/},{b:\\\"@(page|font-face)\\\",l:\\\"@[a-z-]+\\\",k:\\\"@page @font-face\\\"},{b:\\\"@\\\",e:\\\"[{;]\\\",i:/:/,rB:!0,c:[{cN:\\\"keyword\\\",b:/@\\\\-?\\\\w[\\\\w]*(\\\\-\\\\w+)*/},{b:/\\\\s/,eW:!0,eE:!0,relevance:0,k:\\\"and or not only\\\",c:[{b:/[a-z-]+:/,cN:\\\"attribute\\\"},e.ASM,e.QSM,e.CSSNM]}]},{cN:\\\"selector-tag\\\",b:\\\"[a-zA-Z-][a-zA-Z0-9_-]*\\\",relevance:0},{b:\\\"{\\\",e:\\\"}\\\",i:/\\\\S/,c:[e.CBCM,c]}]}});\\n\\nexports.hljs = hljs;\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/highlight/highlight.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/highlight/highlight.css\": {\n \"text\": \"/*\\n\\nOriginal highlight.js style (c) Ivan Sagalaev <maniac@softwaremaniacs.org>\\n\\n*/\\n\\n.hljs {\\n display: block;\\n overflow-x: auto;\\n padding: 0.5em;\\n background: #F0F0F0;\\n}\\n\\n\\n/* Base color: saturation 0; */\\n\\n.hljs,\\n.hljs-subst {\\n color: #444;\\n}\\n\\n.hljs-comment {\\n color: #888888;\\n}\\n\\n.hljs-keyword,\\n.hljs-attribute,\\n.hljs-selector-tag,\\n.hljs-meta-keyword,\\n.hljs-doctag,\\n.hljs-name {\\n font-weight: bold;\\n}\\n\\n\\n/* User color: hue: 0 */\\n\\n.hljs-type,\\n.hljs-string,\\n.hljs-number,\\n.hljs-selector-id,\\n.hljs-selector-class,\\n.hljs-quote,\\n.hljs-template-tag,\\n.hljs-deletion {\\n color: #880000;\\n}\\n\\n.hljs-title,\\n.hljs-section {\\n color: #880000;\\n font-weight: bold;\\n}\\n\\n.hljs-regexp,\\n.hljs-symbol,\\n.hljs-variable,\\n.hljs-template-variable,\\n.hljs-link,\\n.hljs-selector-attr,\\n.hljs-selector-pseudo {\\n color: #BC6060;\\n}\\n\\n\\n/* Language color: hue: 90; */\\n\\n.hljs-literal {\\n color: #78A960;\\n}\\n\\n.hljs-built_in,\\n.hljs-bullet,\\n.hljs-code,\\n.hljs-addition {\\n color: #397300;\\n}\\n\\n\\n/* Meta color: hue: 200 */\\n\\n.hljs-meta {\\n color: #1f7199;\\n}\\n\\n.hljs-meta-string {\\n color: #4d99bf;\\n}\\n\\n\\n/* Misc effects */\\n\\n.hljs-emphasis {\\n font-style: italic;\\n}\\n\\n.hljs-strong {\\n font-weight: bold;\\n}\\n\",\n \"type\": \"text/css\",\n \"title\": \"$:/plugins/tiddlywiki/highlight/highlight.css\",\n \"tags\": \"[[$:/tags/Stylesheet]]\"\n },\n \"$:/plugins/tiddlywiki/highlight/highlightblock.js\": {\n \"title\": \"$:/plugins/tiddlywiki/highlight/highlightblock.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/highlight/highlightblock.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWraps up the fenced code blocks parser for highlight and use in TiddlyWiki5\\n\\n\\\\*/\\n(function() {\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar TYPE_MAPPINGS_BASE = \\\"$:/config/HighlightPlugin/TypeMappings/\\\";\\n\\nvar CodeBlockWidget = require(\\\"$:/core/modules/widgets/codeblock.js\\\").codeblock;\\n\\nvar hljs = require(\\\"$:/plugins/tiddlywiki/highlight/highlight.js\\\");\\n\\nhljs.configure({tabReplace: \\\" \\\"});\\t\\n\\nCodeBlockWidget.prototype.postRender = function() {\\n\\tvar domNode = this.domNodes[0],\\n\\t\\tlanguage = this.language,\\n\\t\\ttiddler = this.wiki.getTiddler(TYPE_MAPPINGS_BASE + language);\\n\\tif(tiddler) {\\n\\t\\tlanguage = tiddler.fields.text || \\\"\\\";\\n\\t}\\n\\tif(language && hljs.getLanguage(language)) {\\n\\t\\tdomNode.className = language.toLowerCase() + \\\" hljs\\\";\\n\\t\\tif($tw.browser && !domNode.isTiddlyWikiFakeDom) {\\n\\t\\t\\thljs.highlightBlock(domNode);\\t\\t\\t\\n\\t\\t} else {\\n\\t\\t\\tvar text = domNode.textContent;\\n\\t\\t\\tdomNode.children[0].innerHTML = hljs.fixMarkup(hljs.highlight(language,text).value);\\n\\t\\t\\t// If we're using the fakedom then specially save the original raw text\\n\\t\\t\\tif(domNode.isTiddlyWikiFakeDom) {\\n\\t\\t\\t\\tdomNode.children[0].textInnerHTML = text;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\t\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/highlight/howto\": {\n \"title\": \"$:/plugins/tiddlywiki/highlight/howto\",\n \"text\": \"! Supporting Additional Languages\\n \\nThe [[highlight.js|https://github.com/highlightjs/highlight.js]] project supports many languages. Only a subset of these languages are supported by the plugin. It is possible for users to change the set of languages supported by the plugin by following these steps:\\n \\n# Go to the highlight.js project [[download page|https://highlightjs.org/download/]], select the language definitions to include, and press the Download button to download a zip archive containing customised support files for a highlight.js syntax highlighting server.\\n# Locate the `highlight.pack.js` file in the highlight plugin -- on a stock Debian 8 system running Tiddlywiki5 under node-js it is located at `/usr/local/lib/node_modules/tiddlywiki/plugins/tiddlywiki/highlight/files/highlight.pack.js`.\\n# Replace the plugin `highlight.pack.js` file located in step 2 with the one from the downloaded archive obtained in step 1.\\n# Restart the Tiddlywiki server.\\n\"\n },\n \"$:/plugins/tiddlywiki/highlight/license\": {\n \"title\": \"$:/plugins/tiddlywiki/highlight/license\",\n \"type\": \"text/plain\",\n \"text\": \"Copyright (c) 2006, Ivan Sagalaev\\nAll rights reserved.\\nRedistribution and use in source and binary forms, with or without\\nmodification, are permitted provided that the following conditions are met:\\n\\n * Redistributions of source code must retain the above copyright\\n notice, this list of conditions and the following disclaimer.\\n * Redistributions in binary form must reproduce the above copyright\\n notice, this list of conditions and the following disclaimer in the\\n documentation and/or other materials provided with the distribution.\\n * Neither the name of highlight.js nor the names of its contributors\\n may be used to endorse or promote products derived from this software\\n without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\nDISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\"\n },\n \"$:/plugins/tiddlywiki/highlight/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/highlight/readme\",\n \"text\": \"This plugin provides syntax highlighting of code blocks using v9.18.1 of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev.\\n\\n! Usage\\n\\nWhen the plugin is installed it automatically applies highlighting to all codeblocks defined with triple backticks or with the CodeBlockWidget.\\n\\nThe language can optionally be specified after the opening triple braces:\\n\\n<$codeblock code=\\\"\\\"\\\"```css\\n * { margin: 0; padding: 0; } /* micro reset */\\n\\nhtml { font-size: 62.5%; }\\nbody { font-size: 14px; font-size: 1.4rem; } /* =14px */\\nh1 { font-size: 24px; font-size: 2.4rem; } /* =24px */\\n```\\\"\\\"\\\"/>\\n\\nIf no language is specified highlight.js will attempt to automatically detect the language.\\n\\n! Built-in Language Brushes\\n\\nThe plugin includes support for the following languages (referred to as \\\"brushes\\\" by highlight.js):\\n\\n* apache\\n* arduino\\n* arm assembly\\n* asciidoc\\n* autohotkey\\n* awk\\n* bash\\n* cmake\\n* coffeescript\\n* cpp\\n* cs\\n* css\\n* diff\\n* dockerfile\\n* erlang\\n* elixir\\n* fortran\\n* go\\n* gradle\\n* haskell\\n* html\\n* http\\n* ini\\n* intel x86 assembly\\n* java\\n* javascript\\n* json\\n* kotlin\\n* less\\n* lua\\n* makefile\\n* markdown\\n* mathematica\\n* matlab\\n* nginx\\n* objectivec\\n* perl\\n* php\\n* plaintext\\n* powershell\\n* properties\\n* python\\n* R\\n* ruby\\n* rust\\n* scss\\n* shell session\\n* sql\\n* swift\\n* toml\\n* typescript\\n* vala\\n* vim script\\n* xml\\n* yaml\\n\\nYou can also specify the language as a MIME content type (eg `text/html` or `text/css`). The mapping is accomplished via mapping tiddlers whose titles start with `$:/config/HighlightPlugin/TypeMappings/`.\\n\"\n },\n \"$:/plugins/tiddlywiki/highlight/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/highlight/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:teal}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.scss .hljs-preprocessor{color:#900;font-weight:bold}.hljs-list .hljs-keyword,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rule .hljs-property,.django .hljs-tag .hljs-keyword{color:navy;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.hljs-name{color:teal}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.clojure .hljs-keyword,.scheme .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}\"\n },\n \"$:/plugins/tiddlywiki/highlight/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/highlight/usage\",\n \"text\": \"! Usage\\n\\nFenced code blocks can have a language specifier added to trigger highlighting in a specific language. Otherwise heuristics are used to detect the language.\\n\\n```\\n ```js\\n var a = b + c; // Highlighted as JavaScript\\n ```\\n```\\n! Adding Themes\\n\\nYou can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub:\\n\\nhttps://github.com/isagalaev/highlight.js/tree/master/src/styles\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/innerwiki":{"title":"$:/plugins/tiddlywiki/innerwiki","name":"Innerwiki","description":"Innerwikis for screenshots and hacking","list":"readme docs examples","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/innerwiki/crosshairs.svg\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/crosshairs.svg\",\n \"type\": \"image/svg+xml\",\n \"text\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<svg width=\\\"128px\\\" height=\\\"128px\\\" viewBox=\\\"0 0 128 128\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <defs>\\n <path d=\\\"M104.938091,68 L64,64 L68,103.85205 L68,108 C68,110.209139 66.209139,112 64,112 C61.790861,112 60,110.209139 60,108 L60,103.159803 L63.9305182,64 L22.9924274,68 L20,68 C17.790861,68 16,66.209139 16,64 C16,61.790861 17.790861,60 20,60 L22.9924274,60 L63.9305182,64 L60,24.8401973 L60,20 C60,17.790861 61.790861,16 64,16 C66.209139,16 68,17.790861 68,20 L68,24.1479497 L64,64 L104.938091,60 L108,60 C110.209139,60 112,61.790861 112,64 C112,66.209139 110.209139,68 108,68 L104.938091,68 Z\\\" id=\\\"path-1\\\"></path>\\n <filter x=\\\"-15.6%\\\" y=\\\"-15.6%\\\" width=\\\"131.2%\\\" height=\\\"131.2%\\\" filterUnits=\\\"objectBoundingBox\\\" id=\\\"filter-2\\\">\\n <feMorphology radius=\\\"2.5\\\" operator=\\\"dilate\\\" in=\\\"SourceAlpha\\\" result=\\\"shadowSpreadOuter1\\\"></feMorphology>\\n <feOffset dx=\\\"0\\\" dy=\\\"0\\\" in=\\\"shadowSpreadOuter1\\\" result=\\\"shadowOffsetOuter1\\\"></feOffset>\\n <feGaussianBlur stdDeviation=\\\"2.5\\\" in=\\\"shadowOffsetOuter1\\\" result=\\\"shadowBlurOuter1\\\"></feGaussianBlur>\\n <feColorMatrix values=\\\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\\\" type=\\\"matrix\\\" in=\\\"shadowBlurOuter1\\\"></feColorMatrix>\\n </filter>\\n </defs>\\n <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <g id=\\\"Combined-Shape\\\">\\n <use fill=\\\"black\\\" fill-opacity=\\\"1\\\" filter=\\\"url(#filter-2)\\\" xlink:href=\\\"#path-1\\\"></use>\\n <use fill=\\\"#FF0000\\\" fill-rule=\\\"evenodd\\\" xlink:href=\\\"#path-1\\\"></use>\\n </g>\\n </g>\\n</svg>\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/data.js\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/data.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/innerwiki/data.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget to represent a single item of data\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n\\nvar DataWidget = function(parseTreeNode,options) {\\n\\tthis.dataWidgetTag = parseTreeNode.type;\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDataWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDataWidget.prototype.render = function(parent,nextSibling) {\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDataWidget.prototype.execute = function() {\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nDataWidget.prototype.refresh = function(changedTiddlers) {\\n\\t// Refresh our attributes\\n\\tvar changedAttributes = this.computeAttributes();\\n\\t// Refresh our children\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.data = DataWidget;\\nexports.anchor = DataWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/docs\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/docs\",\n \"text\": \"! `<$innerwiki>` widget\\n\\nThe `<$innerwiki>` widget encapsulates an embedded wiki. It starts as a blank copy of the current wiki and can have additional payload tiddlers added via embedded `<$data>` widgets (see below).\\n\\nIt supports the following attributes:\\n\\n|!Attribute |!Description |\\n|template |Specifies the template to be used to generate the base wiki (defaults to $:/plugins/tiddlywiki/innerwiki/template) |\\n|width |Width in pixels of the virtual screen for rendering the embedded wiki |\\n|height |Height in pixels of the virtual screen for rendering the embedded wiki |\\n|style |CSS style definitions to be added to the DIV wrapper around the IFRAME containing the embedded wiki |\\n|class |CSS classes to be added to the DIV wrapper around the IFRAME containing the embedded wiki |\\n|filename |Base filename for saving a screenshot of the embedded wiki under Node.js (excludes file extension) |\\n|clipLeft |Position in pixels of the left edge of the clip rectangle (optional) |\\n|clipTop |Position in pixels of the top edge of the clip rectangle (optional) |\\n|clipWidth |Width in pixels of the clip rectangle (optional) |\\n|clipHeight |Height in pixels of the clip rectangle (optional) |\\n\\n! `<$data>` widget\\n\\nThe `<$data>` widget is used within the `<$innerwiki>` widget to specify payload tiddlers to be added to the innerwiki.\\n\\nIt supports the following attributes:\\n\\n|!Attribute |!Description |\\n|$tiddler |The title of a tiddler to be used as a payload tiddler (optional) |\\n|$filter |A filter string identifying tiddlers to be used as payload tiddlers (optional) |\\n|//any attribute<br>not starting<br>with $// |Field values to be assigned to the payload tiddler(s) |\\n\\nIt can be used in three different ways:\\n\\n* Without the `$tiddler` or `$filter` attributes, the remaining attributes provide the fields for a single payload tiddler\\n* With the `$tiddler` attribute present, the payload tiddler takes its fields from that tiddler with the remaining attributes overriding those fields\\n* With the `$filter` attribute present, the payload is a copy of all of the tiddlers identified by the filter, with the remaining attributes overriding those fields of each one\\n\\nThis example injects a copy of the \\\"HelloThere\\\" tiddler with the addition of the field \\\"custom\\\" set to \\\"Alpha\\\":\\n\\n```\\n<$data $tiddler=\\\"HelloThere\\\" custom=\\\"Alpha\\\"/>\\n```\\n\\nThis example injects all image tiddlers with the addition of the field \\\"custom\\\" set to \\\"Beta\\\":\\n\\n```\\n<$data $filter=\\\"[is[image]]\\\" custom=\\\"Beta\\\"/>\\n```\\n\\n! `<$anchor>` widget\\n\\nThe `<$anchor>` widget is used within the `<$innerwiki>` widget to specify draggable anchors to be overlaid on the innerwiki.\\n\\nIt supports the following attributes:\\n\\n|!Attribute |!Description |\\n|x |The title of the tiddler containing the X coordinate of the anchor |\\n|y |The title of the tiddler containing the Y coordinate of the anchor |\\n\\nThis example declares an anchor whose coordinates are contained in the tiddlers [[my-anchor-x]] and [[my-anchor-y]]:\\n\\n```\\n<$anchor x=\\\"my-anchor-x\\\" y=\\\"my-anchor-y\\\"/>\\n```\\n\\n! `screenshot` command\\n\\nSaves PNG screenshots of the `<$innerwiki>` widgets rendered by a set of tiddlers identified by a filter.\\n\\n```\\n--screenshot <filter> <deviceScaleFactor>\\n```\\n\\n* ''filter'': a filter identifying the tiddlers to be rendered, from which the individual `<$innerwiki>` widgets are screenshotted\\n* ''deviceScaleFactor'': a scale factor for the screenshot (optional; defaults to 1)\\n\\nA deviceScaleFactor of 4 or 5 gives high quality screenshots suitable for print use.\\n\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/example-data\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/example-data\",\n \"text\": \"<$data title=\\\"$:/SiteTitle\\\" text=\\\"Innerwiki Demo\\\"/>\\n<$data title=\\\"$:/SiteSubtitle\\\" text=\\\"Wikis spawning wikis\\\"/>\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/examples\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/examples\",\n \"text\": \"\\\\define big-arrow(x,y,colour:\\\"#ff0000\\\",border:\\\"#000000\\\")\\n\\t<g transform=\\\"translate($x$,$y$)\\\">\\n\\t\\t<path d=\\\"m-81.43106,34.99315l40.25737,-49.78116l40.25737,49.78116l-20.12869,0l0,50.02069l-40.25737,0l0,-50.02069l-20.12869,0l0,0z\\\" fill=\\\"$colour$\\\" stroke=\\\"$border$\\\" stroke-dasharray=\\\"null\\\" stroke-linecap=\\\"null\\\" stroke-linejoin=\\\"null\\\" stroke-width=\\\"5\\\" transform=\\\"rotate(49.3775 -41.1737 35.1129)\\\"/>\\n\\t</g>\\n\\\\end\\n\\n\\\\define example(text)\\n<$codeblock code=<<__text__>>/>\\n\\nRenders as:\\n\\n$text$\\n\\\\end\\n\\n!! Browser\\n\\nThe innerwiki widget specifies the dimensions of the virtual screen used to render the wiki (in pixels) and CSS styles to apply to it. Nested `<$data>` widgets are used to specify individual payload tiddlers to be loaded into the wiki. In this example, we initialise the innerwiki with two tiddlers \\\"HelloThere\\\" and \\\"$:/DefaultTiddlers\\\":\\n\\n<$macrocall $name=\\\"example\\\" text=\\\"\\\"\\\"<$innerwiki width=\\\"1200\\\" height=\\\"400\\\" style=\\\"width:100%;\\\" filename=\\\"screenshot-1.png\\\">\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"This tiddler is inside a wiki\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"HelloThere\\\"/>\\n</$innerwiki>\\\"\\\"\\\"/>\\n\\nNote that the \\\"screenshot\\\" is a shrunken but fully interactive TiddlyWiki.\\n\\n!! Node.js\\n\\nTo render these examples as a PNG bitmap under Node.js, execute the following at the command prompt:\\n\\n```\\ntiddlywiki editions/innerwikidemo --screenshot $:/plugins/tiddlywiki/innerwiki/examples\\n```\\n\\nThe screenshots will be saved as `screenshot-1.png` etc in the `./output` folder of the wiki.\\n\\nTo render this example tiddler as a static HTML file that embeds the screenshot images and includes the SVG overlays:\\n\\n```\\ntiddlywiki editions/innerwikidemo --render '[[$:/plugins/tiddlywiki/innerwiki/examples]]' \\\"examples.html\\\" --build index\\n```\\n\\n!! SVG overlays\\n\\nAny displayable content within innerwiki widget is displayed within an automatically created SVG element. This allows overlays to be added:\\n\\n<$macrocall $name=\\\"example\\\" text=\\\"\\\"\\\"<$innerwiki width=\\\"1200\\\" height=\\\"400\\\" style=\\\"width:100%;\\\" filename=\\\"screenshot-2.png\\\">\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"This tiddler is inside a wiki\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"HelloThere\\\"/>\\n\\t<circle cx=\\\"600\\\" cy=\\\"50\\\" r=\\\"40\\\" stroke=\\\"black\\\" stroke-width=\\\"2\\\" fill=\\\"green\\\" />\\n\\t<<big-arrow 600 50>>\\n</$innerwiki>\\\"\\\"\\\"/>\\n\\nNotice how macros can be used to encapsulate SVG fragments ([[see the source of this tiddler|$:/plugins/tiddlywiki/innerwiki/examples]]).\\n\\n!! Clipping\\n\\nA clipping rectangle can be applied to limit the area of the wiki that is displayed. For example:\\n\\n<$macrocall $name=\\\"example\\\" text=\\\"\\\"\\\"<$innerwiki width=\\\"1200\\\" height=\\\"400\\\" style=\\\"width:100%;\\\" clipLeft=\\\"500\\\" clipTop=\\\"100\\\" clipWidth=\\\"600\\\" clipHeight=\\\"300\\\" filename=\\\"screenshot-3.png\\\">\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"! This tiddler is inside a wiki that is inside a wiki\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"HelloThere\\\"/>\\n</$innerwiki>\\\"\\\"\\\"/>\\n\\n!! Transcluding payload tiddlers\\n\\nThis example shows how the `<$data>` widget can be transcluded from other tiddlers (see $:/plugins/tiddlywiki/innerwiki/example-data):\\n\\n<$macrocall $name=\\\"example\\\" text=\\\"\\\"\\\"<$innerwiki width=\\\"600\\\" height=\\\"400\\\" style=\\\"width:100%;\\\" filename=\\\"screenshot-4.png\\\">\\n\\t{{$:/plugins/tiddlywiki/innerwiki/example-data}}\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"! This tiddler is inside a wiki that is inside a wiki\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"HelloThere\\\"/>\\n</$innerwiki>\\\"\\\"\\\"/>\\n\\n!! Customising the wiki state\\n\\nBy injecting the right payload tiddlers, the innerwiki can be initialised to any desired state. In this example we inject a configuration tiddler to make the \\\"more\\\" page control button visible, and a state tiddler to cause the dropdown to appear:\\n\\n<$macrocall $name=\\\"example\\\" text=\\\"\\\"\\\"<$innerwiki template=\\\"$:/plugins/tiddlywiki/innerwiki/template\\\" filename=\\\"screenshot-5.png\\\" width=\\\"1200\\\" height=\\\"400\\\" style=\\\"width:100%;\\\">\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"! This tiddler is inside a wiki that is inside a wiki\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"HelloThere\\\"/>\\n\\t<$data title=\\\"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions\\\" text=\\\"show\\\"/>\\n\\t<$data title=\\\"$:/state/popup/more--1600698846\\\" text=\\\"(151,144,21,25)\\\"/>\\n</$innerwiki>\\\"\\\"\\\"/>\\n\\n<$macrocall $name=\\\"example\\\" text=\\\"\\\"\\\"<$innerwiki template=\\\"$:/plugins/tiddlywiki/innerwiki/template\\\" filename=\\\"screenshot-6.png\\\" width=\\\"1200\\\" height=\\\"400\\\" style=\\\"width:100%;\\\">\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"! This tiddler is inside a wiki that is inside a wiki\\\"/>\\n\\t<$data title=\\\"Draft of 'HelloThere'\\\" text=\\\"This tiddler is inside a wiki that is inside a wiki\\\" draft.of=\\\"HelloThere\\\" draft.title=\\\"HelloThere\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"[[Draft of 'HelloThere']]\\\"/>\\n\\t<$data title=\\\"$:/state/sidebar\\\" text=\\\"no\\\"/>\\n\\t<$data title=\\\"$:/state/showeditpreview\\\" text=\\\"yes\\\"/>\\n</$innerwiki>\\\"\\\"\\\"/>\\n\\n!! Draggable anchors\\n\\nThis example shows how the `<$anchor>` widget is used to display draggable anchors overlaid on the innerwiki. The `<$anchor>` widget is used to declare the tiddlers containing the coordinates of each anchor. These tiddlers can then be transcluded by SVG graphic primitives to position them according to the anchor locations.\\n\\n<$macrocall $name=\\\"example\\\" text=\\\"\\\"\\\"screenshot-7-anchor-1-x: <$edit-text tag=\\\"input\\\" tiddler=\\\"screenshot-7-anchor-1-x\\\"/>\\n\\nscreenshot-7-anchor-1-y: <$edit-text tag=\\\"input\\\" tiddler=\\\"screenshot-7-anchor-1-y\\\"/>\\n\\nscreenshot-7-anchor-2-x: <$edit-text tag=\\\"input\\\" tiddler=\\\"screenshot-7-anchor-2-x\\\"/>\\n\\nscreenshot-7-anchor-2-y: <$edit-text tag=\\\"input\\\" tiddler=\\\"screenshot-7-anchor-2-y\\\"/>\\n\\n<$innerwiki template=\\\"$:/plugins/tiddlywiki/innerwiki/template\\\" filename=\\\"screenshot-7.png\\\" width=\\\"1200\\\" height=\\\"400\\\" style=\\\"width:100%;\\\">\\n\\t<$anchor x=\\\"screenshot-7-anchor-1-x\\\" y=\\\"screenshot-7-anchor-1-y\\\"/>\\n\\t<$anchor x=\\\"screenshot-7-anchor-2-x\\\" y=\\\"screenshot-7-anchor-2-y\\\"/>\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"! This tiddler is inside a wiki that is inside a wiki\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"HelloThere\\\"/>\\n\\t<$macrocall $name=\\\"big-arrow\\\" x={{screenshot-7-anchor-1-x}} y={{screenshot-7-anchor-1-y}}/>\\n\\t<circle cx={{screenshot-7-anchor-2-x}} cy={{screenshot-7-anchor-2-y}} r=\\\"50\\\" stroke=\\\"blue\\\" stroke-width=\\\"2\\\" fill=\\\"green\\\" />\\n</$innerwiki>\\\"\\\"\\\"/>\\n\\n!! Inception\\n\\nAn innerwiki can itself contain an inner-innerwiki:\\n\\n<$macrocall $name=\\\"example\\\" text=\\\"\\\"\\\"<$innerwiki width=\\\"1200\\\" height=\\\"600\\\" style=\\\"width:100%;\\\" filename=\\\"screenshot-8.png\\\">\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"! This tiddler is inside a wiki that is inside a wiki\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"HelloThere $:/plugins/tiddlywiki/innerwiki/inner-example\\\"/>\\n\\t<$data $tiddler=\\\"$:/plugins/tiddlywiki/innerwiki\\\"/>\\n\\t<<big-arrow 100 50 colour:#00ff00>>\\n</$innerwiki>\\\"\\\"\\\"/>\\n\\n(You can see the innerwiki here: $:/plugins/tiddlywiki/innerwiki/inner-example)\\n\\nNote the way that the innerwiki plugin has to be explicitly added to the innerwiki.\\n\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/inner-example\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/inner-example\",\n \"text\": \"<$innerwiki width=\\\"1200\\\" height=\\\"400\\\" style=\\\"width:100%;\\\">\\n\\t<$anchor x=\\\"screenshot-inner-anchor-1-x\\\" y=\\\"screenshot-inner-anchor-1-y\\\"/>\\n\\t<circle cx={{screenshot-inner-anchor-1-x}} cy={{screenshot-inner-anchor-1-y}} r=\\\"50\\\" stroke=\\\"blue\\\" stroke-width=\\\"2\\\" fill=\\\"green\\\" />\\n\\t<$data title=\\\"HelloThere\\\" text=\\\"! This tiddler is inside a wiki that is inside a wiki that is inside a wiki\\\"/>\\n\\t<$data title=\\\"$:/DefaultTiddlers\\\" text=\\\"HelloThere\\\"/>\\n\\t<$data title=\\\"$:/palette\\\" text=\\\"$:/palettes/SolarFlare\\\"/>\\n</$innerwiki>\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/readme\",\n \"text\": \"!! Introduction\\n\\nThis plugin enables TiddlyWiki to embed a modified copy of itself (an \\\"innerwiki\\\") with overlaid graphics. The primary motivation is to be able to produce screenshot illustrations that are automatically up-to-date with the appearance of TiddlyWiki as it changes over time, or to produce the same screenshot in different languages.\\n\\nIn the browser, innerwikis are displayed as an embedded iframe. Under Node.js [[Google's Puppeteer|https://pptr.dev/]] is used to load the innerwikis as off-screen web pages and then snapshot them as a PNG image.\\n\\n!! Warnings\\n\\nThe `<$innerwiki>` widget is relatively slow and resource intensive: each time it is refreshed it will entirely rebuild the iframe containing the innerwiki.\\n\\nThe `<$innerwiki>` widget does not automatically resize with its container (for example, try hiding the sidebar in this wiki).\\n\\n!! Prequisites\\n\\nIn order to take screenshots under Node.js, Google Puppeteer must first be installed from [[npm|https://npmjs.org//]]. For most situations, it should be installed at the root of the TiddlyWiki 5 repo:\\n\\n```\\ncd Jermolene/TiddlyWiki5\\nnpm install puppeteer\\n```\\n\\nHowever, if you're working in a different repo that uses npm to install TiddlyWiki 5 then you should install Puppeteer into the same repo. The general rule is that the `node_modules` folder containing Puppeteer should be contained within an ancestor of the folder containing TiddlyWiki's `tiddlywiki.js` file.\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/innerwiki.js\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/innerwiki.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/innerwiki/innerwiki.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget to display an innerwiki in an iframe\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar DEFAULT_INNERWIKI_TEMPLATE = \\\"$:/plugins/tiddlywiki/innerwiki/template\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget,\\n\\tDataWidget = require(\\\"$:/plugins/tiddlywiki/innerwiki/data.js\\\").data,\\n\\tdm = $tw.utils.domMaker;\\n\\nvar InnerWikiWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nInnerWikiWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nInnerWikiWidget.prototype.render = function(parent,nextSibling) {\\n\\tvar self = this;\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create wrapper\\n\\tthis.domWrapper = dm(\\\"div\\\",{\\n\\t\\tdocument: this.document,\\n\\t\\t\\\"class\\\": (this.innerWikiClass || \\\"\\\").split(\\\" \\\").concat([\\\"tc-innerwiki-wrapper\\\"]).join(\\\" \\\"),\\n\\t\\tstyle: {\\n\\t\\t\\toverflow: \\\"hidden\\\",\\n\\t\\t\\tposition: \\\"relative\\\",\\n\\t\\t\\tboxSizing: \\\"content-box\\\"\\n\\t\\t}\\n\\t});\\n\\t// Set up the SVG container\\n\\tthis.domSVG = dm(\\\"svg\\\",{\\n\\t\\tnamespace: \\\"http://www.w3.org/2000/svg\\\",\\n\\t\\tdocument: this.document,\\n\\t\\tstyle: {\\n\\t\\t\\twidth: \\\"100%\\\",\\n\\t\\t\\tposition: \\\"absolute\\\",\\n\\t\\t\\tzIndex: \\\"1\\\",\\n\\t\\t\\tpointerEvents: \\\"none\\\"\\n\\t\\t},\\n\\t\\tattributes: {\\n\\t\\t\\t\\\"viewBox\\\": \\\"0 0 \\\" + this.innerWikiClipWidth + \\\" \\\" + this.innerWikiClipHeight\\n\\t\\t}\\n\\t});\\n\\tthis.domWrapper.appendChild(this.domSVG);\\n\\tthis.setVariable(\\\"namespace\\\",\\\"http://www.w3.org/2000/svg\\\");\\n\\t// Create the iframe for the browser or image for Node.js\\n\\tif(!this.document.isTiddlyWikiFakeDom) {\\n\\t\\t// Create iframe\\n\\t\\tthis.domIFrame = dm(\\\"iframe\\\",{\\n\\t\\t\\tdocument: this.document,\\n\\t\\t\\t\\\"class\\\": \\\"tc-innerwiki-iframe\\\",\\n\\t\\t\\tstyle: {\\n\\t\\t\\t\\tposition: \\\"absolute\\\",\\n\\t\\t\\t\\tmaxWidth: \\\"none\\\",\\n\\t\\t\\t\\tborder: \\\"none\\\"\\n\\t\\t\\t},\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\twidth: this.innerWikiWidth,\\n\\t\\t\\t\\theight: this.innerWikiHeight\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tthis.domWrapper.appendChild(this.domIFrame);\\n\\t} else {\\n\\t\\t// Create image placeholder\\n\\t\\tthis.domImage = dm(\\\"img\\\",{\\n\\t\\t\\tdocument: this.document,\\n\\t\\t\\tstyle: {\\n\\t\\t\\t\\twidth: \\\"100%\\\"\\n\\t\\t\\t},\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tsrc: this.innerWikiFilename\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tthis.domWrapper.appendChild(this.domImage);\\n\\t}\\n\\t// Insert wrapper into the DOM\\n\\tparent.insertBefore(this.domWrapper,nextSibling);\\n\\tthis.renderChildren(this.domSVG,null);\\n\\tthis.domNodes.push(this.domWrapper);\\n\\t// If we're on the real DOM, finish the initialisation that needs us to be in the DOM\\n\\tif(!this.document.isTiddlyWikiFakeDom) {\\n\\t\\t// Write the HTML\\n\\t\\tthis.domIFrame.contentDocument.open();\\n\\t\\tthis.domIFrame.contentDocument.write(this.createInnerHTML());\\n\\t\\tthis.domIFrame.contentDocument.close();\\n\\t}\\n\\t// Scale the iframe and adjust the height of the wrapper\\n\\tthis.clipLeft = this.innerWikiClipLeft;\\n\\tthis.clipTop = this.innerWikiClipTop;\\n\\tthis.clipWidth = this.innerWikiClipWidth;\\n\\tthis.clipHeight = this.innerWikiClipHeight;\\n\\tthis.scale = this.domWrapper.clientWidth / this.clipWidth;\\n\\t// Display the anchors\\n\\tif(!this.document.isTiddlyWikiFakeDom) {\\n\\t\\tthis.domAnchorContainer = dm(\\\"div\\\",{\\n\\t\\t\\tdocument: this.document,\\n\\t\\t\\tstyle: {\\n\\t\\t\\t\\tposition: \\\"relative\\\",\\n\\t\\t\\t\\tzIndex: \\\"2\\\",\\n\\t\\t\\t\\ttransformOrigin: \\\"0 0\\\",\\n\\t\\t\\t\\ttransform: \\\"scale(\\\" + this.scale + \\\")\\\"\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tthis.domAnchorBackdrop = dm(\\\"div\\\",{\\n\\t\\t\\tdocument: this.document,\\n\\t\\t\\tstyle: {\\n\\t\\t\\t\\tposition: \\\"absolute\\\",\\n\\t\\t\\t\\tdisplay: \\\"none\\\"\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tthis.domAnchorContainer.appendChild(this.domAnchorBackdrop);\\n\\t\\tthis.domWrapper.insertBefore(this.domAnchorContainer,this.domWrapper.firstChild);\\n\\t\\tself.createAnchors();\\n\\t}\\n\\t// Scale the iframe and adjust the height of the wrapper\\n\\tif(!this.document.isTiddlyWikiFakeDom) {\\n\\t\\tthis.domIFrame.style.transformOrigin = this.clipLeft + \\\"px \\\" + this.clipTop + \\\"px\\\";\\n\\t\\tthis.domIFrame.style.transform = \\\"translate(\\\" + (-this.clipLeft) + \\\"px,\\\" + (-this.clipTop) + \\\"px) scale(\\\" + this.scale + \\\")\\\";\\n\\t\\tthis.domWrapper.style.height = (this.clipHeight * this.scale) + \\\"px\\\";\\n\\t}\\n};\\n\\n/*\\nCreate the anchors\\n*/\\nInnerWikiWidget.prototype.createAnchors = function() {\\n\\tvar self = this;\\n\\tthis.findDataWidgets(this.children,\\\"anchor\\\",function(widget) {\\n\\t\\tvar anchorWidth = 40,\\n\\t\\t\\tanchorHeight = 40,\\n\\t\\t\\tgetAnchorCoordinate = function(name) {\\n\\t\\t\\t\\treturn parseInt(self.wiki.getTiddlerText(widget.getAttribute(name)),10) || 0;\\n\\t\\t\\t},\\n\\t\\t\\tsetAnchorCoordinate = function(name,value) {\\n\\t\\t\\t\\tself.wiki.addTiddler({\\n\\t\\t\\t\\t\\ttitle: widget.getAttribute(name),\\n\\t\\t\\t\\t\\ttext: value + \\\"\\\"\\n\\t\\t\\t\\t});\\n\\t\\t\\t},\\n\\t\\t\\tdomAnchor = dm(\\\"img\\\",{\\n\\t\\t\\t\\tdocument: self.document,\\n\\t\\t\\t\\tstyle: {\\n\\t\\t\\t\\t\\tposition: \\\"absolute\\\",\\n\\t\\t\\t\\t\\twidth: anchorWidth + \\\"px\\\",\\n\\t\\t\\t\\t\\theight: anchorHeight + \\\"px\\\",\\n\\t\\t\\t\\t\\ttransformOrigin: \\\"50% 50%\\\",\\n\\t\\t\\t\\t\\ttransform: \\\"scale(\\\" + (1 / self.scale) + \\\")\\\",\\n\\t\\t\\t\\t\\tleft: (getAnchorCoordinate(\\\"x\\\") - anchorWidth / 2) + \\\"px\\\",\\n\\t\\t\\t\\t\\ttop: (getAnchorCoordinate(\\\"y\\\") - anchorHeight / 2) + \\\"px\\\"\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\tdraggable: false,\\n\\t\\t\\t\\t\\tsrc: \\\"data:image/svg+xml,\\\" + encodeURIComponent(self.wiki.getTiddlerText(\\\"$:/plugins/tiddlywiki/innerwiki/crosshairs.svg\\\"))\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\tself.domAnchorContainer.appendChild(domAnchor);\\n\\t\\tvar posX,posY,dragStartX,dragStartY,deltaX,deltaY,\\n\\t\\t\\tfnMouseDown = function(event) {\\n\\t\\t\\t\\tself.domAnchorBackdrop.style.width = self.clipWidth + \\\"px\\\";\\n\\t\\t\\t\\tself.domAnchorBackdrop.style.height = self.clipHeight + \\\"px\\\";\\n\\t\\t\\t\\tself.domAnchorBackdrop.style.display = \\\"block\\\";\\n\\t\\t\\t\\tposX = domAnchor.offsetLeft;\\n\\t\\t\\t\\tposY = domAnchor.offsetTop;\\n\\t\\t\\t\\tdragStartX = event.clientX;\\n\\t\\t\\t\\tdragStartY = event.clientY;\\n\\t\\t\\t\\tdeltaX = 0;\\n\\t\\t\\t\\tdeltaY = 0;\\n\\t\\t\\t\\tself.document.addEventListener(\\\"mousemove\\\",fnMouseMove,false);\\n\\t\\t\\t\\tself.document.addEventListener(\\\"mouseup\\\",fnMouseUp,false);\\n\\t\\t\\t},\\n\\t\\t\\tfnMouseMove = function(event) {\\n\\t\\t\\t\\tdeltaX = (event.clientX - dragStartX) / self.scale;\\n\\t\\t\\t\\tdeltaY = (event.clientY - dragStartY) / self.scale;\\n\\t\\t\\t\\tdomAnchor.style.left = (posX + deltaX) + \\\"px\\\";\\n\\t\\t\\t\\tdomAnchor.style.top = (posY + deltaY) + \\\"px\\\";\\n\\t\\t\\t},\\n\\t\\t\\tfnMouseUp = function(event) {\\n\\t\\t\\t\\tvar x = getAnchorCoordinate(\\\"x\\\") + deltaX,\\n\\t\\t\\t\\t\\ty = getAnchorCoordinate(\\\"y\\\") + deltaY;\\n\\t\\t\\t\\tif(x >= 0 && x < self.clipWidth && y >= 0 && y < self.clipHeight) {\\n\\t\\t\\t\\t\\tsetAnchorCoordinate(\\\"x\\\",x);\\n\\t\\t\\t\\t\\tsetAnchorCoordinate(\\\"y\\\",y);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tdomAnchor.style.left = posX + \\\"px\\\";\\n\\t\\t\\t\\t\\tdomAnchor.style.top = posY + \\\"px\\\";\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tself.domAnchorBackdrop.style.display = \\\"none\\\";\\n\\t\\t\\t\\tself.document.removeEventListener(\\\"mousemove\\\",fnMouseMove,false);\\n\\t\\t\\t\\tself.document.removeEventListener(\\\"mouseup\\\",fnMouseUp,false);\\n\\t\\t\\t};\\n\\t\\tdomAnchor.addEventListener(\\\"mousedown\\\",fnMouseDown,false);\\n\\t});\\n};\\n\\n/*\\nDelete the anchors\\n*/\\nInnerWikiWidget.prototype.deleteAnchors = function() {\\n\\tfor(var index=this.domAnchorContainer.childNodes.length-1; index>=0; index--) {\\n\\t\\tvar node = this.domAnchorContainer.childNodes[index];\\n\\t\\tif(node.tagName === \\\"IMG\\\") {\\n\\t\\t\\tnode.parentNode.removeChild(node);\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nCreate the HTML of the innerwiki\\n*/\\nInnerWikiWidget.prototype.createInnerHTML = function() {\\n\\t// Get the HTML of the iframe\\n\\tvar html = this.wiki.renderTiddler(\\\"text/plain\\\",this.innerWikiTemplate);\\n\\t// Insert the overlay tiddlers\\n\\tvar SPLIT_MARKER = \\\"<!--~~ Boot\\\" + \\\" kernel ~~-->\\\\n\\\",\\n\\t\\tIMPLANT_PREFIX = \\\"<\\\" + \\\"script>\\\\n$tw.preloadTiddlerArray(\\\",\\n\\t\\tIMPLANT_SUFFIX = \\\");\\\\n</\\\" + \\\"script>\\\\n\\\",\\n\\t\\tparts = html.split(SPLIT_MARKER),\\n\\t\\ttiddlers = this.readTiddlerDataWidgets(this.children);\\n\\tif(parts.length === 2) {\\n\\t\\thtml = parts[0] + IMPLANT_PREFIX + JSON.stringify(tiddlers) + IMPLANT_SUFFIX + SPLIT_MARKER + parts[1];\\n\\t}\\n\\treturn html;\\n};\\n\\n/*\\nFind child data widgets\\n*/\\nInnerWikiWidget.prototype.findDataWidgets = function(children,tag,callback) {\\n\\tvar self = this;\\n\\t$tw.utils.each(children,function(child) {\\n\\t\\tif(child.dataWidgetTag === tag) {\\n\\t\\t\\tcallback(child);\\n\\t\\t}\\n\\t\\tif(child.children) {\\n\\t\\t\\tself.findDataWidgets(child.children,tag,callback);\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nFind the child data widgets\\n*/\\nInnerWikiWidget.prototype.readTiddlerDataWidgets = function(children) {\\n\\tvar self = this,\\n\\t\\tresults = [];\\n\\tthis.findDataWidgets(children,\\\"data\\\",function(widget) {\\n\\t\\tArray.prototype.push.apply(results,self.readTiddlerDataWidget(widget));\\n\\t});\\n\\treturn results;\\n};\\n\\n/*\\nRead the value(s) from a data widget\\n*/\\nInnerWikiWidget.prototype.readTiddlerDataWidget = function(dataWidget) {\\n\\t// Start with a blank object\\n\\tvar item = Object.create(null);\\n\\t// Read any attributes not prefixed with $\\n\\t$tw.utils.each(dataWidget.attributes,function(value,name) {\\n\\t\\tif(name.charAt(0) !== \\\"$\\\") {\\n\\t\\t\\titem[name] = value;\\t\\t\\t\\n\\t\\t}\\n\\t});\\n\\t// Deal with $tiddler or $filter attributes\\n\\tvar titles;\\n\\tif(dataWidget.hasAttribute(\\\"$tiddler\\\")) {\\n\\t\\ttitles = [dataWidget.getAttribute(\\\"$tiddler\\\")];\\n\\t} else if(dataWidget.hasAttribute(\\\"$filter\\\")) {\\n\\t\\ttitles = this.wiki.filterTiddlers(dataWidget.getAttribute(\\\"$filter\\\"));\\n\\t}\\n\\tif(titles) {\\n\\t\\tvar self = this;\\n\\t\\tvar results = [];\\n\\t\\t$tw.utils.each(titles,function(title,index) {\\n\\t\\t\\tvar tiddler = self.wiki.getTiddler(title),\\n\\t\\t\\t\\tfields;\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\tfields = tiddler.getFieldStrings();\\n\\t\\t\\t}\\n\\t\\t\\tresults.push($tw.utils.extend({},item,fields));\\n\\t\\t})\\n\\t\\treturn results;\\n\\t} else {\\n\\t\\treturn [item];\\t\\t\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nInnerWikiWidget.prototype.execute = function() {\\n\\tvar parseStringAsNumber = function(num,defaultValue) {\\n\\t\\tnum = parseInt(num + \\\"\\\",10);\\n\\t\\tif(!isNaN(num)) {\\n\\t\\t\\treturn num;\\n\\t\\t} else {\\n\\t\\t\\treturn parseInt(defaultValue + \\\"\\\",10);\\n\\t\\t}\\n\\t};\\n\\t// Get our parameters\\n\\tthis.innerWikiTemplate = this.getAttribute(\\\"template\\\",DEFAULT_INNERWIKI_TEMPLATE);\\n\\tthis.innerWikiWidth = parseStringAsNumber(this.getAttribute(\\\"width\\\"),800);\\n\\tthis.innerWikiHeight = parseStringAsNumber(this.getAttribute(\\\"height\\\"),600);\\n\\tthis.innerWikiStyle = this.getAttribute(\\\"style\\\");\\n\\tthis.innerWikiClass = this.getAttribute(\\\"class\\\");\\n\\tthis.innerWikiFilename = this.getAttribute(\\\"filename\\\");\\n\\tthis.innerWikiClipLeft = parseStringAsNumber(this.getAttribute(\\\"clipLeft\\\"),0);\\n\\tthis.innerWikiClipTop = parseStringAsNumber(this.getAttribute(\\\"clipTop\\\"),0);\\n\\tthis.innerWikiClipWidth = parseStringAsNumber(this.getAttribute(\\\"clipWidth\\\"),this.innerWikiWidth);\\n\\tthis.innerWikiClipHeight = parseStringAsNumber(this.getAttribute(\\\"clipHeight\\\"),this.innerWikiHeight);\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nInnerWikiWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.template || changedAttributes.width || changedAttributes.height || changedAttributes.style || changedAttributes.class) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\\n\\t\\tif(childrenRefreshed) {\\n\\t\\t\\tthis.deleteAnchors();\\n\\t\\t\\tthis.createAnchors();\\n\\t\\t}\\n\\t\\treturn childrenRefreshed\\n\\t}\\n};\\n\\n/*\\nUse Puppeteer to save a screenshot to a file\\n*/\\nInnerWikiWidget.prototype.saveScreenshot = function(options,callback) {\\n\\tvar self = this,\\n\\t\\tbasepath = options.basepath || \\\".\\\",\\n\\t\\tdeviceScaleFactor = options.deviceScaleFactor || 1;\\n\\t// Don't do anything if we don't have a filename\\n\\tif(!this.innerWikiFilename) {\\n\\t\\treturn callback(null);\\n\\t}\\n\\tvar path = require(\\\"path\\\"),\\n\\t\\tfilepath = path.resolve(basepath,this.innerWikiFilename);\\n\\t$tw.utils.createFileDirectories(filepath);\\n\\tconsole.log(\\\"Taking screenshot\\\",filepath);\\n\\t// Fire up Puppeteer\\n\\tvar puppeteer;\\n\\ttry {\\n\\t\\tpuppeteer = require(\\\"puppeteer\\\");\\n\\t} catch(e) {\\n\\t\\tthrow \\\"Google Puppeteer not found\\\";\\n\\t}\\n\\t// Take screenshots\\n\\tpuppeteer.launch().then(async browser => {\\n\\t\\t// NOTE: Copying Google's sample code by using new fangled promises \\\"await\\\"\\n\\t\\tconst page = await browser.newPage();\\n\\t\\tawait page.setContent(self.createInnerHTML(),{\\n\\t\\t\\twaitUntil: \\\"domcontentloaded\\\"\\n\\t\\t});\\n\\t\\tawait page.setViewport({\\n\\t\\t\\twidth: Math.trunc(self.innerWikiWidth),\\n\\t\\t\\theight: Math.trunc(self.innerWikiHeight),\\n\\t\\t\\tdeviceScaleFactor: deviceScaleFactor\\n\\t\\t});\\n\\t\\t// PDF generation isn't great: there's no clipping, and pagination is hard to control\\n\\t\\t// await page.emulateMedia(\\\"screen\\\");\\n\\t\\t// await page.pdf({\\n\\t\\t// \\tscale: 0.5,\\n\\t\\t// \\twidth: self.innerWikiWidth + \\\"px\\\",\\n\\t\\t// \\theight: self.innerWikiHeight + \\\"px\\\",\\n\\t\\t// \\tpath: filepath + \\\".pdf\\\",\\n\\t\\t// \\tprintBackground: true\\n\\t\\t// });\\n\\t\\tawait page.screenshot({\\n\\t\\t\\tpath: filepath,\\n\\t\\t\\tclip: {\\n\\t\\t\\t\\tx: self.innerWikiClipLeft,\\n\\t\\t\\t\\ty: self.innerWikiClipTop,\\n\\t\\t\\t\\twidth: self.innerWikiClipWidth,\\n\\t\\t\\t\\theight: self.innerWikiClipHeight\\n\\t\\t\\t},\\n\\t\\t\\ttype: \\\"png\\\"\\n\\t\\t});\\n\\t\\tawait browser.close();\\n\\t\\tcallback(null);\\n\\t});\\n};\\n\\nexports.innerwiki = InnerWikiWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/screenshot.js\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/screenshot.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/innerwiki/screenshot.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommands to render tiddlers identified by a filter and save any screenshots identified by <$innerwiki> widgets\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar InnerWikiWidget = require(\\\"$:/plugins/tiddlywiki/innerwiki/innerwiki.js\\\").innerwiki;\\n\\nexports.info = {\\n\\tname: \\\"screenshot\\\",\\n\\tsynchronous: false\\n};\\n\\nvar Command = function(params,commander,callback) {\\n\\tthis.params = params;\\n\\tthis.commander = commander;\\n\\tthis.callback = callback;\\n};\\n\\nCommand.prototype.execute = function() {\\n\\tvar self = this;\\n\\tif(this.params.length < 1) {\\n\\t\\treturn \\\"Missing filter\\\";\\n\\t}\\n\\tvar filter = this.params[0],\\n\\t\\tdeviceScaleFactor = parseInt(this.params[1],10) || 1,\\n\\t\\ttiddlers = this.commander.wiki.filterTiddlers(filter);\\n\\t// Render each tiddler into a widget tree\\n\\tvar innerWikiWidgets = [];\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\tvar parser = self.commander.wiki.parseTiddler(title),\\n\\t\\t\\tvariables = {currentTiddler: title},\\n\\t\\t\\twidgetNode = self.commander.wiki.makeWidget(parser,{variables: variables}),\\n\\t\\t\\tcontainer = $tw.fakeDocument.createElement(\\\"div\\\");\\n\\t\\twidgetNode.render(container,null);\\n\\t\\t// Find any innerwiki widgets\\n\\t\\tArray.prototype.push.apply(innerWikiWidgets,self.findInnerWikiWidgets(widgetNode));\\n\\t});\\n\\t// Asynchronously tell each innerwiki widget to save a screenshot\\n\\tvar processNextInnerWikiWidget = function() {\\n\\t\\tif(innerWikiWidgets.length > 0) {\\n\\t\\t\\tvar widget = innerWikiWidgets[0];\\n\\t\\t\\tinnerWikiWidgets.shift();\\n\\t\\t\\twidget.saveScreenshot({\\n\\t\\t\\t\\tbasepath: self.commander.outputPath,\\n\\t\\t\\t\\tdeviceScaleFactor: deviceScaleFactor\\n\\t\\t\\t},function(err) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\tself.callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tprocessNextInnerWikiWidget();\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tself.callback(null);\\n\\t\\t}\\n\\t};\\n\\tprocessNextInnerWikiWidget();\\n\\treturn null;\\n};\\n\\nCommand.prototype.findInnerWikiWidgets = function(widgetNode) {\\n\\tvar self = this,\\n\\t\\tresults = [];\\n\\tif(widgetNode.saveScreenshot) {\\n\\t\\tresults.push(widgetNode)\\n\\t}\\n\\t$tw.utils.each(widgetNode.children,function(childWidget) {\\n\\t\\tArray.prototype.push.apply(results,self.findInnerWikiWidgets(childWidget));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.Command = Command;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"command\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-innerwiki-wrapper {\\n\\tborder: 1px solid #666;\\n\\t<<box-shadow \\\"2px 2px 5px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/innerwiki/template\": {\n \"title\": \"$:/plugins/tiddlywiki/innerwiki/template\",\n \"text\": \"\\\\define saveTiddlerFilter()\\n$:/boot/boot.css\\n$:/boot/boot.js\\n$:/boot/bootprefix.js\\n$:/core\\n$:/library/sjcl.js\\n$:/plugins/tiddlywiki/innerwiki\\n$:/plugins/tiddlywiki/railroad\\n$:/themes/tiddlywiki/snowwhite\\n$:/themes/tiddlywiki/vanilla\\n\\\\end\\n{{$:/core/templates/tiddlywiki5.html}}\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/internals":{"title":"$:/plugins/tiddlywiki/internals","name":"Internals","description":"Tools for exploring the internals of TiddlyWiki","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree\": {\n \"title\": \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree\",\n \"tags\": \"$:/tags/EditPreview\",\n \"list-after\": \"$:/core/ui/EditTemplate/body/preview/output\",\n \"caption\": \"parse tree\",\n \"text\": \"\\\\define preview(mode)\\n<$wikify name=\\\"preview-text\\\" text={{!!text}} type={{!!type}} mode=\\\"$mode$\\\" output=\\\"parsetree\\\">\\n<pre>\\n<code>\\n<$text text=<<preview-text>>/>\\n</code>\\n</pre>\\n</$wikify>\\n\\\\end\\n\\n{{||$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared}}\\n\"\n },\n \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/raw\": {\n \"title\": \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/raw\",\n \"tags\": \"$:/tags/EditPreview\",\n \"caption\": \"raw HTML\",\n \"list-after\": \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree\",\n \"text\": \"<pre><code><$view field=\\\"text\\\" format=\\\"htmlwikified\\\" /></code></pre>\\n\"\n },\n \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared\": {\n \"title\": \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared\",\n \"text\": \"\\\\define body()\\n\\nMode: <$select tiddler=\\\"$(tv-mode-configuration)$\\\" default=\\\"block\\\">\\n<option value=\\\"inline\\\">Inline</option>\\n<option value=\\\"block\\\">Block</option>\\n</$select>\\n\\n<$macrocall $name=\\\"preview\\\" mode={{$(tv-mode-configuration)$}}/>\\n\\\\end\\n\\n<div class=\\\"tc-internal-tree-preview-wrapper\\\">\\n\\n<div class=\\\"tc-internal-tree-preview\\\">\\n\\n<$vars tv-mode-configuration=<<qualify \\\"$:/state/internals/preview/mode\\\">>>\\n\\n<<body>>\\n\\n</$vars>\\n\\n</div>\\n\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree\": {\n \"title\": \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/widget-tree\",\n \"tags\": \"$:/tags/EditPreview\",\n \"caption\": \"widget tree\",\n \"list-after\": \"$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/parse-tree\",\n \"text\": \"\\\\define preview(mode)\\n<$wikify name=\\\"preview-text\\\" text={{!!text}} type={{!!type}} mode=\\\"$mode$\\\" output=\\\"widgettree\\\">\\n<pre>\\n<code>\\n<$text text=<<preview-text>>/>\\n</code>\\n</pre>\\n</$wikify>\\n\\\\end\\n\\n{{||$:/plugins/tiddlywiki/internals/EditTemplate/body/preview/shared}}\\n\"\n },\n \"$:/plugins/tiddlywiki/internals/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/internals/readme\",\n \"text\": \"This plugin adds features to help explore the internals of TiddlyWiki:\\n\\n* New preview panes showing:\\n** the parse tree\\n** the widget tree\\n** the raw HTML output\\n\\nThe first two include a dropdown for choosing block vs. inline parsing mode.\\n\"\n },\n \"$:/plugins/tiddlywiki/internals/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/internals/styles\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/jasmine":{"title":"$:/plugins/tiddlywiki/jasmine","name":"Jasmine","description":"Jasmine testing framework","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/jasmine/jasmine/command.js\": {\n \"text\": \"var path = require('path'),\\n fs = require('fs');\\n\\nexports = module.exports = Command;\\n\\nvar subCommands = {\\n init: {\\n description: 'initialize jasmine',\\n action: initJasmine\\n },\\n examples: {\\n description: 'install examples',\\n action: installExamples\\n },\\n help: {\\n description: 'show help',\\n action: help,\\n alias: '-h'\\n },\\n version: {\\n description: 'show jasmine and jasmine-core versions',\\n action: version,\\n alias: '-v'\\n }\\n};\\n\\nfunction Command(projectBaseDir, examplesDir, print) {\\n this.projectBaseDir = projectBaseDir;\\n this.specDir = path.join(projectBaseDir, 'spec');\\n\\n var command = this;\\n\\n this.run = function(jasmine, commands) {\\n setEnvironmentVariables(commands);\\n\\n var commandToRun;\\n Object.keys(subCommands).forEach(function(cmd) {\\n var commandObject = subCommands[cmd];\\n if (commands.indexOf(cmd) >= 0) {\\n commandToRun = commandObject;\\n } else if(commandObject.alias && commands.indexOf(commandObject.alias) >= 0) {\\n commandToRun = commandObject;\\n }\\n });\\n\\n if (commandToRun) {\\n commandToRun.action({jasmine: jasmine, projectBaseDir: command.projectBaseDir, specDir: command.specDir, examplesDir: examplesDir, print: print});\\n } else {\\n var env = parseOptions(commands);\\n if (env.unknownOptions.length > 0) {\\n process.exitCode = 1;\\n print('Unknown options: ' + env.unknownOptions.join(', '));\\n print('');\\n help({print: print});\\n } else {\\n runJasmine(jasmine, env, print);\\n }\\n }\\n };\\n}\\n\\nfunction isFileArg(arg) {\\n return arg.indexOf('--') !== 0 && !isEnvironmentVariable(arg);\\n}\\n\\nfunction parseOptions(argv) {\\n var files = [],\\n helpers = [],\\n requires = [],\\n unknownOptions = [],\\n color = process.stdout.isTTY || false,\\n reporter,\\n configPath,\\n filter,\\n stopOnFailure,\\n failFast,\\n random,\\n seed;\\n\\n argv.forEach(function(arg) {\\n if (arg === '--no-color') {\\n color = false;\\n } else if (arg === '--color') {\\n color = true;\\n } else if (arg.match(\\\"^--filter=\\\")) {\\n filter = arg.match(\\\"^--filter=(.*)\\\")[1];\\n } else if (arg.match(\\\"^--helper=\\\")) {\\n helpers.push(arg.match(\\\"^--helper=(.*)\\\")[1]);\\n } else if (arg.match(\\\"^--require=\\\")) {\\n requires.push(arg.match(\\\"^--require=(.*)\\\")[1]);\\n } else if (arg.match(\\\"^--stop-on-failure=\\\")) {\\n stopOnFailure = arg.match(\\\"^--stop-on-failure=(.*)\\\")[1] === 'true';\\n } else if (arg.match(\\\"^--fail-fast=\\\")) {\\n failFast = arg.match(\\\"^--fail-fast=(.*)\\\")[1] === 'true';\\n } else if (arg.match(\\\"^--random=\\\")) {\\n random = arg.match(\\\"^--random=(.*)\\\")[1] === 'true';\\n } else if (arg.match(\\\"^--seed=\\\")) {\\n seed = arg.match(\\\"^--seed=(.*)\\\")[1];\\n } else if (arg.match(\\\"^--config=\\\")) {\\n configPath = arg.match(\\\"^--config=(.*)\\\")[1];\\n } else if (arg.match(\\\"^--reporter=\\\")) {\\n reporter = arg.match(\\\"^--reporter=(.*)\\\")[1];\\n } else if (isFileArg(arg)) {\\n files.push(arg);\\n } else if (!isEnvironmentVariable(arg)) {\\n unknownOptions.push(arg);\\n }\\n });\\n return {\\n color: color,\\n configPath: configPath,\\n filter: filter,\\n stopOnFailure: stopOnFailure,\\n failFast: failFast,\\n helpers: helpers,\\n requires: requires,\\n reporter: reporter,\\n files: files,\\n random: random,\\n seed: seed,\\n unknownOptions: unknownOptions\\n };\\n}\\n\\nfunction runJasmine(jasmine, env, print) {\\n jasmine.loadConfigFile(env.configPath || process.env.JASMINE_CONFIG_PATH);\\n if (env.stopOnFailure !== undefined) {\\n jasmine.stopSpecOnExpectationFailure(env.stopOnFailure);\\n }\\n if (env.failFast !== undefined) {\\n jasmine.stopOnSpecFailure(env.failFast);\\n }\\n if (env.seed !== undefined) {\\n jasmine.seed(env.seed);\\n }\\n if (env.random !== undefined) {\\n jasmine.randomizeTests(env.random);\\n }\\n if (env.helpers !== undefined && env.helpers.length) {\\n jasmine.addHelperFiles(env.helpers);\\n }\\n if (env.requires !== undefined && env.requires.length) {\\n jasmine.addRequires(env.requires);\\n }\\n if (env.reporter !== undefined) {\\n try {\\n var Report = require(env.reporter);\\n var reporter = new Report();\\n jasmine.clearReporters();\\n jasmine.addReporter(reporter);\\n } catch(e) {\\n print('failed to register reporter \\\"' + env.reporter + '\\\"');\\n print(e.message);\\n print(e.stack);\\n }\\n }\\n jasmine.showColors(env.color);\\n jasmine.execute(env.files, env.filter);\\n}\\n\\nfunction initJasmine(options) {\\n var print = options.print;\\n var specDir = options.specDir;\\n makeDirStructure(path.join(specDir, 'support/'));\\n if(!fs.existsSync(path.join(specDir, 'support/jasmine.json'))) {\\n fs.writeFileSync(path.join(specDir, 'support/jasmine.json'), fs.readFileSync(path.join(__dirname, '../lib/examples/jasmine.json'), 'utf-8'));\\n }\\n else {\\n print('spec/support/jasmine.json already exists in your project.');\\n }\\n}\\n\\nfunction installExamples(options) {\\n var specDir = options.specDir;\\n var projectBaseDir = options.projectBaseDir;\\n var examplesDir = options.examplesDir;\\n\\n makeDirStructure(path.join(specDir, 'support'));\\n makeDirStructure(path.join(specDir, 'jasmine_examples'));\\n makeDirStructure(path.join(specDir, 'helpers', 'jasmine_examples'));\\n makeDirStructure(path.join(projectBaseDir, 'lib', 'jasmine_examples'));\\n\\n copyFiles(\\n path.join(examplesDir, 'spec', 'helpers', 'jasmine_examples'),\\n path.join(specDir, 'helpers', 'jasmine_examples'),\\n new RegExp(/[Hh]elper\\\\.js/)\\n );\\n\\n copyFiles(\\n path.join(examplesDir, 'lib', 'jasmine_examples'),\\n path.join(projectBaseDir, 'lib', 'jasmine_examples'),\\n new RegExp(/\\\\.js/)\\n );\\n\\n copyFiles(\\n path.join(examplesDir, 'spec', 'jasmine_examples'),\\n path.join(specDir, 'jasmine_examples'),\\n new RegExp(/[Ss]pec.js/)\\n );\\n}\\n\\nfunction help(options) {\\n var print = options.print;\\n print('Usage: jasmine [command] [options] [files]');\\n print('');\\n print('Commands:');\\n Object.keys(subCommands).forEach(function(cmd) {\\n var commandNameText = cmd;\\n if(subCommands[cmd].alias) {\\n commandNameText = commandNameText + ',' + subCommands[cmd].alias;\\n }\\n print('%s\\\\t%s', lPad(commandNameText, 10), subCommands[cmd].description);\\n });\\n print('');\\n print('If no command is given, jasmine specs will be run');\\n print('');\\n print('');\\n\\n print('Options:');\\n print('%s\\\\tturn off color in spec output', lPad('--no-color', 18));\\n print('%s\\\\tforce turn on color in spec output', lPad('--color', 18));\\n print('%s\\\\tfilter specs to run only those that match the given string', lPad('--filter=', 18));\\n print('%s\\\\tload helper files that match the given string', lPad('--helper=', 18));\\n print('%s\\\\tload module that match the given string', lPad('--require=', 18));\\n print('%s\\\\t[true|false] stop spec execution on expectation failure', lPad('--stop-on-failure=', 18));\\n print('%s\\\\t[true|false] stop Jasmine execution on spec failure', lPad('--fail-fast=', 18));\\n print('%s\\\\tpath to your optional jasmine.json', lPad('--config=', 18));\\n print('%s\\\\tpath to reporter to use instead of the default Jasmine reporter', lPad('--reporter=', 18));\\n print('');\\n print('The given arguments take precedence over options in your jasmine.json');\\n print('The path to your optional jasmine.json can also be configured by setting the JASMINE_CONFIG_PATH environment variable');\\n}\\n\\nfunction version(options) {\\n var print = options.print;\\n print('jasmine v' + require('../package.json').version);\\n print('jasmine-core v' + options.jasmine.coreVersion());\\n}\\n\\nfunction lPad(str, length) {\\n if (str.length >= length) {\\n return str;\\n } else {\\n return lPad(' ' + str, length);\\n }\\n}\\n\\nfunction copyFiles(srcDir, destDir, pattern) {\\n var srcDirFiles = fs.readdirSync(srcDir);\\n srcDirFiles.forEach(function(file) {\\n if (file.search(pattern) !== -1) {\\n fs.writeFileSync(path.join(destDir, file), fs.readFileSync(path.join(srcDir, file)));\\n }\\n });\\n}\\n\\nfunction makeDirStructure(absolutePath) {\\n var splitPath = absolutePath.split(path.sep);\\n splitPath.forEach(function(dir, index) {\\n if(index > 1) {\\n var fullPath = path.join(splitPath.slice(0, index).join('/'), dir);\\n if (!fs.existsSync(fullPath)) {\\n fs.mkdirSync(fullPath);\\n }\\n }\\n });\\n}\\n\\nfunction isEnvironmentVariable(command) {\\n var envRegExp = /(.*)=(.*)/;\\n return command.match(envRegExp);\\n}\\n\\nfunction setEnvironmentVariables(commands) {\\n commands.forEach(function (command) {\\n var regExpMatch = isEnvironmentVariable(command);\\n if(regExpMatch) {\\n var key = regExpMatch[1];\\n var value = regExpMatch[2];\\n process.env[key] = value;\\n }\\n });\\n}\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine/command.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine/jasmine.js\": {\n \"text\": \"var path = require('path'),\\n util = require('util'),\\n glob = require('glob'),\\n CompletionReporter = require('./reporters/completion_reporter'),\\n ConsoleSpecFilter = require('./filters/console_spec_filter');\\n\\nmodule.exports = Jasmine;\\nmodule.exports.ConsoleReporter = require('./reporters/console_reporter');\\n\\nfunction Jasmine(options) {\\n options = options || {};\\n var jasmineCore = options.jasmineCore || require('jasmine-core');\\n this.jasmineCorePath = path.join(jasmineCore.files.path, 'jasmine.js');\\n this.jasmine = jasmineCore.boot(jasmineCore);\\n this.projectBaseDir = options.projectBaseDir || path.resolve();\\n this.specDir = '';\\n this.specFiles = [];\\n this.helperFiles = [];\\n this.requires = [];\\n this.env = this.jasmine.getEnv({suppressLoadErrors: true});\\n this.reportersCount = 0;\\n this.completionReporter = new CompletionReporter();\\n this.onCompleteCallbackAdded = false;\\n this.exit = process.exit;\\n this.showingColors = true;\\n this.reporter = new module.exports.ConsoleReporter();\\n this.addReporter(this.reporter);\\n this.defaultReporterConfigured = false;\\n\\n var jasmineRunner = this;\\n this.completionReporter.onComplete(function(passed) {\\n jasmineRunner.exitCodeCompletion(passed);\\n });\\n this.checkExit = checkExit(this);\\n\\n this.coreVersion = function() {\\n return jasmineCore.version();\\n };\\n}\\n\\nJasmine.prototype.randomizeTests = function(value) {\\n this.env.configure({random: value});\\n};\\n\\nJasmine.prototype.seed = function(value) {\\n this.env.configure({seed: value});\\n};\\n\\nJasmine.prototype.showColors = function(value) {\\n this.showingColors = value;\\n};\\n\\nJasmine.prototype.addSpecFile = function(filePath) {\\n this.specFiles.push(filePath);\\n};\\n\\nJasmine.prototype.addReporter = function(reporter) {\\n this.env.addReporter(reporter);\\n this.reportersCount++;\\n};\\n\\nJasmine.prototype.clearReporters = function() {\\n this.env.clearReporters();\\n this.reportersCount = 0;\\n};\\n\\nJasmine.prototype.provideFallbackReporter = function(reporter) {\\n this.env.provideFallbackReporter(reporter);\\n};\\n\\nJasmine.prototype.configureDefaultReporter = function(options) {\\n options.timer = options.timer || new this.jasmine.Timer();\\n options.print = options.print || function() {\\n process.stdout.write(util.format.apply(this, arguments));\\n };\\n options.showColors = options.hasOwnProperty('showColors') ? options.showColors : true;\\n options.jasmineCorePath = options.jasmineCorePath || this.jasmineCorePath;\\n\\n this.reporter.setOptions(options);\\n this.defaultReporterConfigured = true;\\n};\\n\\nJasmine.prototype.addMatchers = function(matchers) {\\n this.env.addMatchers(matchers);\\n};\\n\\nJasmine.prototype.loadSpecs = function() {\\n this.specFiles.forEach(function(file) {\\n require(file);\\n });\\n};\\n\\nJasmine.prototype.loadHelpers = function() {\\n this.helperFiles.forEach(function(file) {\\n require(file);\\n });\\n};\\n\\nJasmine.prototype.loadRequires = function() {\\n this.requires.forEach(function(r) {\\n require(r);\\n });\\n};\\n\\nJasmine.prototype.loadConfigFile = function(configFilePath) {\\n try {\\n var absoluteConfigFilePath = path.resolve(this.projectBaseDir, configFilePath || 'spec/support/jasmine.json');\\n var config = require(absoluteConfigFilePath);\\n this.loadConfig(config);\\n } catch (e) {\\n if(configFilePath || e.code != 'MODULE_NOT_FOUND') { throw e; }\\n }\\n};\\n\\nJasmine.prototype.loadConfig = function(config) {\\n this.specDir = config.spec_dir || this.specDir;\\n\\n var configuration = {};\\n\\n if (config.stopSpecOnExpectationFailure !== undefined) {\\n configuration.oneFailurePerSpec = config.stopSpecOnExpectationFailure;\\n }\\n\\n if (config.stopOnSpecFailure !== undefined) {\\n configuration.failFast = config.stopOnSpecFailure;\\n }\\n\\n if (config.random !== undefined) {\\n configuration.random = config.random;\\n }\\n\\n if (Object.keys(configuration).length > 0) {\\n this.env.configure(configuration);\\n }\\n\\n if(config.helpers) {\\n this.addHelperFiles(config.helpers);\\n }\\n\\n if(config.requires) {\\n this.addRequires(config.requires);\\n }\\n\\n if(config.spec_files) {\\n this.addSpecFiles(config.spec_files);\\n }\\n};\\n\\nJasmine.prototype.addHelperFiles = addFiles('helperFiles');\\nJasmine.prototype.addSpecFiles = addFiles('specFiles');\\n\\nJasmine.prototype.addRequires = function(requires) {\\n var jasmineRunner = this;\\n requires.forEach(function(r) {\\n jasmineRunner.requires.push(r);\\n });\\n};\\n\\nfunction addFiles(kind) {\\n return function (files) {\\n var jasmineRunner = this;\\n var fileArr = this[kind];\\n\\n var includeFiles = [];\\n var excludeFiles = [];\\n files.forEach(function(file) {\\n if (file.startsWith('!')) {\\n var excludeFile = file.substring(1);\\n if(!(path.isAbsolute && path.isAbsolute(excludeFile))) {\\n excludeFile = path.join(jasmineRunner.projectBaseDir, jasmineRunner.specDir, excludeFile);\\n }\\n\\n excludeFiles.push(excludeFile);\\n } else {\\n includeFiles.push(file);\\n }\\n });\\n\\n includeFiles.forEach(function(file) {\\n if(!(path.isAbsolute && path.isAbsolute(file))) {\\n file = path.join(jasmineRunner.projectBaseDir, jasmineRunner.specDir, file);\\n }\\n var filePaths = glob.sync(file, { ignore: excludeFiles });\\n filePaths.forEach(function(filePath) {\\n // glob will always output '/' as a segment separator but the fileArr may use \\\\ on windows\\n // fileArr needs to be checked for both versions\\n if(fileArr.indexOf(filePath) === -1 && fileArr.indexOf(path.normalize(filePath)) === -1) {\\n fileArr.push(filePath);\\n }\\n });\\n });\\n };\\n}\\n\\nJasmine.prototype.onComplete = function(onCompleteCallback) {\\n this.completionReporter.onComplete(onCompleteCallback);\\n};\\n\\nJasmine.prototype.stopSpecOnExpectationFailure = function(value) {\\n this.env.configure({oneFailurePerSpec: value});\\n};\\n\\nJasmine.prototype.stopOnSpecFailure = function(value) {\\n this.env.configure({failFast: value});\\n};\\n\\nJasmine.prototype.exitCodeCompletion = function(passed) {\\n var jasmineRunner = this;\\n var streams = [process.stdout, process.stderr];\\n var writesToWait = streams.length;\\n streams.forEach(function(stream) {\\n stream.write('', null, exitIfAllStreamsCompleted);\\n });\\n function exitIfAllStreamsCompleted() {\\n writesToWait--;\\n if (writesToWait === 0) {\\n if(passed) {\\n jasmineRunner.exit(0);\\n }\\n else {\\n jasmineRunner.exit(1);\\n }\\n }\\n }\\n};\\n\\nvar checkExit = function(jasmineRunner) {\\n return function() {\\n if (!jasmineRunner.completionReporter.isComplete()) {\\n process.exitCode = 4;\\n }\\n };\\n};\\n\\nJasmine.prototype.execute = function(files, filterString) {\\n this.completionReporter.exitHandler = this.checkExit;\\n\\n this.loadRequires();\\n this.loadHelpers();\\n if (!this.defaultReporterConfigured) {\\n this.configureDefaultReporter({ showColors: this.showingColors });\\n }\\n\\n if(filterString) {\\n var specFilter = new ConsoleSpecFilter({\\n filterString: filterString\\n });\\n this.env.configure({specFilter: function(spec) {\\n return specFilter.matches(spec.getFullName());\\n }});\\n }\\n\\n if (files && files.length > 0) {\\n this.specDir = '';\\n this.specFiles = [];\\n this.addSpecFiles(files);\\n }\\n\\n this.loadSpecs();\\n\\n this.addReporter(this.completionReporter);\\n this.env.execute();\\n};\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine/jasmine.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine/filters/console_spec_filter.js\": {\n \"text\": \"module.exports = exports = ConsoleSpecFilter;\\n\\nfunction ConsoleSpecFilter(options) {\\n var filterString = options && options.filterString;\\n var filterPattern = new RegExp(filterString);\\n\\n this.matches = function(specName) {\\n return filterPattern.test(specName);\\n };\\n}\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine/filters/console_spec_filter.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine/reporters/completion_reporter.js\": {\n \"text\": \"module.exports = function() {\\n var onCompleteCallback = function() {};\\n var completed = false;\\n\\n this.onComplete = function(callback) {\\n onCompleteCallback = callback;\\n };\\n\\n this.jasmineStarted = function() {\\n if (this.exitHandler) {\\n process.on('exit', this.exitHandler);\\n }\\n };\\n\\n this.jasmineDone = function(result) {\\n completed = true;\\n if (this.exitHandler) {\\n process.removeListener('exit', this.exitHandler);\\n }\\n\\n onCompleteCallback(result.overallStatus === 'passed');\\n };\\n\\n this.isComplete = function() {\\n return completed;\\n };\\n\\n this.exitHandler = null;\\n};\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine/reporters/completion_reporter.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine/reporters/console_reporter.js\": {\n \"text\": \"module.exports = exports = ConsoleReporter;\\n\\nvar noopTimer = {\\n start: function(){},\\n elapsed: function(){ return 0; }\\n};\\n\\nfunction ConsoleReporter() {\\n var print = function() {},\\n showColors = false,\\n timer = noopTimer,\\n jasmineCorePath = null,\\n specCount,\\n executableSpecCount,\\n failureCount,\\n failedSpecs = [],\\n pendingSpecs = [],\\n ansi = {\\n green: '\\\\x1B[32m',\\n red: '\\\\x1B[31m',\\n yellow: '\\\\x1B[33m',\\n none: '\\\\x1B[0m'\\n },\\n failedSuites = [],\\n stackFilter = defaultStackFilter;\\n\\n this.setOptions = function(options) {\\n if (options.print) {\\n print = options.print;\\n }\\n showColors = options.showColors || false;\\n if (options.timer) {\\n timer = options.timer;\\n }\\n if (options.jasmineCorePath) {\\n jasmineCorePath = options.jasmineCorePath;\\n }\\n if (options.stackFilter) {\\n stackFilter = options.stackFilter;\\n }\\n };\\n\\n this.jasmineStarted = function(options) {\\n specCount = 0;\\n executableSpecCount = 0;\\n failureCount = 0;\\n if (options && options.order && options.order.random) {\\n print('Randomized with seed ' + options.order.seed);\\n printNewline();\\n }\\n print('Started');\\n printNewline();\\n timer.start();\\n };\\n\\n this.jasmineDone = function(result) {\\n printNewline();\\n printNewline();\\n if(failedSpecs.length > 0) {\\n print('Failures:');\\n }\\n for (var i = 0; i < failedSpecs.length; i++) {\\n specFailureDetails(failedSpecs[i], i + 1);\\n }\\n\\n for(i = 0; i < failedSuites.length; i++) {\\n suiteFailureDetails(failedSuites[i]);\\n }\\n\\n if (result && result.failedExpectations && result.failedExpectations.length > 0) {\\n suiteFailureDetails(result);\\n }\\n\\n if (pendingSpecs.length > 0) {\\n print(\\\"Pending:\\\");\\n }\\n for(i = 0; i < pendingSpecs.length; i++) {\\n pendingSpecDetails(pendingSpecs[i], i + 1);\\n }\\n\\n if(specCount > 0) {\\n printNewline();\\n\\n if(executableSpecCount !== specCount) {\\n print('Ran ' + executableSpecCount + ' of ' + specCount + plural(' spec', specCount));\\n printNewline();\\n }\\n var specCounts = executableSpecCount + ' ' + plural('spec', executableSpecCount) + ', ' +\\n failureCount + ' ' + plural('failure', failureCount);\\n\\n if (pendingSpecs.length) {\\n specCounts += ', ' + pendingSpecs.length + ' pending ' + plural('spec', pendingSpecs.length);\\n }\\n\\n print(specCounts);\\n } else {\\n print('No specs found');\\n }\\n\\n printNewline();\\n var seconds = timer.elapsed() / 1000;\\n print('Finished in ' + seconds + ' ' + plural('second', seconds));\\n printNewline();\\n\\n if (result && result.overallStatus === 'incomplete') {\\n print('Incomplete: ' + result.incompleteReason);\\n printNewline();\\n }\\n\\n if (result && result.order && result.order.random) {\\n print('Randomized with seed ' + result.order.seed);\\n print(' (jasmine --random=true --seed=' + result.order.seed + ')');\\n printNewline();\\n }\\n };\\n\\n this.specDone = function(result) {\\n specCount++;\\n\\n if (result.status == 'pending') {\\n pendingSpecs.push(result);\\n executableSpecCount++;\\n print(colored('yellow', '*'));\\n return;\\n }\\n\\n if (result.status == 'passed') {\\n executableSpecCount++;\\n print(colored('green', '.'));\\n return;\\n }\\n\\n if (result.status == 'failed') {\\n failureCount++;\\n failedSpecs.push(result);\\n executableSpecCount++;\\n print(colored('red', 'F'));\\n }\\n };\\n\\n this.suiteDone = function(result) {\\n if (result.failedExpectations && result.failedExpectations.length > 0) {\\n failureCount++;\\n failedSuites.push(result);\\n }\\n };\\n\\n return this;\\n\\n function printNewline() {\\n print('\\\\n');\\n }\\n\\n function colored(color, str) {\\n return showColors ? (ansi[color] + str + ansi.none) : str;\\n }\\n\\n function plural(str, count) {\\n return count == 1 ? str : str + 's';\\n }\\n\\n function repeat(thing, times) {\\n var arr = [];\\n for (var i = 0; i < times; i++) {\\n arr.push(thing);\\n }\\n return arr;\\n }\\n\\n function indent(str, spaces) {\\n var lines = (str || '').split('\\\\n');\\n var newArr = [];\\n for (var i = 0; i < lines.length; i++) {\\n newArr.push(repeat(' ', spaces).join('') + lines[i]);\\n }\\n return newArr.join('\\\\n');\\n }\\n\\n function defaultStackFilter(stack) {\\n if (!stack) {\\n return '';\\n }\\n\\n var filteredStack = stack.split('\\\\n').filter(function(stackLine) {\\n return stackLine.indexOf(jasmineCorePath) === -1;\\n }).join('\\\\n');\\n return filteredStack;\\n }\\n\\n function specFailureDetails(result, failedSpecNumber) {\\n printNewline();\\n print(failedSpecNumber + ') ');\\n print(result.fullName);\\n printFailedExpectations(result);\\n }\\n\\n function suiteFailureDetails(result) {\\n printNewline();\\n print('Suite error: ' + result.fullName);\\n printFailedExpectations(result);\\n }\\n\\n function printFailedExpectations(result) {\\n for (var i = 0; i < result.failedExpectations.length; i++) {\\n var failedExpectation = result.failedExpectations[i];\\n printNewline();\\n print(indent('Message:', 2));\\n printNewline();\\n print(colored('red', indent(failedExpectation.message, 4)));\\n printNewline();\\n print(indent('Stack:', 2));\\n printNewline();\\n print(indent(stackFilter(failedExpectation.stack), 4));\\n }\\n\\n printNewline();\\n }\\n\\n function pendingSpecDetails(result, pendingSpecNumber) {\\n printNewline();\\n printNewline();\\n print(pendingSpecNumber + ') ');\\n print(result.fullName);\\n printNewline();\\n var pendingReason = \\\"No reason given\\\";\\n if (result.pendingReason && result.pendingReason !== '') {\\n pendingReason = result.pendingReason;\\n }\\n print(indent(colored('yellow', pendingReason), 2));\\n printNewline();\\n }\\n}\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine/reporters/console_reporter.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core.js\": {\n \"text\": \"module.exports = require(\\\"./jasmine-core/jasmine.js\\\");\\nmodule.exports.boot = require('./jasmine-core/node_boot.js');\\n\\nvar path = require('path'),\\n fs = require('fs');\\n\\nvar rootPath = path.join(__dirname, \\\"jasmine-core\\\"),\\n bootFiles = ['boot.js'],\\n nodeBootFiles = ['node_boot.js'],\\n cssFiles = [],\\n jsFiles = [],\\n jsFilesToSkip = ['jasmine.js'].concat(bootFiles, nodeBootFiles);\\n\\nfs.readdirSync(rootPath).forEach(function(file) {\\n if(fs.statSync(path.join(rootPath, file)).isFile()) {\\n switch(path.extname(file)) {\\n case '.css':\\n cssFiles.push(file);\\n break;\\n case '.js':\\n if (jsFilesToSkip.indexOf(file) < 0) {\\n jsFiles.push(file);\\n }\\n break;\\n }\\n }\\n});\\n\\nmodule.exports.files = {\\n path: rootPath,\\n bootDir: rootPath,\\n bootFiles: bootFiles,\\n nodeBootFiles: nodeBootFiles,\\n cssFiles: cssFiles,\\n jsFiles: ['jasmine.js'].concat(jsFiles),\\n imagesDir: path.join(__dirname, '../images')\\n};\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/boot.js\": {\n \"text\": \"/*\\nCopyright (c) 2008-2019 Pivotal Labs\\n\\nPermission is hereby granted, free of charge, to any person obtaining\\na copy of this software and associated documentation files (the\\n\\\"Software\\\"), to deal in the Software without restriction, including\\nwithout limitation the rights to use, copy, modify, merge, publish,\\ndistribute, sublicense, and/or sell copies of the Software, and to\\npermit persons to whom the Software is furnished to do so, subject to\\nthe following conditions:\\n\\nThe above copyright notice and this permission notice shall be\\nincluded in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n*/\\n/**\\n Starting with version 2.0, this file \\\"boots\\\" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project.\\n\\n If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms.\\n\\n The location of `boot.js` can be specified and/or overridden in `jasmine.yml`.\\n\\n [jasmine-gem]: http://github.com/pivotal/jasmine-gem\\n */\\n\\n(function() {\\n\\n /**\\n * ## Require & Instantiate\\n *\\n * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.\\n */\\n window.jasmine = jasmineRequire.core(jasmineRequire);\\n\\n /**\\n * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference.\\n */\\n jasmineRequire.html(jasmine);\\n\\n /**\\n * Create the Jasmine environment. This is used to run all specs in a project.\\n */\\n var env = jasmine.getEnv();\\n\\n /**\\n * ## The Global Interface\\n *\\n * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged.\\n */\\n var jasmineInterface = jasmineRequire.interface(jasmine, env);\\n\\n /**\\n * Add all of the Jasmine global/public interface to the global scope, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`.\\n */\\n extend(window, jasmineInterface);\\n\\n /**\\n * ## Runner Parameters\\n *\\n * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface.\\n */\\n\\n var queryString = new jasmine.QueryString({\\n getWindowLocation: function() { return window.location; }\\n });\\n\\n var filterSpecs = !!queryString.getParam(\\\"spec\\\");\\n\\n var config = {\\n failFast: queryString.getParam(\\\"failFast\\\"),\\n oneFailurePerSpec: queryString.getParam(\\\"oneFailurePerSpec\\\"),\\n hideDisabled: queryString.getParam(\\\"hideDisabled\\\")\\n };\\n\\n var random = queryString.getParam(\\\"random\\\");\\n\\n if (random !== undefined && random !== \\\"\\\") {\\n config.random = random;\\n }\\n\\n var seed = queryString.getParam(\\\"seed\\\");\\n if (seed) {\\n config.seed = seed;\\n }\\n\\n /**\\n * ## Reporters\\n * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any).\\n */\\n var htmlReporter = new jasmine.HtmlReporter({\\n env: env,\\n navigateWithNewParam: function(key, value) { return queryString.navigateWithNewParam(key, value); },\\n addToExistingQueryString: function(key, value) { return queryString.fullStringWithNewParam(key, value); },\\n getContainer: function() { return document.body; },\\n createElement: function() { return document.createElement.apply(document, arguments); },\\n createTextNode: function() { return document.createTextNode.apply(document, arguments); },\\n timer: new jasmine.Timer(),\\n filterSpecs: filterSpecs\\n });\\n\\n /**\\n * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript.\\n */\\n env.addReporter(jasmineInterface.jsApiReporter);\\n env.addReporter(htmlReporter);\\n\\n /**\\n * Filter which specs will be run by matching the start of the full name against the `spec` query param.\\n */\\n var specFilter = new jasmine.HtmlSpecFilter({\\n filterString: function() { return queryString.getParam(\\\"spec\\\"); }\\n });\\n\\n config.specFilter = function(spec) {\\n return specFilter.matches(spec.getFullName());\\n };\\n\\n env.configure(config);\\n\\n /**\\n * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack.\\n */\\n window.setTimeout = window.setTimeout;\\n window.setInterval = window.setInterval;\\n window.clearTimeout = window.clearTimeout;\\n window.clearInterval = window.clearInterval;\\n\\n /**\\n * ## Execution\\n *\\n * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded.\\n */\\n var currentWindowOnload = window.onload;\\n\\n window.onload = function() {\\n if (currentWindowOnload) {\\n currentWindowOnload();\\n }\\n htmlReporter.initialize();\\n env.execute();\\n };\\n\\n /**\\n * Helper function for readability above.\\n */\\n function extend(destination, source) {\\n for (var property in source) destination[property] = source[property];\\n return destination;\\n }\\n\\n}());\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/boot.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine-html.js\": {\n \"text\": \"/*\\nCopyright (c) 2008-2019 Pivotal Labs\\n\\nPermission is hereby granted, free of charge, to any person obtaining\\na copy of this software and associated documentation files (the\\n\\\"Software\\\"), to deal in the Software without restriction, including\\nwithout limitation the rights to use, copy, modify, merge, publish,\\ndistribute, sublicense, and/or sell copies of the Software, and to\\npermit persons to whom the Software is furnished to do so, subject to\\nthe following conditions:\\n\\nThe above copyright notice and this permission notice shall be\\nincluded in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n*/\\njasmineRequire.html = function(j$) {\\n j$.ResultsNode = jasmineRequire.ResultsNode();\\n j$.HtmlReporter = jasmineRequire.HtmlReporter(j$);\\n j$.QueryString = jasmineRequire.QueryString();\\n j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter();\\n};\\n\\njasmineRequire.HtmlReporter = function(j$) {\\n function ResultsStateBuilder() {\\n this.topResults = new j$.ResultsNode({}, '', null);\\n this.currentParent = this.topResults;\\n this.specsExecuted = 0;\\n this.failureCount = 0;\\n this.pendingSpecCount = 0;\\n }\\n\\n ResultsStateBuilder.prototype.suiteStarted = function(result) {\\n this.currentParent.addChild(result, 'suite');\\n this.currentParent = this.currentParent.last();\\n };\\n\\n ResultsStateBuilder.prototype.suiteDone = function(result) {\\n this.currentParent.updateResult(result);\\n if (this.currentParent !== this.topResults) {\\n this.currentParent = this.currentParent.parent;\\n }\\n\\n if (result.status === 'failed') {\\n this.failureCount++;\\n }\\n };\\n\\n ResultsStateBuilder.prototype.specStarted = function(result) {\\n };\\n\\n ResultsStateBuilder.prototype.specDone = function(result) {\\n this.currentParent.addChild(result, 'spec');\\n\\n if (result.status !== 'excluded') {\\n this.specsExecuted++;\\n }\\n\\n if (result.status === 'failed') {\\n this.failureCount++;\\n }\\n\\n if (result.status == 'pending') {\\n this.pendingSpecCount++;\\n }\\n };\\n\\n\\n\\n function HtmlReporter(options) {\\n var config = function() { return (options.env && options.env.configuration()) || {}; },\\n getContainer = options.getContainer,\\n createElement = options.createElement,\\n createTextNode = options.createTextNode,\\n navigateWithNewParam = options.navigateWithNewParam || function() {},\\n addToExistingQueryString = options.addToExistingQueryString || defaultQueryString,\\n filterSpecs = options.filterSpecs,\\n timer = options.timer || j$.noopTimer,\\n htmlReporterMain,\\n symbols,\\n deprecationWarnings = [];\\n\\n this.initialize = function() {\\n clearPrior();\\n htmlReporterMain = createDom('div', {className: 'jasmine_html-reporter'},\\n createDom('div', {className: 'jasmine-banner'},\\n createDom('a', {className: 'jasmine-title', href: 'http://jasmine.github.io/', target: '_blank'}),\\n createDom('span', {className: 'jasmine-version'}, j$.version)\\n ),\\n createDom('ul', {className: 'jasmine-symbol-summary'}),\\n createDom('div', {className: 'jasmine-alert'}),\\n createDom('div', {className: 'jasmine-results'},\\n createDom('div', {className: 'jasmine-failures'})\\n )\\n );\\n getContainer().appendChild(htmlReporterMain);\\n };\\n\\n var totalSpecsDefined;\\n this.jasmineStarted = function(options) {\\n totalSpecsDefined = options.totalSpecsDefined || 0;\\n timer.start();\\n };\\n\\n var summary = createDom('div', {className: 'jasmine-summary'});\\n\\n var stateBuilder = new ResultsStateBuilder();\\n\\n this.suiteStarted = function(result) {\\n stateBuilder.suiteStarted(result);\\n };\\n\\n this.suiteDone = function(result) {\\n stateBuilder.suiteDone(result);\\n\\n if (result.status === 'failed') {\\n failures.push(failureDom(result));\\n }\\n addDeprecationWarnings(result);\\n };\\n\\n this.specStarted = function(result) {\\n stateBuilder.specStarted(result);\\n };\\n\\n var failures = [];\\n this.specDone = function(result) {\\n stateBuilder.specDone(result);\\n\\n if(noExpectations(result) && typeof console !== 'undefined' && typeof console.error !== 'undefined') {\\n console.error('Spec \\\\'' + result.fullName + '\\\\' has no expectations.');\\n }\\n\\n if (!symbols){\\n symbols = find('.jasmine-symbol-summary');\\n }\\n\\n symbols.appendChild(createDom('li', {\\n className: this.displaySpecInCorrectFormat(result),\\n id: 'spec_' + result.id,\\n title: result.fullName\\n }\\n ));\\n\\n if (result.status === 'failed') {\\n failures.push(failureDom(result));\\n }\\n\\n addDeprecationWarnings(result);\\n };\\n\\n this.displaySpecInCorrectFormat = function(result) {\\n return noExpectations(result) ? 'jasmine-empty' : this.resultStatus(result.status);\\n };\\n\\n this.resultStatus = function(status) {\\n if(status === 'excluded') {\\n return config().hideDisabled ? 'jasmine-excluded-no-display' : 'jasmine-excluded';\\n }\\n return 'jasmine-' + status;\\n };\\n\\n this.jasmineDone = function(doneResult) {\\n var banner = find('.jasmine-banner');\\n var alert = find('.jasmine-alert');\\n var order = doneResult && doneResult.order;\\n var i;\\n alert.appendChild(createDom('span', {className: 'jasmine-duration'}, 'finished in ' + timer.elapsed() / 1000 + 's'));\\n\\n banner.appendChild(optionsMenu(config()));\\n\\n if (stateBuilder.specsExecuted < totalSpecsDefined) {\\n var skippedMessage = 'Ran ' + stateBuilder.specsExecuted + ' of ' + totalSpecsDefined + ' specs - run all';\\n var skippedLink = addToExistingQueryString('spec', '');\\n alert.appendChild(\\n createDom('span', {className: 'jasmine-bar jasmine-skipped'},\\n createDom('a', {href: skippedLink, title: 'Run all specs'}, skippedMessage)\\n )\\n );\\n }\\n var statusBarMessage = '';\\n var statusBarClassName = 'jasmine-overall-result jasmine-bar ';\\n var globalFailures = (doneResult && doneResult.failedExpectations) || [];\\n var failed = stateBuilder.failureCount + globalFailures.length > 0;\\n\\n if (totalSpecsDefined > 0 || failed) {\\n statusBarMessage += pluralize('spec', stateBuilder.specsExecuted) + ', ' + pluralize('failure', stateBuilder.failureCount);\\n if (stateBuilder.pendingSpecCount) { statusBarMessage += ', ' + pluralize('pending spec', stateBuilder.pendingSpecCount); }\\n }\\n\\n if (doneResult.overallStatus === 'passed') {\\n statusBarClassName += ' jasmine-passed ';\\n } else if (doneResult.overallStatus === 'incomplete') {\\n statusBarClassName += ' jasmine-incomplete ';\\n statusBarMessage = 'Incomplete: ' + doneResult.incompleteReason + ', ' + statusBarMessage;\\n } else {\\n statusBarClassName += ' jasmine-failed ';\\n }\\n\\n var seedBar;\\n if (order && order.random) {\\n seedBar = createDom('span', {className: 'jasmine-seed-bar'},\\n ', randomized with seed ',\\n createDom('a', {title: 'randomized with seed ' + order.seed, href: seedHref(order.seed)}, order.seed)\\n );\\n }\\n\\n alert.appendChild(createDom('span', {className: statusBarClassName}, statusBarMessage, seedBar));\\n\\n var errorBarClassName = 'jasmine-bar jasmine-errored';\\n var afterAllMessagePrefix = 'AfterAll ';\\n\\n for(i = 0; i < globalFailures.length; i++) {\\n alert.appendChild(createDom('span', {className: errorBarClassName}, globalFailureMessage(globalFailures[i])));\\n }\\n\\n function globalFailureMessage(failure) {\\n if (failure.globalErrorType === 'load') {\\n var prefix = 'Error during loading: ' + failure.message;\\n\\n if (failure.filename) {\\n return prefix + ' in ' + failure.filename + ' line ' + failure.lineno;\\n } else {\\n return prefix;\\n }\\n } else {\\n return afterAllMessagePrefix + failure.message;\\n }\\n }\\n\\n addDeprecationWarnings(doneResult);\\n\\n var warningBarClassName = 'jasmine-bar jasmine-warning';\\n for(i = 0; i < deprecationWarnings.length; i++) {\\n var warning = deprecationWarnings[i];\\n alert.appendChild(createDom('span', {className: warningBarClassName}, 'DEPRECATION: ' + warning));\\n }\\n\\n var results = find('.jasmine-results');\\n results.appendChild(summary);\\n\\n summaryList(stateBuilder.topResults, summary);\\n\\n if (failures.length) {\\n alert.appendChild(\\n createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-spec-list'},\\n createDom('span', {}, 'Spec List | '),\\n createDom('a', {className: 'jasmine-failures-menu', href: '#'}, 'Failures')));\\n alert.appendChild(\\n createDom('span', {className: 'jasmine-menu jasmine-bar jasmine-failure-list'},\\n createDom('a', {className: 'jasmine-spec-list-menu', href: '#'}, 'Spec List'),\\n createDom('span', {}, ' | Failures ')));\\n\\n find('.jasmine-failures-menu').onclick = function() {\\n setMenuModeTo('jasmine-failure-list');\\n };\\n find('.jasmine-spec-list-menu').onclick = function() {\\n setMenuModeTo('jasmine-spec-list');\\n };\\n\\n setMenuModeTo('jasmine-failure-list');\\n\\n var failureNode = find('.jasmine-failures');\\n for (i = 0; i < failures.length; i++) {\\n failureNode.appendChild(failures[i]);\\n }\\n }\\n };\\n\\n return this;\\n\\n function failureDom(result) {\\n var failure =\\n createDom('div', {className: 'jasmine-spec-detail jasmine-failed'},\\n failureDescription(result, stateBuilder.currentParent),\\n createDom('div', {className: 'jasmine-messages'})\\n );\\n var messages = failure.childNodes[1];\\n\\n for (var i = 0; i < result.failedExpectations.length; i++) {\\n var expectation = result.failedExpectations[i];\\n messages.appendChild(createDom('div', {className: 'jasmine-result-message'}, expectation.message));\\n messages.appendChild(createDom('div', {className: 'jasmine-stack-trace'}, expectation.stack));\\n }\\n\\n return failure;\\n }\\n\\n function summaryList(resultsTree, domParent) {\\n var specListNode;\\n for (var i = 0; i < resultsTree.children.length; i++) {\\n var resultNode = resultsTree.children[i];\\n if (filterSpecs && !hasActiveSpec(resultNode)) {\\n continue;\\n }\\n if (resultNode.type === 'suite') {\\n var suiteListNode = createDom('ul', {className: 'jasmine-suite', id: 'suite-' + resultNode.result.id},\\n createDom('li', {className: 'jasmine-suite-detail jasmine-' + resultNode.result.status},\\n createDom('a', {href: specHref(resultNode.result)}, resultNode.result.description)\\n )\\n );\\n\\n summaryList(resultNode, suiteListNode);\\n domParent.appendChild(suiteListNode);\\n }\\n if (resultNode.type === 'spec') {\\n if (domParent.getAttribute('class') !== 'jasmine-specs') {\\n specListNode = createDom('ul', {className: 'jasmine-specs'});\\n domParent.appendChild(specListNode);\\n }\\n var specDescription = resultNode.result.description;\\n if(noExpectations(resultNode.result)) {\\n specDescription = 'SPEC HAS NO EXPECTATIONS ' + specDescription;\\n }\\n if(resultNode.result.status === 'pending' && resultNode.result.pendingReason !== '') {\\n specDescription = specDescription + ' PENDING WITH MESSAGE: ' + resultNode.result.pendingReason;\\n }\\n specListNode.appendChild(\\n createDom('li', {\\n className: 'jasmine-' + resultNode.result.status,\\n id: 'spec-' + resultNode.result.id\\n },\\n createDom('a', {href: specHref(resultNode.result)}, specDescription)\\n )\\n );\\n }\\n }\\n }\\n\\n function optionsMenu(config) {\\n var optionsMenuDom = createDom('div', { className: 'jasmine-run-options' },\\n createDom('span', { className: 'jasmine-trigger' }, 'Options'),\\n createDom('div', { className: 'jasmine-payload' },\\n createDom('div', { className: 'jasmine-stop-on-failure' },\\n createDom('input', {\\n className: 'jasmine-fail-fast',\\n id: 'jasmine-fail-fast',\\n type: 'checkbox'\\n }),\\n createDom('label', { className: 'jasmine-label', 'for': 'jasmine-fail-fast' }, 'stop execution on spec failure')),\\n createDom('div', { className: 'jasmine-throw-failures' },\\n createDom('input', {\\n className: 'jasmine-throw',\\n id: 'jasmine-throw-failures',\\n type: 'checkbox'\\n }),\\n createDom('label', { className: 'jasmine-label', 'for': 'jasmine-throw-failures' }, 'stop spec on expectation failure')),\\n createDom('div', { className: 'jasmine-random-order' },\\n createDom('input', {\\n className: 'jasmine-random',\\n id: 'jasmine-random-order',\\n type: 'checkbox'\\n }),\\n createDom('label', { className: 'jasmine-label', 'for': 'jasmine-random-order' }, 'run tests in random order')),\\n createDom('div', { className: 'jasmine-hide-disabled' },\\n createDom('input', {\\n className: 'jasmine-disabled',\\n id: 'jasmine-hide-disabled',\\n type: 'checkbox'\\n }),\\n createDom('label', { className: 'jasmine-label', 'for': 'jasmine-hide-disabled' }, 'hide disabled tests'))\\n )\\n );\\n\\n var failFastCheckbox = optionsMenuDom.querySelector('#jasmine-fail-fast');\\n failFastCheckbox.checked = config.failFast;\\n failFastCheckbox.onclick = function() {\\n navigateWithNewParam('failFast', !config.failFast);\\n };\\n\\n var throwCheckbox = optionsMenuDom.querySelector('#jasmine-throw-failures');\\n throwCheckbox.checked = config.oneFailurePerSpec;\\n throwCheckbox.onclick = function() {\\n navigateWithNewParam('throwFailures', !config.oneFailurePerSpec);\\n };\\n\\n var randomCheckbox = optionsMenuDom.querySelector('#jasmine-random-order');\\n randomCheckbox.checked = config.random;\\n randomCheckbox.onclick = function() {\\n navigateWithNewParam('random', !config.random);\\n };\\n\\n var hideDisabled = optionsMenuDom.querySelector('#jasmine-hide-disabled');\\n hideDisabled.checked = config.hideDisabled;\\n hideDisabled.onclick = function() {\\n navigateWithNewParam('hideDisabled', !config.hideDisabled);\\n };\\n\\n var optionsTrigger = optionsMenuDom.querySelector('.jasmine-trigger'),\\n optionsPayload = optionsMenuDom.querySelector('.jasmine-payload'),\\n isOpen = /\\\\bjasmine-open\\\\b/;\\n\\n optionsTrigger.onclick = function() {\\n if (isOpen.test(optionsPayload.className)) {\\n optionsPayload.className = optionsPayload.className.replace(isOpen, '');\\n } else {\\n optionsPayload.className += ' jasmine-open';\\n }\\n };\\n\\n return optionsMenuDom;\\n }\\n\\n function failureDescription(result, suite) {\\n var wrapper = createDom('div', {className: 'jasmine-description'},\\n createDom('a', {title: result.description, href: specHref(result)}, result.description)\\n );\\n var suiteLink;\\n\\n while (suite && suite.parent) {\\n wrapper.insertBefore(createTextNode(' > '), wrapper.firstChild);\\n suiteLink = createDom('a', {href: suiteHref(suite)}, suite.result.description);\\n wrapper.insertBefore(suiteLink, wrapper.firstChild);\\n\\n suite = suite.parent;\\n }\\n\\n return wrapper;\\n }\\n\\n function suiteHref(suite) {\\n var els = [];\\n\\n while (suite && suite.parent) {\\n els.unshift(suite.result.description);\\n suite = suite.parent;\\n }\\n\\n return addToExistingQueryString('spec', els.join(' '));\\n }\\n\\n function addDeprecationWarnings(result) {\\n if (result && result.deprecationWarnings) {\\n for(var i = 0; i < result.deprecationWarnings.length; i++) {\\n var warning = result.deprecationWarnings[i].message;\\n if (!j$.util.arrayContains(warning)) {\\n deprecationWarnings.push(warning);\\n }\\n }\\n }\\n }\\n\\n function find(selector) {\\n return getContainer().querySelector('.jasmine_html-reporter ' + selector);\\n }\\n\\n function clearPrior() {\\n // return the reporter\\n var oldReporter = find('');\\n\\n if(oldReporter) {\\n getContainer().removeChild(oldReporter);\\n }\\n }\\n\\n function createDom(type, attrs, childrenVarArgs) {\\n var el = createElement(type);\\n\\n for (var i = 2; i < arguments.length; i++) {\\n var child = arguments[i];\\n\\n if (typeof child === 'string') {\\n el.appendChild(createTextNode(child));\\n } else {\\n if (child) {\\n el.appendChild(child);\\n }\\n }\\n }\\n\\n for (var attr in attrs) {\\n if (attr == 'className') {\\n el[attr] = attrs[attr];\\n } else {\\n el.setAttribute(attr, attrs[attr]);\\n }\\n }\\n\\n return el;\\n }\\n\\n function pluralize(singular, count) {\\n var word = (count == 1 ? singular : singular + 's');\\n\\n return '' + count + ' ' + word;\\n }\\n\\n function specHref(result) {\\n return addToExistingQueryString('spec', result.fullName);\\n }\\n\\n function seedHref(seed) {\\n return addToExistingQueryString('seed', seed);\\n }\\n\\n function defaultQueryString(key, value) {\\n return '?' + key + '=' + value;\\n }\\n\\n function setMenuModeTo(mode) {\\n htmlReporterMain.setAttribute('class', 'jasmine_html-reporter ' + mode);\\n }\\n\\n function noExpectations(result) {\\n return (result.failedExpectations.length + result.passedExpectations.length) === 0 &&\\n result.status === 'passed';\\n }\\n\\n function hasActiveSpec(resultNode) {\\n if (resultNode.type == 'spec' && resultNode.result.status != 'excluded') {\\n return true;\\n }\\n\\n if (resultNode.type == 'suite') {\\n for (var i = 0, j = resultNode.children.length; i < j; i++) {\\n if (hasActiveSpec(resultNode.children[i])) {\\n return true;\\n }\\n }\\n }\\n }\\n }\\n\\n return HtmlReporter;\\n};\\n\\njasmineRequire.HtmlSpecFilter = function() {\\n function HtmlSpecFilter(options) {\\n var filterString = options && options.filterString() && options.filterString().replace(/[-[\\\\]{}()*+?.,\\\\\\\\^$|#\\\\s]/g, '\\\\\\\\$&');\\n var filterPattern = new RegExp(filterString);\\n\\n this.matches = function(specName) {\\n return filterPattern.test(specName);\\n };\\n }\\n\\n return HtmlSpecFilter;\\n};\\n\\njasmineRequire.ResultsNode = function() {\\n function ResultsNode(result, type, parent) {\\n this.result = result;\\n this.type = type;\\n this.parent = parent;\\n\\n this.children = [];\\n\\n this.addChild = function(result, type) {\\n this.children.push(new ResultsNode(result, type, this));\\n };\\n\\n this.last = function() {\\n return this.children[this.children.length - 1];\\n };\\n\\n this.updateResult = function(result) {\\n this.result = result;\\n };\\n }\\n\\n return ResultsNode;\\n};\\n\\njasmineRequire.QueryString = function() {\\n function QueryString(options) {\\n\\n this.navigateWithNewParam = function(key, value) {\\n options.getWindowLocation().search = this.fullStringWithNewParam(key, value);\\n };\\n\\n this.fullStringWithNewParam = function(key, value) {\\n var paramMap = queryStringToParamMap();\\n paramMap[key] = value;\\n return toQueryString(paramMap);\\n };\\n\\n this.getParam = function(key) {\\n return queryStringToParamMap()[key];\\n };\\n\\n return this;\\n\\n function toQueryString(paramMap) {\\n var qStrPairs = [];\\n for (var prop in paramMap) {\\n qStrPairs.push(encodeURIComponent(prop) + '=' + encodeURIComponent(paramMap[prop]));\\n }\\n return '?' + qStrPairs.join('&');\\n }\\n\\n function queryStringToParamMap() {\\n var paramStr = options.getWindowLocation().search.substring(1),\\n params = [],\\n paramMap = {};\\n\\n if (paramStr.length > 0) {\\n params = paramStr.split('&');\\n for (var i = 0; i < params.length; i++) {\\n var p = params[i].split('=');\\n var value = decodeURIComponent(p[1]);\\n if (value === 'true' || value === 'false') {\\n value = JSON.parse(value);\\n }\\n paramMap[decodeURIComponent(p[0])] = value;\\n }\\n }\\n\\n return paramMap;\\n }\\n\\n }\\n\\n return QueryString;\\n};\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine-html.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine.js\": {\n \"text\": \"/*\\nCopyright (c) 2008-2019 Pivotal Labs\\n\\nPermission is hereby granted, free of charge, to any person obtaining\\na copy of this software and associated documentation files (the\\n\\\"Software\\\"), to deal in the Software without restriction, including\\nwithout limitation the rights to use, copy, modify, merge, publish,\\ndistribute, sublicense, and/or sell copies of the Software, and to\\npermit persons to whom the Software is furnished to do so, subject to\\nthe following conditions:\\n\\nThe above copyright notice and this permission notice shall be\\nincluded in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n*/\\nvar getJasmineRequireObj = (function (jasmineGlobal) {\\n /* globals exports, global, module, window */\\n var jasmineRequire;\\n\\n if (typeof module !== 'undefined' && module.exports && typeof exports !== 'undefined') {\\n if (typeof global !== 'undefined') {\\n jasmineGlobal = global;\\n } else {\\n jasmineGlobal = {};\\n }\\n jasmineRequire = exports;\\n } else {\\n if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') {\\n jasmineGlobal = window;\\n }\\n jasmineRequire = jasmineGlobal.jasmineRequire = {};\\n }\\n\\n function getJasmineRequire() {\\n return jasmineRequire;\\n }\\n\\n getJasmineRequire().core = function(jRequire) {\\n var j$ = {};\\n\\n jRequire.base(j$, jasmineGlobal);\\n j$.util = jRequire.util(j$);\\n j$.errors = jRequire.errors();\\n j$.formatErrorMsg = jRequire.formatErrorMsg();\\n j$.Any = jRequire.Any(j$);\\n j$.Anything = jRequire.Anything(j$);\\n j$.CallTracker = jRequire.CallTracker(j$);\\n j$.MockDate = jRequire.MockDate();\\n j$.getClearStack = jRequire.clearStack(j$);\\n j$.Clock = jRequire.Clock();\\n j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$);\\n j$.Env = jRequire.Env(j$);\\n j$.StackTrace = jRequire.StackTrace(j$);\\n j$.ExceptionFormatter = jRequire.ExceptionFormatter(j$);\\n j$.ExpectationFilterChain = jRequire.ExpectationFilterChain();\\n j$.Expector = jRequire.Expector(j$);\\n j$.Expectation = jRequire.Expectation(j$);\\n j$.buildExpectationResult = jRequire.buildExpectationResult();\\n j$.noopTimer = jRequire.noopTimer();\\n j$.JsApiReporter = jRequire.JsApiReporter(j$);\\n j$.matchersUtil = jRequire.matchersUtil(j$);\\n j$.ObjectContaining = jRequire.ObjectContaining(j$);\\n j$.ArrayContaining = jRequire.ArrayContaining(j$);\\n j$.ArrayWithExactContents = jRequire.ArrayWithExactContents(j$);\\n j$.pp = jRequire.pp(j$);\\n j$.QueueRunner = jRequire.QueueRunner(j$);\\n j$.ReportDispatcher = jRequire.ReportDispatcher(j$);\\n j$.Spec = jRequire.Spec(j$);\\n j$.Spy = jRequire.Spy(j$);\\n j$.SpyFactory = jRequire.SpyFactory(j$);\\n j$.SpyRegistry = jRequire.SpyRegistry(j$);\\n j$.SpyStrategy = jRequire.SpyStrategy(j$);\\n j$.StringMatching = jRequire.StringMatching(j$);\\n j$.UserContext = jRequire.UserContext(j$);\\n j$.Suite = jRequire.Suite(j$);\\n j$.Timer = jRequire.Timer();\\n j$.TreeProcessor = jRequire.TreeProcessor();\\n j$.version = jRequire.version();\\n j$.Order = jRequire.Order();\\n j$.DiffBuilder = jRequire.DiffBuilder(j$);\\n j$.NullDiffBuilder = jRequire.NullDiffBuilder(j$);\\n j$.ObjectPath = jRequire.ObjectPath(j$);\\n j$.GlobalErrors = jRequire.GlobalErrors(j$);\\n\\n j$.Truthy = jRequire.Truthy(j$);\\n j$.Falsy = jRequire.Falsy(j$);\\n j$.Empty = jRequire.Empty(j$);\\n j$.NotEmpty = jRequire.NotEmpty(j$);\\n\\n j$.matchers = jRequire.requireMatchers(jRequire, j$);\\n j$.asyncMatchers = jRequire.requireAsyncMatchers(jRequire, j$);\\n\\n return j$;\\n };\\n\\n return getJasmineRequire;\\n})(this);\\n\\ngetJasmineRequireObj().requireMatchers = function(jRequire, j$) {\\n var availableMatchers = [\\n 'nothing',\\n 'toBe',\\n 'toBeCloseTo',\\n 'toBeDefined',\\n 'toBeFalsy',\\n 'toBeGreaterThan',\\n 'toBeGreaterThanOrEqual',\\n 'toBeLessThan',\\n 'toBeLessThanOrEqual',\\n 'toBeNaN',\\n 'toBeNegativeInfinity',\\n 'toBeNull',\\n 'toBePositiveInfinity',\\n 'toBeTruthy',\\n 'toBeUndefined',\\n 'toContain',\\n 'toEqual',\\n 'toHaveBeenCalled',\\n 'toHaveBeenCalledBefore',\\n 'toHaveBeenCalledTimes',\\n 'toHaveBeenCalledWith',\\n 'toHaveClass',\\n 'toMatch',\\n 'toThrow',\\n 'toThrowError',\\n 'toThrowMatching',\\n ],\\n matchers = {};\\n\\n for (var i = 0; i < availableMatchers.length; i++) {\\n var name = availableMatchers[i];\\n matchers[name] = jRequire[name](j$);\\n }\\n\\n return matchers;\\n};\\n\\ngetJasmineRequireObj().base = function(j$, jasmineGlobal) {\\n j$.unimplementedMethod_ = function() {\\n throw new Error('unimplemented method');\\n };\\n\\n /**\\n * Maximum object depth the pretty printer will print to.\\n * Set this to a lower value to speed up pretty printing if you have large objects.\\n * @name jasmine.MAX_PRETTY_PRINT_DEPTH\\n */\\n j$.MAX_PRETTY_PRINT_DEPTH = 8;\\n /**\\n * Maximum number of array elements to display when pretty printing objects.\\n * This will also limit the number of keys and values displayed for an object.\\n * Elements past this number will be ellipised.\\n * @name jasmine.MAX_PRETTY_PRINT_ARRAY_LENGTH\\n */\\n j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 50;\\n /**\\n * Maximum number of characters to display when pretty printing objects.\\n * Characters past this number will be ellipised.\\n * @name jasmine.MAX_PRETTY_PRINT_CHARS\\n */\\n j$.MAX_PRETTY_PRINT_CHARS = 1000;\\n /**\\n * Default number of milliseconds Jasmine will wait for an asynchronous spec to complete.\\n * @name jasmine.DEFAULT_TIMEOUT_INTERVAL\\n */\\n j$.DEFAULT_TIMEOUT_INTERVAL = 5000;\\n\\n j$.getGlobal = function() {\\n return jasmineGlobal;\\n };\\n\\n /**\\n * Get the currently booted Jasmine Environment.\\n *\\n * @name jasmine.getEnv\\n * @function\\n * @return {Env}\\n */\\n j$.getEnv = function(options) {\\n var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options);\\n //jasmine. singletons in here (setTimeout blah blah).\\n return env;\\n };\\n\\n j$.isArray_ = function(value) {\\n return j$.isA_('Array', value);\\n };\\n\\n j$.isObject_ = function(value) {\\n return !j$.util.isUndefined(value) && value !== null && j$.isA_('Object', value);\\n };\\n\\n j$.isString_ = function(value) {\\n return j$.isA_('String', value);\\n };\\n\\n j$.isNumber_ = function(value) {\\n return j$.isA_('Number', value);\\n };\\n\\n j$.isFunction_ = function(value) {\\n return j$.isA_('Function', value);\\n };\\n\\n j$.isAsyncFunction_ = function(value) {\\n return j$.isA_('AsyncFunction', value);\\n };\\n\\n j$.isTypedArray_ = function(value) {\\n return j$.isA_('Float32Array', value) ||\\n j$.isA_('Float64Array', value) ||\\n j$.isA_('Int16Array', value) ||\\n j$.isA_('Int32Array', value) ||\\n j$.isA_('Int8Array', value) ||\\n j$.isA_('Uint16Array', value) ||\\n j$.isA_('Uint32Array', value) ||\\n j$.isA_('Uint8Array', value) ||\\n j$.isA_('Uint8ClampedArray', value);\\n };\\n\\n j$.isA_ = function(typeName, value) {\\n return j$.getType_(value) === '[object ' + typeName + ']';\\n };\\n\\n j$.isError_ = function(value) {\\n if (value instanceof Error) {\\n return true;\\n }\\n if (value && value.constructor && value.constructor.constructor) {\\n var valueGlobal = value.constructor.constructor('return this');\\n if (j$.isFunction_(valueGlobal)) {\\n valueGlobal = valueGlobal();\\n }\\n\\n if (valueGlobal.Error && value instanceof valueGlobal.Error) {\\n return true;\\n }\\n }\\n return false;\\n };\\n\\n j$.getType_ = function(value) {\\n return Object.prototype.toString.apply(value);\\n };\\n\\n j$.isDomNode = function(obj) {\\n // Node is a function, because constructors\\n return typeof jasmineGlobal.Node !== 'undefined' ?\\n obj instanceof jasmineGlobal.Node :\\n obj !== null &&\\n typeof obj === 'object' &&\\n typeof obj.nodeType === 'number' &&\\n typeof obj.nodeName === 'string';\\n // return obj.nodeType > 0;\\n };\\n\\n j$.isMap = function(obj) {\\n return typeof jasmineGlobal.Map !== 'undefined' && obj.constructor === jasmineGlobal.Map;\\n };\\n\\n j$.isSet = function(obj) {\\n return typeof jasmineGlobal.Set !== 'undefined' && obj.constructor === jasmineGlobal.Set;\\n };\\n\\n j$.isPromise = function(obj) {\\n return typeof jasmineGlobal.Promise !== 'undefined' && !!obj && obj.constructor === jasmineGlobal.Promise;\\n };\\n\\n j$.isPromiseLike = function(obj) {\\n return !!obj && j$.isFunction_(obj.then);\\n };\\n\\n j$.fnNameFor = function(func) {\\n if (func.name) {\\n return func.name;\\n }\\n\\n var matches = func.toString().match(/^\\\\s*function\\\\s*(\\\\w+)\\\\s*\\\\(/) ||\\n func.toString().match(/^\\\\s*\\\\[object\\\\s*(\\\\w+)Constructor\\\\]/);\\n\\n return matches ? matches[1] : '<anonymous>';\\n };\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value being compared is an instance of the specified class/constructor.\\n * @name jasmine.any\\n * @function\\n * @param {Constructor} clazz - The constructor to check against.\\n */\\n j$.any = function(clazz) {\\n return new j$.Any(clazz);\\n };\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value being compared is not `null` and not `undefined`.\\n * @name jasmine.anything\\n * @function\\n */\\n j$.anything = function() {\\n return new j$.Anything();\\n };\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value being compared is `true` or anything truthy.\\n * @name jasmine.truthy\\n * @function\\n */\\n j$.truthy = function() {return new j$.Truthy();};\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value being compared is `null`, `undefined`, `0`, `false` or anything falsey.\\n * @name jasmine.falsy\\n * @function\\n */\\n j$.falsy = function() {return new j$.Falsy();};\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value being compared is empty.\\n * @name jasmine.empty\\n * @function\\n */\\n j$.empty = function() {return new j$.Empty();};\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value being compared is not empty.\\n * @name jasmine.notEmpty\\n * @function\\n */\\n j$.notEmpty = function() {return new j$.NotEmpty();};\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value being compared contains at least the keys and values.\\n * @name jasmine.objectContaining\\n * @function\\n * @param {Object} sample - The subset of properties that _must_ be in the actual.\\n */\\n j$.objectContaining = function(sample) {\\n return new j$.ObjectContaining(sample);\\n };\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value is a `String` that matches the `RegExp` or `String`.\\n * @name jasmine.stringMatching\\n * @function\\n * @param {RegExp|String} expected\\n */\\n j$.stringMatching = function(expected) {\\n return new j$.StringMatching(expected);\\n };\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value is an `Array` that contains at least the elements in the sample.\\n * @name jasmine.arrayContaining\\n * @function\\n * @param {Array} sample\\n */\\n j$.arrayContaining = function(sample) {\\n return new j$.ArrayContaining(sample);\\n };\\n\\n /**\\n * Get a matcher, usable in any {@link matchers|matcher} that uses Jasmine's equality (e.g. {@link matchers#toEqual|toEqual}, {@link matchers#toContain|toContain}, or {@link matchers#toHaveBeenCalledWith|toHaveBeenCalledWith}),\\n * that will succeed if the actual value is an `Array` that contains all of the elements in the sample in any order.\\n * @name jasmine.arrayWithExactContents\\n * @function\\n * @param {Array} sample\\n */\\n j$.arrayWithExactContents = function(sample) {\\n return new j$.ArrayWithExactContents(sample);\\n };\\n\\n j$.isSpy = function(putativeSpy) {\\n if (!putativeSpy) {\\n return false;\\n }\\n return putativeSpy.and instanceof j$.SpyStrategy &&\\n putativeSpy.calls instanceof j$.CallTracker;\\n };\\n};\\n\\ngetJasmineRequireObj().util = function(j$) {\\n\\n var util = {};\\n\\n util.inherit = function(childClass, parentClass) {\\n var Subclass = function() {\\n };\\n Subclass.prototype = parentClass.prototype;\\n childClass.prototype = new Subclass();\\n };\\n\\n util.htmlEscape = function(str) {\\n if (!str) {\\n return str;\\n }\\n return str.replace(/&/g, '&')\\n .replace(/</g, '<')\\n .replace(/>/g, '>');\\n };\\n\\n util.argsToArray = function(args) {\\n var arrayOfArgs = [];\\n for (var i = 0; i < args.length; i++) {\\n arrayOfArgs.push(args[i]);\\n }\\n return arrayOfArgs;\\n };\\n\\n util.isUndefined = function(obj) {\\n return obj === void 0;\\n };\\n\\n util.arrayContains = function(array, search) {\\n var i = array.length;\\n while (i--) {\\n if (array[i] === search) {\\n return true;\\n }\\n }\\n return false;\\n };\\n\\n util.clone = function(obj) {\\n if (Object.prototype.toString.apply(obj) === '[object Array]') {\\n return obj.slice();\\n }\\n\\n var cloned = {};\\n for (var prop in obj) {\\n if (obj.hasOwnProperty(prop)) {\\n cloned[prop] = obj[prop];\\n }\\n }\\n\\n return cloned;\\n };\\n\\n util.cloneArgs = function(args) {\\n var clonedArgs = [];\\n var argsAsArray = j$.util.argsToArray(args);\\n for(var i = 0; i < argsAsArray.length; i++) {\\n var str = Object.prototype.toString.apply(argsAsArray[i]),\\n primitives = /^\\\\[object (Boolean|String|RegExp|Number)/;\\n\\n // All falsey values are either primitives, `null`, or `undefined.\\n if (!argsAsArray[i] || str.match(primitives)) {\\n clonedArgs.push(argsAsArray[i]);\\n } else {\\n clonedArgs.push(j$.util.clone(argsAsArray[i]));\\n }\\n }\\n return clonedArgs;\\n };\\n\\n util.getPropertyDescriptor = function(obj, methodName) {\\n var descriptor,\\n proto = obj;\\n\\n do {\\n descriptor = Object.getOwnPropertyDescriptor(proto, methodName);\\n proto = Object.getPrototypeOf(proto);\\n } while (!descriptor && proto);\\n\\n return descriptor;\\n };\\n\\n util.objectDifference = function(obj, toRemove) {\\n var diff = {};\\n\\n for (var key in obj) {\\n if (util.has(obj, key) && !util.has(toRemove, key)) {\\n diff[key] = obj[key];\\n }\\n }\\n\\n return diff;\\n };\\n\\n util.has = function(obj, key) {\\n return Object.prototype.hasOwnProperty.call(obj, key);\\n };\\n\\n function anyMatch(pattern, lines) {\\n var i;\\n\\n for (i = 0; i < lines.length; i++) {\\n if (lines[i].match(pattern)) {\\n return true;\\n }\\n }\\n\\n return false;\\n }\\n\\n util.errorWithStack = function errorWithStack () {\\n // Don't throw and catch if we don't have to, because it makes it harder\\n // for users to debug their code with exception breakpoints.\\n var error = new Error();\\n\\n if (error.stack) {\\n return error;\\n }\\n\\n // But some browsers (e.g. Phantom) only provide a stack trace if we throw.\\n try {\\n throw new Error();\\n } catch (e) {\\n return e;\\n }\\n };\\n\\n function callerFile() {\\n var trace = new j$.StackTrace(util.errorWithStack());\\n return trace.frames[2].file;\\n }\\n\\n util.jasmineFile = (function() {\\n var result;\\n\\n return function() {\\n var trace;\\n\\n if (!result) {\\n result = callerFile();\\n }\\n\\n return result;\\n };\\n }());\\n\\n return util;\\n};\\n\\ngetJasmineRequireObj().Spec = function(j$) {\\n function Spec(attrs) {\\n this.expectationFactory = attrs.expectationFactory;\\n this.asyncExpectationFactory = attrs.asyncExpectationFactory;\\n this.resultCallback = attrs.resultCallback || function() {};\\n this.id = attrs.id;\\n this.description = attrs.description || '';\\n this.queueableFn = attrs.queueableFn;\\n this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; };\\n this.userContext = attrs.userContext || function() { return {}; };\\n this.onStart = attrs.onStart || function() {};\\n this.getSpecName = attrs.getSpecName || function() { return ''; };\\n this.expectationResultFactory = attrs.expectationResultFactory || function() { };\\n this.queueRunnerFactory = attrs.queueRunnerFactory || function() {};\\n this.catchingExceptions = attrs.catchingExceptions || function() { return true; };\\n this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure;\\n this.timer = attrs.timer || j$.noopTimer;\\n\\n if (!this.queueableFn.fn) {\\n this.pend();\\n }\\n\\n /**\\n * @typedef SpecResult\\n * @property {Int} id - The unique id of this spec.\\n * @property {String} description - The description passed to the {@link it} that created this spec.\\n * @property {String} fullName - The full description including all ancestors of this spec.\\n * @property {Expectation[]} failedExpectations - The list of expectations that failed during execution of this spec.\\n * @property {Expectation[]} passedExpectations - The list of expectations that passed during execution of this spec.\\n * @property {Expectation[]} deprecationWarnings - The list of deprecation warnings that occurred during execution this spec.\\n * @property {String} pendingReason - If the spec is {@link pending}, this will be the reason.\\n * @property {String} status - Once the spec has completed, this string represents the pass/fail status of this spec.\\n * @property {number} duration - The time in ms used by the spec execution, including any before/afterEach.\\n */\\n this.result = {\\n id: this.id,\\n description: this.description,\\n fullName: this.getFullName(),\\n failedExpectations: [],\\n passedExpectations: [],\\n deprecationWarnings: [],\\n pendingReason: '',\\n duration: null,\\n };\\n }\\n\\n Spec.prototype.addExpectationResult = function(passed, data, isError) {\\n var expectationResult = this.expectationResultFactory(data);\\n if (passed) {\\n this.result.passedExpectations.push(expectationResult);\\n } else {\\n this.result.failedExpectations.push(expectationResult);\\n\\n if (this.throwOnExpectationFailure && !isError) {\\n throw new j$.errors.ExpectationFailed();\\n }\\n }\\n };\\n\\n Spec.prototype.expect = function(actual) {\\n return this.expectationFactory(actual, this);\\n };\\n\\n Spec.prototype.expectAsync = function(actual) {\\n return this.asyncExpectationFactory(actual, this);\\n };\\n\\n Spec.prototype.execute = function(onComplete, excluded) {\\n var self = this;\\n\\n var onStart = {\\n fn: function(done) {\\n self.timer.start();\\n self.onStart(self, done);\\n }\\n };\\n\\n var complete = {\\n fn: function(done) {\\n self.queueableFn.fn = null;\\n self.result.status = self.status(excluded);\\n self.resultCallback(self.result, done);\\n }\\n };\\n\\n var fns = this.beforeAndAfterFns();\\n var regularFns = fns.befores.concat(this.queueableFn);\\n\\n var runnerConfig = {\\n isLeaf: true,\\n queueableFns: regularFns,\\n cleanupFns: fns.afters,\\n onException: function () {\\n self.onException.apply(self, arguments);\\n },\\n onComplete: function() {\\n self.result.duration = self.timer.elapsed();\\n onComplete(self.result.status === 'failed' && new j$.StopExecutionError('spec failed'));\\n },\\n userContext: this.userContext()\\n };\\n\\n if (this.markedPending || excluded === true) {\\n runnerConfig.queueableFns = [];\\n runnerConfig.cleanupFns = [];\\n }\\n\\n runnerConfig.queueableFns.unshift(onStart);\\n runnerConfig.cleanupFns.push(complete);\\n\\n this.queueRunnerFactory(runnerConfig);\\n };\\n\\n Spec.prototype.onException = function onException(e) {\\n if (Spec.isPendingSpecException(e)) {\\n this.pend(extractCustomPendingMessage(e));\\n return;\\n }\\n\\n if (e instanceof j$.errors.ExpectationFailed) {\\n return;\\n }\\n\\n this.addExpectationResult(false, {\\n matcherName: '',\\n passed: false,\\n expected: '',\\n actual: '',\\n error: e\\n }, true);\\n };\\n\\n Spec.prototype.pend = function(message) {\\n this.markedPending = true;\\n if (message) {\\n this.result.pendingReason = message;\\n }\\n };\\n\\n Spec.prototype.getResult = function() {\\n this.result.status = this.status();\\n return this.result;\\n };\\n\\n Spec.prototype.status = function(excluded) {\\n if (excluded === true) {\\n return 'excluded';\\n }\\n\\n if (this.markedPending) {\\n return 'pending';\\n }\\n\\n if (this.result.failedExpectations.length > 0) {\\n return 'failed';\\n } else {\\n return 'passed';\\n }\\n };\\n\\n Spec.prototype.getFullName = function() {\\n return this.getSpecName(this);\\n };\\n\\n Spec.prototype.addDeprecationWarning = function(deprecation) {\\n if (typeof deprecation === 'string') {\\n deprecation = { message: deprecation };\\n }\\n this.result.deprecationWarnings.push(this.expectationResultFactory(deprecation));\\n };\\n\\n var extractCustomPendingMessage = function(e) {\\n var fullMessage = e.toString(),\\n boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage),\\n boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length;\\n\\n return fullMessage.substr(boilerplateEnd);\\n };\\n\\n Spec.pendingSpecExceptionMessage = '=> marked Pending';\\n\\n Spec.isPendingSpecException = function(e) {\\n return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1);\\n };\\n\\n return Spec;\\n};\\n\\nif (typeof window == void 0 && typeof exports == 'object') {\\n /* globals exports */\\n exports.Spec = jasmineRequire.Spec;\\n}\\n\\n/*jshint bitwise: false*/\\n\\ngetJasmineRequireObj().Order = function() {\\n function Order(options) {\\n this.random = 'random' in options ? options.random : true;\\n var seed = this.seed = options.seed || generateSeed();\\n this.sort = this.random ? randomOrder : naturalOrder;\\n\\n function naturalOrder(items) {\\n return items;\\n }\\n\\n function randomOrder(items) {\\n var copy = items.slice();\\n copy.sort(function(a, b) {\\n return jenkinsHash(seed + a.id) - jenkinsHash(seed + b.id);\\n });\\n return copy;\\n }\\n\\n function generateSeed() {\\n return String(Math.random()).slice(-5);\\n }\\n\\n // Bob Jenkins One-at-a-Time Hash algorithm is a non-cryptographic hash function\\n // used to get a different output when the key changes slightly.\\n // We use your return to sort the children randomly in a consistent way when\\n // used in conjunction with a seed\\n\\n function jenkinsHash(key) {\\n var hash, i;\\n for(hash = i = 0; i < key.length; ++i) {\\n hash += key.charCodeAt(i);\\n hash += (hash << 10);\\n hash ^= (hash >> 6);\\n }\\n hash += (hash << 3);\\n hash ^= (hash >> 11);\\n hash += (hash << 15);\\n return hash;\\n }\\n\\n }\\n\\n return Order;\\n};\\n\\ngetJasmineRequireObj().Env = function(j$) {\\n /**\\n * _Note:_ Do not construct this directly, Jasmine will make one during booting.\\n * @name Env\\n * @classdesc The Jasmine environment\\n * @constructor\\n */\\n function Env(options) {\\n options = options || {};\\n\\n var self = this;\\n var global = options.global || j$.getGlobal();\\n\\n var totalSpecsDefined = 0;\\n\\n var realSetTimeout = global.setTimeout;\\n var realClearTimeout = global.clearTimeout;\\n var clearStack = j$.getClearStack(global);\\n this.clock = new j$.Clock(global, function () { return new j$.DelayedFunctionScheduler(); }, new j$.MockDate(global));\\n\\n var runnableResources = {};\\n\\n var currentSpec = null;\\n var currentlyExecutingSuites = [];\\n var currentDeclarationSuite = null;\\n var hasFailures = false;\\n\\n /**\\n * This represents the available options to configure Jasmine.\\n * Options that are not provided will use their default values\\n * @interface Configuration\\n */\\n var config = {\\n /**\\n * Whether to randomize spec execution order\\n * @name Configuration#random\\n * @type Boolean\\n * @default true\\n */\\n random: true,\\n /**\\n * Seed to use as the basis of randomization.\\n * Null causes the seed to be determined randomly at the start of execution.\\n * @name Configuration#seed\\n * @type function\\n * @default null\\n */\\n seed: null,\\n /**\\n * Whether to stop execution of the suite after the first spec failure\\n * @name Configuration#failFast\\n * @type Boolean\\n * @default false\\n */\\n failFast: false,\\n /**\\n * Whether to cause specs to only have one expectation failure.\\n * @name Configuration#oneFailurePerSpec\\n * @type Boolean\\n * @default false\\n */\\n oneFailurePerSpec: false,\\n /**\\n * Function to use to filter specs\\n * @name Configuration#specFilter\\n * @type function\\n * @default true\\n */\\n specFilter: function() {\\n return true;\\n },\\n /**\\n * Whether or not reporters should hide disabled specs from their output.\\n * Currently only supported by Jasmine's HTMLReporter\\n * @name Configuration#hideDisabled\\n * @type Boolean\\n * @default false\\n */\\n hideDisabled: false\\n };\\n\\n var currentSuite = function() {\\n return currentlyExecutingSuites[currentlyExecutingSuites.length - 1];\\n };\\n\\n var currentRunnable = function() {\\n return currentSpec || currentSuite();\\n };\\n\\n var globalErrors = null;\\n\\n var installGlobalErrors = function() {\\n if (globalErrors) {\\n return;\\n }\\n\\n globalErrors = new j$.GlobalErrors();\\n globalErrors.install();\\n };\\n\\n if (!options.suppressLoadErrors) {\\n installGlobalErrors();\\n globalErrors.pushListener(function(message, filename, lineno, colNo, err) {\\n topSuite.result.failedExpectations.push({\\n passed: false,\\n globalErrorType: 'load',\\n message: message,\\n stack: err && err.stack,\\n filename: filename,\\n lineno: lineno\\n });\\n });\\n }\\n\\n /**\\n * Configure your jasmine environment\\n * @name Env#configure\\n * @argument {Configuration} configuration\\n * @function\\n */\\n this.configure = function(configuration) {\\n if (configuration.specFilter) {\\n config.specFilter = configuration.specFilter;\\n }\\n\\n if (configuration.hasOwnProperty('random')) {\\n config.random = !!configuration.random;\\n }\\n\\n if (configuration.hasOwnProperty('seed')) {\\n config.seed = configuration.seed;\\n }\\n\\n if (configuration.hasOwnProperty('failFast')) {\\n config.failFast = configuration.failFast;\\n }\\n\\n if (configuration.hasOwnProperty('oneFailurePerSpec')) {\\n config.oneFailurePerSpec = configuration.oneFailurePerSpec;\\n }\\n\\n if (configuration.hasOwnProperty('hideDisabled')) {\\n config.hideDisabled = configuration.hideDisabled;\\n }\\n };\\n\\n /**\\n * Get the current configuration for your jasmine environment\\n * @name Env#configuration\\n * @function\\n * @returns {Configuration}\\n */\\n this.configuration = function() {\\n var result = {};\\n for (var property in config) {\\n result[property] = config[property];\\n }\\n return result;\\n };\\n\\n Object.defineProperty(this, 'specFilter', {\\n get: function() {\\n self.deprecated('Getting specFilter directly from Env is deprecated, please check the specFilter option from `configuration`');\\n return config.specFilter;\\n },\\n set: function(val) {\\n self.deprecated('Setting specFilter directly on Env is deprecated, please use the specFilter option in `configure`');\\n config.specFilter = val;\\n }\\n });\\n\\n this.addSpyStrategy = function(name, fn) {\\n if(!currentRunnable()) {\\n throw new Error('Custom spy strategies must be added in a before function or a spec');\\n }\\n runnableResources[currentRunnable().id].customSpyStrategies[name] = fn;\\n };\\n\\n this.addCustomEqualityTester = function(tester) {\\n if(!currentRunnable()) {\\n throw new Error('Custom Equalities must be added in a before function or a spec');\\n }\\n runnableResources[currentRunnable().id].customEqualityTesters.push(tester);\\n };\\n\\n this.addMatchers = function(matchersToAdd) {\\n if(!currentRunnable()) {\\n throw new Error('Matchers must be added in a before function or a spec');\\n }\\n var customMatchers = runnableResources[currentRunnable().id].customMatchers;\\n for (var matcherName in matchersToAdd) {\\n customMatchers[matcherName] = matchersToAdd[matcherName];\\n }\\n };\\n\\n j$.Expectation.addCoreMatchers(j$.matchers);\\n j$.Expectation.addAsyncCoreMatchers(j$.asyncMatchers);\\n\\n var nextSpecId = 0;\\n var getNextSpecId = function() {\\n return 'spec' + nextSpecId++;\\n };\\n\\n var nextSuiteId = 0;\\n var getNextSuiteId = function() {\\n return 'suite' + nextSuiteId++;\\n };\\n\\n var expectationFactory = function(actual, spec) {\\n return j$.Expectation.factory({\\n util: j$.matchersUtil,\\n customEqualityTesters: runnableResources[spec.id].customEqualityTesters,\\n customMatchers: runnableResources[spec.id].customMatchers,\\n actual: actual,\\n addExpectationResult: addExpectationResult\\n });\\n\\n function addExpectationResult(passed, result) {\\n return spec.addExpectationResult(passed, result);\\n }\\n };\\n\\n var asyncExpectationFactory = function(actual, spec) {\\n return j$.Expectation.asyncFactory({\\n util: j$.matchersUtil,\\n customEqualityTesters: runnableResources[spec.id].customEqualityTesters,\\n actual: actual,\\n addExpectationResult: addExpectationResult\\n });\\n\\n function addExpectationResult(passed, result) {\\n return spec.addExpectationResult(passed, result);\\n }\\n };\\n\\n var defaultResourcesForRunnable = function(id, parentRunnableId) {\\n var resources = {spies: [], customEqualityTesters: [], customMatchers: {}, customSpyStrategies: {}};\\n\\n if(runnableResources[parentRunnableId]){\\n resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters);\\n resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers);\\n }\\n\\n runnableResources[id] = resources;\\n };\\n\\n var clearResourcesForRunnable = function(id) {\\n spyRegistry.clearSpies();\\n delete runnableResources[id];\\n };\\n\\n var beforeAndAfterFns = function(suite) {\\n return function() {\\n var befores = [],\\n afters = [];\\n\\n while(suite) {\\n befores = befores.concat(suite.beforeFns);\\n afters = afters.concat(suite.afterFns);\\n\\n suite = suite.parentSuite;\\n }\\n\\n return {\\n befores: befores.reverse(),\\n afters: afters\\n };\\n };\\n };\\n\\n var getSpecName = function(spec, suite) {\\n var fullName = [spec.description],\\n suiteFullName = suite.getFullName();\\n\\n if (suiteFullName !== '') {\\n fullName.unshift(suiteFullName);\\n }\\n return fullName.join(' ');\\n };\\n\\n // TODO: we may just be able to pass in the fn instead of wrapping here\\n var buildExpectationResult = j$.buildExpectationResult,\\n exceptionFormatter = new j$.ExceptionFormatter(),\\n expectationResultFactory = function(attrs) {\\n attrs.messageFormatter = exceptionFormatter.message;\\n attrs.stackFormatter = exceptionFormatter.stack;\\n\\n return buildExpectationResult(attrs);\\n };\\n\\n var maximumSpecCallbackDepth = 20;\\n var currentSpecCallbackDepth = 0;\\n\\n /**\\n * Sets whether Jasmine should throw an Error when an expectation fails.\\n * This causes a spec to only have one expectation failure.\\n * @name Env#throwOnExpectationFailure\\n * @function\\n * @param {Boolean} value Whether to throw when a expectation fails\\n * @deprecated Use the `oneFailurePerSpec` option with {@link Env#configure}\\n */\\n this.throwOnExpectationFailure = function(value) {\\n this.deprecated('Setting throwOnExpectationFailure directly on Env is deprecated, please use the oneFailurePerSpec option in `configure`');\\n this.configure({oneFailurePerSpec: !!value});\\n };\\n\\n this.throwingExpectationFailures = function() {\\n this.deprecated('Getting throwingExpectationFailures directly from Env is deprecated, please check the oneFailurePerSpec option from `configuration`');\\n return config.oneFailurePerSpec;\\n };\\n\\n /**\\n * Set whether to stop suite execution when a spec fails\\n * @name Env#stopOnSpecFailure\\n * @function\\n * @param {Boolean} value Whether to stop suite execution when a spec fails\\n * @deprecated Use the `failFast` option with {@link Env#configure}\\n */\\n this.stopOnSpecFailure = function(value) {\\n this.deprecated('Setting stopOnSpecFailure directly is deprecated, please use the failFast option in `configure`');\\n this.configure({failFast: !!value});\\n };\\n\\n this.stoppingOnSpecFailure = function() {\\n this.deprecated('Getting stoppingOnSpecFailure directly from Env is deprecated, please check the failFast option from `configuration`');\\n return config.failFast;\\n };\\n\\n /**\\n * Set whether to randomize test execution order\\n * @name Env#randomizeTests\\n * @function\\n * @param {Boolean} value Whether to randomize execution order\\n * @deprecated Use the `random` option with {@link Env#configure}\\n */\\n this.randomizeTests = function(value) {\\n this.deprecated('Setting randomizeTests directly is deprecated, please use the random option in `configure`');\\n config.random = !!value;\\n };\\n\\n this.randomTests = function() {\\n this.deprecated('Getting randomTests directly from Env is deprecated, please check the random option from `configuration`');\\n return config.random;\\n };\\n\\n /**\\n * Set the random number seed for spec randomization\\n * @name Env#seed\\n * @function\\n * @param {Number} value The seed value\\n * @deprecated Use the `seed` option with {@link Env#configure}\\n */\\n this.seed = function(value) {\\n this.deprecated('Setting seed directly is deprecated, please use the seed option in `configure`');\\n if (value) {\\n config.seed = value;\\n }\\n return config.seed;\\n };\\n\\n this.hidingDisabled = function(value) {\\n this.deprecated('Getting hidingDisabled directly from Env is deprecated, please check the hideDisabled option from `configuration`');\\n return config.hideDisabled;\\n };\\n\\n /**\\n * @name Env#hideDisabled\\n * @function\\n */\\n this.hideDisabled = function(value) {\\n this.deprecated('Setting hideDisabled directly is deprecated, please use the hideDisabled option in `configure`');\\n config.hideDisabled = !!value;\\n };\\n\\n this.deprecated = function(deprecation) {\\n var runnable = currentRunnable() || topSuite;\\n runnable.addDeprecationWarning(deprecation);\\n if(typeof console !== 'undefined' && typeof console.error === 'function') {\\n console.error('DEPRECATION:', deprecation);\\n }\\n };\\n\\n var queueRunnerFactory = function(options, args) {\\n var failFast = false;\\n if (options.isLeaf) {\\n failFast = config.oneFailurePerSpec;\\n } else if (!options.isReporter) {\\n failFast = config.failFast;\\n }\\n options.clearStack = options.clearStack || clearStack;\\n options.timeout = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout};\\n options.fail = self.fail;\\n options.globalErrors = globalErrors;\\n options.completeOnFirstError = failFast;\\n options.onException = options.onException || function(e) {\\n (currentRunnable() || topSuite).onException(e);\\n };\\n options.deprecated = self.deprecated;\\n\\n new j$.QueueRunner(options).execute(args);\\n };\\n\\n var topSuite = new j$.Suite({\\n env: this,\\n id: getNextSuiteId(),\\n description: 'Jasmine__TopLevel__Suite',\\n expectationFactory: expectationFactory,\\n asyncExpectationFactory: asyncExpectationFactory,\\n expectationResultFactory: expectationResultFactory\\n });\\n defaultResourcesForRunnable(topSuite.id);\\n currentDeclarationSuite = topSuite;\\n\\n this.topSuite = function() {\\n return topSuite;\\n };\\n\\n /**\\n * This represents the available reporter callback for an object passed to {@link Env#addReporter}.\\n * @interface Reporter\\n * @see custom_reporter\\n */\\n var reporter = new j$.ReportDispatcher([\\n /**\\n * `jasmineStarted` is called after all of the specs have been loaded, but just before execution starts.\\n * @function\\n * @name Reporter#jasmineStarted\\n * @param {JasmineStartedInfo} suiteInfo Information about the full Jasmine suite that is being run\\n * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on.\\n * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion.\\n * @see async\\n */\\n 'jasmineStarted',\\n /**\\n * When the entire suite has finished execution `jasmineDone` is called\\n * @function\\n * @name Reporter#jasmineDone\\n * @param {JasmineDoneInfo} suiteInfo Information about the full Jasmine suite that just finished running.\\n * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on.\\n * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion.\\n * @see async\\n */\\n 'jasmineDone',\\n /**\\n * `suiteStarted` is invoked when a `describe` starts to run\\n * @function\\n * @name Reporter#suiteStarted\\n * @param {SuiteResult} result Information about the individual {@link describe} being run\\n * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on.\\n * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion.\\n * @see async\\n */\\n 'suiteStarted',\\n /**\\n * `suiteDone` is invoked when all of the child specs and suites for a given suite have been run\\n *\\n * While jasmine doesn't require any specific functions, not defining a `suiteDone` will make it impossible for a reporter to know when a suite has failures in an `afterAll`.\\n * @function\\n * @name Reporter#suiteDone\\n * @param {SuiteResult} result\\n * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on.\\n * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion.\\n * @see async\\n */\\n 'suiteDone',\\n /**\\n * `specStarted` is invoked when an `it` starts to run (including associated `beforeEach` functions)\\n * @function\\n * @name Reporter#specStarted\\n * @param {SpecResult} result Information about the individual {@link it} being run\\n * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on.\\n * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion.\\n * @see async\\n */\\n 'specStarted',\\n /**\\n * `specDone` is invoked when an `it` and its associated `beforeEach` and `afterEach` functions have been run.\\n *\\n * While jasmine doesn't require any specific functions, not defining a `specDone` will make it impossible for a reporter to know when a spec has failed.\\n * @function\\n * @name Reporter#specDone\\n * @param {SpecResult} result\\n * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on.\\n * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion.\\n * @see async\\n */\\n 'specDone'\\n ], queueRunnerFactory);\\n\\n this.execute = function(runnablesToRun) {\\n var self = this;\\n installGlobalErrors();\\n\\n if(!runnablesToRun) {\\n if (focusedRunnables.length) {\\n runnablesToRun = focusedRunnables;\\n } else {\\n runnablesToRun = [topSuite.id];\\n }\\n }\\n\\n var order = new j$.Order({\\n random: config.random,\\n seed: config.seed\\n });\\n\\n var processor = new j$.TreeProcessor({\\n tree: topSuite,\\n runnableIds: runnablesToRun,\\n queueRunnerFactory: queueRunnerFactory,\\n nodeStart: function(suite, next) {\\n currentlyExecutingSuites.push(suite);\\n defaultResourcesForRunnable(suite.id, suite.parentSuite.id);\\n reporter.suiteStarted(suite.result, next);\\n suite.startTimer();\\n },\\n nodeComplete: function(suite, result, next) {\\n if (suite !== currentSuite()) {\\n throw new Error('Tried to complete the wrong suite');\\n }\\n\\n clearResourcesForRunnable(suite.id);\\n currentlyExecutingSuites.pop();\\n\\n if (result.status === 'failed') {\\n hasFailures = true;\\n }\\n suite.endTimer();\\n reporter.suiteDone(result, next);\\n },\\n orderChildren: function(node) {\\n return order.sort(node.children);\\n },\\n excludeNode: function(spec) {\\n return !config.specFilter(spec);\\n }\\n });\\n\\n if(!processor.processTree().valid) {\\n throw new Error('Invalid order: would cause a beforeAll or afterAll to be run multiple times');\\n }\\n\\n /**\\n * Information passed to the {@link Reporter#jasmineStarted} event.\\n * @typedef JasmineStartedInfo\\n * @property {Int} totalSpecsDefined - The total number of specs defined in this suite.\\n * @property {Order} order - Information about the ordering (random or not) of this execution of the suite.\\n */\\n reporter.jasmineStarted({\\n totalSpecsDefined: totalSpecsDefined,\\n order: order\\n }, function() {\\n currentlyExecutingSuites.push(topSuite);\\n\\n processor.execute(function () {\\n clearResourcesForRunnable(topSuite.id);\\n currentlyExecutingSuites.pop();\\n var overallStatus, incompleteReason;\\n\\n if (hasFailures || topSuite.result.failedExpectations.length > 0) {\\n overallStatus = 'failed';\\n } else if (focusedRunnables.length > 0) {\\n overallStatus = 'incomplete';\\n incompleteReason = 'fit() or fdescribe() was found';\\n } else if (totalSpecsDefined === 0) {\\n overallStatus = 'incomplete';\\n incompleteReason = 'No specs found';\\n } else {\\n overallStatus = 'passed';\\n }\\n\\n /**\\n * Information passed to the {@link Reporter#jasmineDone} event.\\n * @typedef JasmineDoneInfo\\n * @property {OverallStatus} overallStatus - The overall result of the suite: 'passed', 'failed', or 'incomplete'.\\n * @property {IncompleteReason} incompleteReason - Explanation of why the suite was incomplete.\\n * @property {Order} order - Information about the ordering (random or not) of this execution of the suite.\\n * @property {Expectation[]} failedExpectations - List of expectations that failed in an {@link afterAll} at the global level.\\n * @property {Expectation[]} deprecationWarnings - List of deprecation warnings that occurred at the global level.\\n */\\n reporter.jasmineDone({\\n overallStatus: overallStatus,\\n incompleteReason: incompleteReason,\\n order: order,\\n failedExpectations: topSuite.result.failedExpectations,\\n deprecationWarnings: topSuite.result.deprecationWarnings\\n }, function() {});\\n });\\n });\\n };\\n\\n /**\\n * Add a custom reporter to the Jasmine environment.\\n * @name Env#addReporter\\n * @function\\n * @param {Reporter} reporterToAdd The reporter to be added.\\n * @see custom_reporter\\n */\\n this.addReporter = function(reporterToAdd) {\\n reporter.addReporter(reporterToAdd);\\n };\\n\\n /**\\n * Provide a fallback reporter if no other reporters have been specified.\\n * @name Env#provideFallbackReporter\\n * @function\\n * @param {Reporter} reporterToAdd The reporter\\n * @see custom_reporter\\n */\\n this.provideFallbackReporter = function(reporterToAdd) {\\n reporter.provideFallbackReporter(reporterToAdd);\\n };\\n\\n /**\\n * Clear all registered reporters\\n * @name Env#clearReporters\\n * @function\\n */\\n this.clearReporters = function() {\\n reporter.clearReporters();\\n };\\n\\n var spyFactory = new j$.SpyFactory(function() {\\n var runnable = currentRunnable();\\n\\n if (runnable) {\\n return runnableResources[runnable.id].customSpyStrategies;\\n }\\n\\n return {};\\n });\\n\\n var spyRegistry = new j$.SpyRegistry({\\n currentSpies: function() {\\n if(!currentRunnable()) {\\n throw new Error('Spies must be created in a before function or a spec');\\n }\\n return runnableResources[currentRunnable().id].spies;\\n },\\n createSpy: function(name, originalFn) {\\n return self.createSpy(name, originalFn);\\n }\\n });\\n\\n this.allowRespy = function(allow){\\n spyRegistry.allowRespy(allow);\\n };\\n\\n this.spyOn = function() {\\n return spyRegistry.spyOn.apply(spyRegistry, arguments);\\n };\\n\\n this.spyOnProperty = function() {\\n return spyRegistry.spyOnProperty.apply(spyRegistry, arguments);\\n };\\n\\n this.spyOnAllFunctions = function() {\\n return spyRegistry.spyOnAllFunctions.apply(spyRegistry, arguments);\\n };\\n\\n this.createSpy = function(name, originalFn) {\\n if (arguments.length === 1 && j$.isFunction_(name)) {\\n originalFn = name;\\n name = originalFn.name;\\n }\\n\\n return spyFactory.createSpy(name, originalFn);\\n };\\n\\n this.createSpyObj = function(baseName, methodNames) {\\n return spyFactory.createSpyObj(baseName, methodNames);\\n };\\n\\n var ensureIsFunction = function(fn, caller) {\\n if (!j$.isFunction_(fn)) {\\n throw new Error(caller + ' expects a function argument; received ' + j$.getType_(fn));\\n }\\n };\\n\\n var ensureIsFunctionOrAsync = function(fn, caller) {\\n if (!j$.isFunction_(fn) && !j$.isAsyncFunction_(fn)) {\\n throw new Error(caller + ' expects a function argument; received ' + j$.getType_(fn));\\n }\\n };\\n\\n function ensureIsNotNested(method) {\\n var runnable = currentRunnable();\\n if (runnable !== null && runnable !== undefined) {\\n throw new Error('\\\\'' + method + '\\\\' should only be used in \\\\'describe\\\\' function');\\n }\\n }\\n\\n var suiteFactory = function(description) {\\n var suite = new j$.Suite({\\n env: self,\\n id: getNextSuiteId(),\\n description: description,\\n parentSuite: currentDeclarationSuite,\\n expectationFactory: expectationFactory,\\n asyncExpectationFactory: asyncExpectationFactory,\\n expectationResultFactory: expectationResultFactory,\\n throwOnExpectationFailure: config.oneFailurePerSpec\\n });\\n\\n return suite;\\n };\\n\\n this.describe = function(description, specDefinitions) {\\n ensureIsNotNested('describe');\\n ensureIsFunction(specDefinitions, 'describe');\\n var suite = suiteFactory(description);\\n if (specDefinitions.length > 0) {\\n throw new Error('describe does not expect any arguments');\\n }\\n if (currentDeclarationSuite.markedPending) {\\n suite.pend();\\n }\\n addSpecsToSuite(suite, specDefinitions);\\n return suite;\\n };\\n\\n this.xdescribe = function(description, specDefinitions) {\\n ensureIsNotNested('xdescribe');\\n ensureIsFunction(specDefinitions, 'xdescribe');\\n var suite = suiteFactory(description);\\n suite.pend();\\n addSpecsToSuite(suite, specDefinitions);\\n return suite;\\n };\\n\\n var focusedRunnables = [];\\n\\n this.fdescribe = function(description, specDefinitions) {\\n ensureIsNotNested('fdescribe');\\n ensureIsFunction(specDefinitions, 'fdescribe');\\n var suite = suiteFactory(description);\\n suite.isFocused = true;\\n\\n focusedRunnables.push(suite.id);\\n unfocusAncestor();\\n addSpecsToSuite(suite, specDefinitions);\\n\\n return suite;\\n };\\n\\n function addSpecsToSuite(suite, specDefinitions) {\\n var parentSuite = currentDeclarationSuite;\\n parentSuite.addChild(suite);\\n currentDeclarationSuite = suite;\\n\\n var declarationError = null;\\n try {\\n specDefinitions.call(suite);\\n } catch (e) {\\n declarationError = e;\\n }\\n\\n if (declarationError) {\\n suite.onException(declarationError);\\n }\\n\\n currentDeclarationSuite = parentSuite;\\n }\\n\\n function findFocusedAncestor(suite) {\\n while (suite) {\\n if (suite.isFocused) {\\n return suite.id;\\n }\\n suite = suite.parentSuite;\\n }\\n\\n return null;\\n }\\n\\n function unfocusAncestor() {\\n var focusedAncestor = findFocusedAncestor(currentDeclarationSuite);\\n if (focusedAncestor) {\\n for (var i = 0; i < focusedRunnables.length; i++) {\\n if (focusedRunnables[i] === focusedAncestor) {\\n focusedRunnables.splice(i, 1);\\n break;\\n }\\n }\\n }\\n }\\n\\n var specFactory = function(description, fn, suite, timeout) {\\n totalSpecsDefined++;\\n var spec = new j$.Spec({\\n id: getNextSpecId(),\\n beforeAndAfterFns: beforeAndAfterFns(suite),\\n expectationFactory: expectationFactory,\\n asyncExpectationFactory: asyncExpectationFactory,\\n resultCallback: specResultCallback,\\n getSpecName: function(spec) {\\n return getSpecName(spec, suite);\\n },\\n onStart: specStarted,\\n description: description,\\n expectationResultFactory: expectationResultFactory,\\n queueRunnerFactory: queueRunnerFactory,\\n userContext: function() { return suite.clonedSharedUserContext(); },\\n queueableFn: {\\n fn: fn,\\n timeout: timeout || 0\\n },\\n throwOnExpectationFailure: config.oneFailurePerSpec,\\n timer: new j$.Timer(),\\n });\\n return spec;\\n\\n function specResultCallback(result, next) {\\n clearResourcesForRunnable(spec.id);\\n currentSpec = null;\\n\\n if (result.status === 'failed') {\\n hasFailures = true;\\n }\\n\\n reporter.specDone(result, next);\\n }\\n\\n function specStarted(spec, next) {\\n currentSpec = spec;\\n defaultResourcesForRunnable(spec.id, suite.id);\\n reporter.specStarted(spec.result, next);\\n }\\n };\\n\\n this.it = function(description, fn, timeout) {\\n ensureIsNotNested('it');\\n // it() sometimes doesn't have a fn argument, so only check the type if\\n // it's given.\\n if (arguments.length > 1 && typeof fn !== 'undefined') {\\n ensureIsFunctionOrAsync(fn, 'it');\\n }\\n var spec = specFactory(description, fn, currentDeclarationSuite, timeout);\\n if (currentDeclarationSuite.markedPending) {\\n spec.pend();\\n }\\n currentDeclarationSuite.addChild(spec);\\n return spec;\\n };\\n\\n this.xit = function(description, fn, timeout) {\\n ensureIsNotNested('xit');\\n // xit(), like it(), doesn't always have a fn argument, so only check the\\n // type when needed.\\n if (arguments.length > 1 && typeof fn !== 'undefined') {\\n ensureIsFunctionOrAsync(fn, 'xit');\\n }\\n var spec = this.it.apply(this, arguments);\\n spec.pend('Temporarily disabled with xit');\\n return spec;\\n };\\n\\n this.fit = function(description, fn, timeout){\\n ensureIsNotNested('fit');\\n ensureIsFunctionOrAsync(fn, 'fit');\\n var spec = specFactory(description, fn, currentDeclarationSuite, timeout);\\n currentDeclarationSuite.addChild(spec);\\n focusedRunnables.push(spec.id);\\n unfocusAncestor();\\n return spec;\\n };\\n\\n this.expect = function(actual) {\\n if (!currentRunnable()) {\\n throw new Error('\\\\'expect\\\\' was used when there was no current spec, this could be because an asynchronous test timed out');\\n }\\n\\n return currentRunnable().expect(actual);\\n };\\n\\n this.expectAsync = function(actual) {\\n if (!currentRunnable()) {\\n throw new Error('\\\\'expectAsync\\\\' was used when there was no current spec, this could be because an asynchronous test timed out');\\n }\\n\\n return currentRunnable().expectAsync(actual);\\n };\\n\\n this.beforeEach = function(beforeEachFunction, timeout) {\\n ensureIsNotNested('beforeEach');\\n ensureIsFunctionOrAsync(beforeEachFunction, 'beforeEach');\\n currentDeclarationSuite.beforeEach({\\n fn: beforeEachFunction,\\n timeout: timeout || 0\\n });\\n };\\n\\n this.beforeAll = function(beforeAllFunction, timeout) {\\n ensureIsNotNested('beforeAll');\\n ensureIsFunctionOrAsync(beforeAllFunction, 'beforeAll');\\n currentDeclarationSuite.beforeAll({\\n fn: beforeAllFunction,\\n timeout: timeout || 0\\n });\\n };\\n\\n this.afterEach = function(afterEachFunction, timeout) {\\n ensureIsNotNested('afterEach');\\n ensureIsFunctionOrAsync(afterEachFunction, 'afterEach');\\n afterEachFunction.isCleanup = true;\\n currentDeclarationSuite.afterEach({\\n fn: afterEachFunction,\\n timeout: timeout || 0\\n });\\n };\\n\\n this.afterAll = function(afterAllFunction, timeout) {\\n ensureIsNotNested('afterAll');\\n ensureIsFunctionOrAsync(afterAllFunction, 'afterAll');\\n currentDeclarationSuite.afterAll({\\n fn: afterAllFunction,\\n timeout: timeout || 0\\n });\\n };\\n\\n this.pending = function(message) {\\n var fullMessage = j$.Spec.pendingSpecExceptionMessage;\\n if(message) {\\n fullMessage += message;\\n }\\n throw fullMessage;\\n };\\n\\n this.fail = function(error) {\\n if (!currentRunnable()) {\\n throw new Error('\\\\'fail\\\\' was used when there was no current spec, this could be because an asynchronous test timed out');\\n }\\n\\n var message = 'Failed';\\n if (error) {\\n message += ': ';\\n if (error.message) {\\n message += error.message;\\n } else if (j$.isString_(error)) {\\n message += error;\\n } else {\\n // pretty print all kind of objects. This includes arrays.\\n message += j$.pp(error);\\n }\\n }\\n\\n currentRunnable().addExpectationResult(false, {\\n matcherName: '',\\n passed: false,\\n expected: '',\\n actual: '',\\n message: message,\\n error: error && error.message ? error : null\\n });\\n\\n if (config.oneFailurePerSpec) {\\n throw new Error(message);\\n }\\n };\\n }\\n\\n return Env;\\n};\\n\\ngetJasmineRequireObj().JsApiReporter = function(j$) {\\n /**\\n * @name jsApiReporter\\n * @classdesc {@link Reporter} added by default in `boot.js` to record results for retrieval in javascript code. An instance is made available as `jsApiReporter` on the global object.\\n * @class\\n * @hideconstructor\\n */\\n function JsApiReporter(options) {\\n var timer = options.timer || j$.noopTimer,\\n status = 'loaded';\\n\\n this.started = false;\\n this.finished = false;\\n this.runDetails = {};\\n\\n this.jasmineStarted = function() {\\n this.started = true;\\n status = 'started';\\n timer.start();\\n };\\n\\n var executionTime;\\n\\n this.jasmineDone = function(runDetails) {\\n this.finished = true;\\n this.runDetails = runDetails;\\n executionTime = timer.elapsed();\\n status = 'done';\\n };\\n\\n /**\\n * Get the current status for the Jasmine environment.\\n * @name jsApiReporter#status\\n * @function\\n * @return {String} - One of `loaded`, `started`, or `done`\\n */\\n this.status = function() {\\n return status;\\n };\\n\\n var suites = [],\\n suites_hash = {};\\n\\n this.suiteStarted = function(result) {\\n suites_hash[result.id] = result;\\n };\\n\\n this.suiteDone = function(result) {\\n storeSuite(result);\\n };\\n\\n /**\\n * Get the results for a set of suites.\\n *\\n * Retrievable in slices for easier serialization.\\n * @name jsApiReporter#suiteResults\\n * @function\\n * @param {Number} index - The position in the suites list to start from.\\n * @param {Number} length - Maximum number of suite results to return.\\n * @return {SuiteResult[]}\\n */\\n this.suiteResults = function(index, length) {\\n return suites.slice(index, index + length);\\n };\\n\\n function storeSuite(result) {\\n suites.push(result);\\n suites_hash[result.id] = result;\\n }\\n\\n /**\\n * Get all of the suites in a single object, with their `id` as the key.\\n * @name jsApiReporter#suites\\n * @function\\n * @return {Object} - Map of suite id to {@link SuiteResult}\\n */\\n this.suites = function() {\\n return suites_hash;\\n };\\n\\n var specs = [];\\n\\n this.specDone = function(result) {\\n specs.push(result);\\n };\\n\\n /**\\n * Get the results for a set of specs.\\n *\\n * Retrievable in slices for easier serialization.\\n * @name jsApiReporter#specResults\\n * @function\\n * @param {Number} index - The position in the specs list to start from.\\n * @param {Number} length - Maximum number of specs results to return.\\n * @return {SpecResult[]}\\n */\\n this.specResults = function(index, length) {\\n return specs.slice(index, index + length);\\n };\\n\\n /**\\n * Get all spec results.\\n * @name jsApiReporter#specs\\n * @function\\n * @return {SpecResult[]}\\n */\\n this.specs = function() {\\n return specs;\\n };\\n\\n /**\\n * Get the number of milliseconds it took for the full Jasmine suite to run.\\n * @name jsApiReporter#executionTime\\n * @function\\n * @return {Number}\\n */\\n this.executionTime = function() {\\n return executionTime;\\n };\\n\\n }\\n\\n return JsApiReporter;\\n};\\n\\ngetJasmineRequireObj().Any = function(j$) {\\n\\n function Any(expectedObject) {\\n if (typeof expectedObject === 'undefined') {\\n throw new TypeError(\\n 'jasmine.any() expects to be passed a constructor function. ' +\\n 'Please pass one or use jasmine.anything() to match any object.'\\n );\\n }\\n this.expectedObject = expectedObject;\\n }\\n\\n Any.prototype.asymmetricMatch = function(other) {\\n if (this.expectedObject == String) {\\n return typeof other == 'string' || other instanceof String;\\n }\\n\\n if (this.expectedObject == Number) {\\n return typeof other == 'number' || other instanceof Number;\\n }\\n\\n if (this.expectedObject == Function) {\\n return typeof other == 'function' || other instanceof Function;\\n }\\n\\n if (this.expectedObject == Object) {\\n return other !== null && typeof other == 'object';\\n }\\n\\n if (this.expectedObject == Boolean) {\\n return typeof other == 'boolean';\\n }\\n\\n /* jshint -W122 */\\n /* global Symbol */\\n if (typeof Symbol != 'undefined' && this.expectedObject == Symbol) {\\n return typeof other == 'symbol';\\n }\\n /* jshint +W122 */\\n\\n return other instanceof this.expectedObject;\\n };\\n\\n Any.prototype.jasmineToString = function() {\\n return '<jasmine.any(' + j$.fnNameFor(this.expectedObject) + ')>';\\n };\\n\\n return Any;\\n};\\n\\ngetJasmineRequireObj().Anything = function(j$) {\\n\\n function Anything() {}\\n\\n Anything.prototype.asymmetricMatch = function(other) {\\n return !j$.util.isUndefined(other) && other !== null;\\n };\\n\\n Anything.prototype.jasmineToString = function() {\\n return '<jasmine.anything>';\\n };\\n\\n return Anything;\\n};\\n\\ngetJasmineRequireObj().ArrayContaining = function(j$) {\\n function ArrayContaining(sample) {\\n this.sample = sample;\\n }\\n\\n ArrayContaining.prototype.asymmetricMatch = function(other, customTesters) {\\n if (!j$.isArray_(this.sample)) {\\n throw new Error('You must provide an array to arrayContaining, not ' + j$.pp(this.sample) + '.');\\n }\\n\\n for (var i = 0; i < this.sample.length; i++) {\\n var item = this.sample[i];\\n if (!j$.matchersUtil.contains(other, item, customTesters)) {\\n return false;\\n }\\n }\\n\\n return true;\\n };\\n\\n ArrayContaining.prototype.jasmineToString = function () {\\n return '<jasmine.arrayContaining(' + j$.pp(this.sample) +')>';\\n };\\n\\n return ArrayContaining;\\n};\\n\\ngetJasmineRequireObj().ArrayWithExactContents = function(j$) {\\n\\n function ArrayWithExactContents(sample) {\\n this.sample = sample;\\n }\\n\\n ArrayWithExactContents.prototype.asymmetricMatch = function(other, customTesters) {\\n if (!j$.isArray_(this.sample)) {\\n throw new Error('You must provide an array to arrayWithExactContents, not ' + j$.pp(this.sample) + '.');\\n }\\n\\n if (this.sample.length !== other.length) {\\n return false;\\n }\\n\\n for (var i = 0; i < this.sample.length; i++) {\\n var item = this.sample[i];\\n if (!j$.matchersUtil.contains(other, item, customTesters)) {\\n return false;\\n }\\n }\\n\\n return true;\\n };\\n\\n ArrayWithExactContents.prototype.jasmineToString = function() {\\n return '<jasmine.arrayWithExactContents ' + j$.pp(this.sample) + '>';\\n };\\n\\n return ArrayWithExactContents;\\n};\\n\\ngetJasmineRequireObj().Empty = function (j$) {\\n\\n function Empty() {}\\n\\n Empty.prototype.asymmetricMatch = function (other) {\\n if (j$.isString_(other) || j$.isArray_(other) || j$.isTypedArray_(other)) {\\n return other.length === 0;\\n }\\n\\n if (j$.isMap(other) || j$.isSet(other)) {\\n return other.size === 0;\\n }\\n\\n if (j$.isObject_(other)) {\\n return Object.keys(other).length === 0;\\n }\\n return false;\\n };\\n\\n Empty.prototype.jasmineToString = function () {\\n return '<jasmine.empty>';\\n };\\n\\n return Empty;\\n};\\n\\ngetJasmineRequireObj().Falsy = function(j$) {\\n\\n function Falsy() {}\\n\\n Falsy.prototype.asymmetricMatch = function(other) {\\n return !other;\\n };\\n\\n Falsy.prototype.jasmineToString = function() {\\n return '<jasmine.falsy>';\\n };\\n\\n return Falsy;\\n};\\n\\ngetJasmineRequireObj().NotEmpty = function (j$) {\\n\\n function NotEmpty() {}\\n\\n NotEmpty.prototype.asymmetricMatch = function (other) {\\n if (j$.isString_(other) || j$.isArray_(other) || j$.isTypedArray_(other)) {\\n return other.length !== 0;\\n }\\n\\n if (j$.isMap(other) || j$.isSet(other)) {\\n return other.size !== 0;\\n }\\n\\n if (j$.isObject_(other)) {\\n return Object.keys(other).length !== 0;\\n }\\n\\n return false;\\n };\\n\\n NotEmpty.prototype.jasmineToString = function () {\\n return '<jasmine.notEmpty>';\\n };\\n\\n return NotEmpty;\\n};\\n\\ngetJasmineRequireObj().ObjectContaining = function(j$) {\\n\\n function ObjectContaining(sample) {\\n this.sample = sample;\\n }\\n\\n function getPrototype(obj) {\\n if (Object.getPrototypeOf) {\\n return Object.getPrototypeOf(obj);\\n }\\n\\n if (obj.constructor.prototype == obj) {\\n return null;\\n }\\n\\n return obj.constructor.prototype;\\n }\\n\\n function hasProperty(obj, property) {\\n if (!obj) {\\n return false;\\n }\\n\\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\\n return true;\\n }\\n\\n return hasProperty(getPrototype(obj), property);\\n }\\n\\n ObjectContaining.prototype.asymmetricMatch = function(other, customTesters) {\\n if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \\\\''+this.sample+'\\\\'.'); }\\n\\n for (var property in this.sample) {\\n if (!hasProperty(other, property) ||\\n !j$.matchersUtil.equals(this.sample[property], other[property], customTesters)) {\\n return false;\\n }\\n }\\n\\n return true;\\n };\\n\\n ObjectContaining.prototype.jasmineToString = function() {\\n return '<jasmine.objectContaining(' + j$.pp(this.sample) + ')>';\\n };\\n\\n return ObjectContaining;\\n};\\n\\ngetJasmineRequireObj().StringMatching = function(j$) {\\n\\n function StringMatching(expected) {\\n if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) {\\n throw new Error('Expected is not a String or a RegExp');\\n }\\n\\n this.regexp = new RegExp(expected);\\n }\\n\\n StringMatching.prototype.asymmetricMatch = function(other) {\\n return this.regexp.test(other);\\n };\\n\\n StringMatching.prototype.jasmineToString = function() {\\n return '<jasmine.stringMatching(' + this.regexp + ')>';\\n };\\n\\n return StringMatching;\\n};\\n\\ngetJasmineRequireObj().Truthy = function(j$) {\\n\\n function Truthy() {}\\n\\n Truthy.prototype.asymmetricMatch = function(other) {\\n return !!other;\\n };\\n\\n Truthy.prototype.jasmineToString = function() {\\n return '<jasmine.truthy>';\\n };\\n\\n return Truthy;\\n};\\n\\ngetJasmineRequireObj().CallTracker = function(j$) {\\n\\n /**\\n * @namespace Spy#calls\\n */\\n function CallTracker() {\\n var calls = [];\\n var opts = {};\\n\\n this.track = function(context) {\\n if(opts.cloneArgs) {\\n context.args = j$.util.cloneArgs(context.args);\\n }\\n calls.push(context);\\n };\\n\\n /**\\n * Check whether this spy has been invoked.\\n * @name Spy#calls#any\\n * @function\\n * @return {Boolean}\\n */\\n this.any = function() {\\n return !!calls.length;\\n };\\n\\n /**\\n * Get the number of invocations of this spy.\\n * @name Spy#calls#count\\n * @function\\n * @return {Integer}\\n */\\n this.count = function() {\\n return calls.length;\\n };\\n\\n /**\\n * Get the arguments that were passed to a specific invocation of this spy.\\n * @name Spy#calls#argsFor\\n * @function\\n * @param {Integer} index The 0-based invocation index.\\n * @return {Array}\\n */\\n this.argsFor = function(index) {\\n var call = calls[index];\\n return call ? call.args : [];\\n };\\n\\n /**\\n * Get the raw calls array for this spy.\\n * @name Spy#calls#all\\n * @function\\n * @return {Spy.callData[]}\\n */\\n this.all = function() {\\n return calls;\\n };\\n\\n /**\\n * Get all of the arguments for each invocation of this spy in the order they were received.\\n * @name Spy#calls#allArgs\\n * @function\\n * @return {Array}\\n */\\n this.allArgs = function() {\\n var callArgs = [];\\n for(var i = 0; i < calls.length; i++){\\n callArgs.push(calls[i].args);\\n }\\n\\n return callArgs;\\n };\\n\\n /**\\n * Get the first invocation of this spy.\\n * @name Spy#calls#first\\n * @function\\n * @return {ObjecSpy.callData}\\n */\\n this.first = function() {\\n return calls[0];\\n };\\n\\n /**\\n * Get the most recent invocation of this spy.\\n * @name Spy#calls#mostRecent\\n * @function\\n * @return {ObjecSpy.callData}\\n */\\n this.mostRecent = function() {\\n return calls[calls.length - 1];\\n };\\n\\n /**\\n * Reset this spy as if it has never been called.\\n * @name Spy#calls#reset\\n * @function\\n */\\n this.reset = function() {\\n calls = [];\\n };\\n\\n /**\\n * Set this spy to do a shallow clone of arguments passed to each invocation.\\n * @name Spy#calls#saveArgumentsByValue\\n * @function\\n */\\n this.saveArgumentsByValue = function() {\\n opts.cloneArgs = true;\\n };\\n\\n }\\n\\n return CallTracker;\\n};\\n\\ngetJasmineRequireObj().clearStack = function(j$) {\\n var maxInlineCallCount = 10;\\n\\n function messageChannelImpl(global, setTimeout) {\\n var channel = new global.MessageChannel(),\\n head = {},\\n tail = head;\\n\\n var taskRunning = false;\\n channel.port1.onmessage = function() {\\n head = head.next;\\n var task = head.task;\\n delete head.task;\\n\\n if (taskRunning) {\\n global.setTimeout(task, 0);\\n } else {\\n try {\\n taskRunning = true;\\n task();\\n } finally {\\n taskRunning = false;\\n }\\n }\\n };\\n\\n var currentCallCount = 0;\\n return function clearStack(fn) {\\n currentCallCount++;\\n\\n if (currentCallCount < maxInlineCallCount) {\\n tail = tail.next = { task: fn };\\n channel.port2.postMessage(0);\\n } else {\\n currentCallCount = 0;\\n setTimeout(fn);\\n }\\n };\\n }\\n\\n function getClearStack(global) {\\n var currentCallCount = 0;\\n var realSetTimeout = global.setTimeout;\\n var setTimeoutImpl = function clearStack(fn) {\\n Function.prototype.apply.apply(realSetTimeout, [global, [fn, 0]]);\\n };\\n\\n if (j$.isFunction_(global.setImmediate)) {\\n var realSetImmediate = global.setImmediate;\\n return function(fn) {\\n currentCallCount++;\\n\\n if (currentCallCount < maxInlineCallCount) {\\n realSetImmediate(fn);\\n } else {\\n currentCallCount = 0;\\n\\n setTimeoutImpl(fn);\\n }\\n };\\n } else if (!j$.util.isUndefined(global.MessageChannel)) {\\n return messageChannelImpl(global, setTimeoutImpl);\\n } else {\\n return setTimeoutImpl;\\n }\\n }\\n\\n return getClearStack;\\n};\\n\\ngetJasmineRequireObj().Clock = function() {\\n\\n /* global process */\\n var NODE_JS = typeof process !== 'undefined' && process.versions && typeof process.versions.node === 'string';\\n\\n /**\\n * _Note:_ Do not construct this directly, Jasmine will make one during booting. You can get the current clock with {@link jasmine.clock}.\\n * @class Clock\\n * @classdesc Jasmine's mock clock is used when testing time dependent code.\\n */\\n function Clock(global, delayedFunctionSchedulerFactory, mockDate) {\\n var self = this,\\n realTimingFunctions = {\\n setTimeout: global.setTimeout,\\n clearTimeout: global.clearTimeout,\\n setInterval: global.setInterval,\\n clearInterval: global.clearInterval\\n },\\n fakeTimingFunctions = {\\n setTimeout: setTimeout,\\n clearTimeout: clearTimeout,\\n setInterval: setInterval,\\n clearInterval: clearInterval\\n },\\n installed = false,\\n delayedFunctionScheduler,\\n timer;\\n\\n self.FakeTimeout = FakeTimeout;\\n\\n /**\\n * Install the mock clock over the built-in methods.\\n * @name Clock#install\\n * @function\\n * @return {Clock}\\n */\\n self.install = function() {\\n if(!originalTimingFunctionsIntact()) {\\n throw new Error('Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?');\\n }\\n replace(global, fakeTimingFunctions);\\n timer = fakeTimingFunctions;\\n delayedFunctionScheduler = delayedFunctionSchedulerFactory();\\n installed = true;\\n\\n return self;\\n };\\n\\n /**\\n * Uninstall the mock clock, returning the built-in methods to their places.\\n * @name Clock#uninstall\\n * @function\\n */\\n self.uninstall = function() {\\n delayedFunctionScheduler = null;\\n mockDate.uninstall();\\n replace(global, realTimingFunctions);\\n\\n timer = realTimingFunctions;\\n installed = false;\\n };\\n\\n /**\\n * Execute a function with a mocked Clock\\n *\\n * The clock will be {@link Clock#install|install}ed before the function is called and {@link Clock#uninstall|uninstall}ed in a `finally` after the function completes.\\n * @name Clock#withMock\\n * @function\\n * @param {Function} closure The function to be called.\\n */\\n self.withMock = function(closure) {\\n this.install();\\n try {\\n closure();\\n } finally {\\n this.uninstall();\\n }\\n };\\n\\n /**\\n * Instruct the installed Clock to also mock the date returned by `new Date()`\\n * @name Clock#mockDate\\n * @function\\n * @param {Date} [initialDate=now] The `Date` to provide.\\n */\\n self.mockDate = function(initialDate) {\\n mockDate.install(initialDate);\\n };\\n\\n self.setTimeout = function(fn, delay, params) {\\n return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]);\\n };\\n\\n self.setInterval = function(fn, delay, params) {\\n return Function.prototype.apply.apply(timer.setInterval, [global, arguments]);\\n };\\n\\n self.clearTimeout = function(id) {\\n return Function.prototype.call.apply(timer.clearTimeout, [global, id]);\\n };\\n\\n self.clearInterval = function(id) {\\n return Function.prototype.call.apply(timer.clearInterval, [global, id]);\\n };\\n\\n /**\\n * Tick the Clock forward, running any enqueued timeouts along the way\\n * @name Clock#tick\\n * @function\\n * @param {int} millis The number of milliseconds to tick.\\n */\\n self.tick = function(millis) {\\n if (installed) {\\n delayedFunctionScheduler.tick(millis, function(millis) { mockDate.tick(millis); });\\n } else {\\n throw new Error('Mock clock is not installed, use jasmine.clock().install()');\\n }\\n };\\n\\n return self;\\n\\n function originalTimingFunctionsIntact() {\\n return global.setTimeout === realTimingFunctions.setTimeout &&\\n global.clearTimeout === realTimingFunctions.clearTimeout &&\\n global.setInterval === realTimingFunctions.setInterval &&\\n global.clearInterval === realTimingFunctions.clearInterval;\\n }\\n\\n function replace(dest, source) {\\n for (var prop in source) {\\n dest[prop] = source[prop];\\n }\\n }\\n\\n function setTimeout(fn, delay) {\\n if (!NODE_JS) {\\n return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2));\\n }\\n\\n var timeout = new FakeTimeout();\\n\\n delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2), false, timeout);\\n\\n return timeout;\\n }\\n\\n function clearTimeout(id) {\\n return delayedFunctionScheduler.removeFunctionWithId(id);\\n }\\n\\n function setInterval(fn, interval) {\\n if (!NODE_JS) {\\n return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true);\\n }\\n\\n var timeout = new FakeTimeout();\\n\\n delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true, timeout);\\n\\n return timeout;\\n }\\n\\n function clearInterval(id) {\\n return delayedFunctionScheduler.removeFunctionWithId(id);\\n }\\n\\n function argSlice(argsObj, n) {\\n return Array.prototype.slice.call(argsObj, n);\\n }\\n }\\n\\n /**\\n * Mocks Node.js Timeout class\\n */\\n function FakeTimeout() {}\\n\\n FakeTimeout.prototype.ref = function () {\\n return this;\\n };\\n\\n FakeTimeout.prototype.unref = function () {\\n return this;\\n };\\n\\n return Clock;\\n};\\n\\ngetJasmineRequireObj().DelayedFunctionScheduler = function(j$) {\\n function DelayedFunctionScheduler() {\\n var self = this;\\n var scheduledLookup = [];\\n var scheduledFunctions = {};\\n var currentTime = 0;\\n var delayedFnCount = 0;\\n var deletedKeys = [];\\n\\n self.tick = function(millis, tickDate) {\\n millis = millis || 0;\\n var endTime = currentTime + millis;\\n\\n runScheduledFunctions(endTime, tickDate);\\n currentTime = endTime;\\n };\\n\\n self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) {\\n var f;\\n if (typeof(funcToCall) === 'string') {\\n /* jshint evil: true */\\n f = function() { return eval(funcToCall); };\\n /* jshint evil: false */\\n } else {\\n f = funcToCall;\\n }\\n\\n millis = millis || 0;\\n timeoutKey = timeoutKey || ++delayedFnCount;\\n runAtMillis = runAtMillis || (currentTime + millis);\\n\\n var funcToSchedule = {\\n runAtMillis: runAtMillis,\\n funcToCall: f,\\n recurring: recurring,\\n params: params,\\n timeoutKey: timeoutKey,\\n millis: millis\\n };\\n\\n if (runAtMillis in scheduledFunctions) {\\n scheduledFunctions[runAtMillis].push(funcToSchedule);\\n } else {\\n scheduledFunctions[runAtMillis] = [funcToSchedule];\\n scheduledLookup.push(runAtMillis);\\n scheduledLookup.sort(function (a, b) {\\n return a - b;\\n });\\n }\\n\\n return timeoutKey;\\n };\\n\\n self.removeFunctionWithId = function(timeoutKey) {\\n deletedKeys.push(timeoutKey);\\n\\n for (var runAtMillis in scheduledFunctions) {\\n var funcs = scheduledFunctions[runAtMillis];\\n var i = indexOfFirstToPass(funcs, function (func) {\\n return func.timeoutKey === timeoutKey;\\n });\\n\\n if (i > -1) {\\n if (funcs.length === 1) {\\n delete scheduledFunctions[runAtMillis];\\n deleteFromLookup(runAtMillis);\\n } else {\\n funcs.splice(i, 1);\\n }\\n\\n // intervals get rescheduled when executed, so there's never more\\n // than a single scheduled function with a given timeoutKey\\n break;\\n }\\n }\\n };\\n\\n return self;\\n\\n function indexOfFirstToPass(array, testFn) {\\n var index = -1;\\n\\n for (var i = 0; i < array.length; ++i) {\\n if (testFn(array[i])) {\\n index = i;\\n break;\\n }\\n }\\n\\n return index;\\n }\\n\\n function deleteFromLookup(key) {\\n var value = Number(key);\\n var i = indexOfFirstToPass(scheduledLookup, function (millis) {\\n return millis === value;\\n });\\n\\n if (i > -1) {\\n scheduledLookup.splice(i, 1);\\n }\\n }\\n\\n function reschedule(scheduledFn) {\\n self.scheduleFunction(scheduledFn.funcToCall,\\n scheduledFn.millis,\\n scheduledFn.params,\\n true,\\n scheduledFn.timeoutKey,\\n scheduledFn.runAtMillis + scheduledFn.millis);\\n }\\n\\n function forEachFunction(funcsToRun, callback) {\\n for (var i = 0; i < funcsToRun.length; ++i) {\\n callback(funcsToRun[i]);\\n }\\n }\\n\\n function runScheduledFunctions(endTime, tickDate) {\\n tickDate = tickDate || function() {};\\n if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) {\\n tickDate(endTime - currentTime);\\n return;\\n }\\n\\n do {\\n deletedKeys = [];\\n var newCurrentTime = scheduledLookup.shift();\\n tickDate(newCurrentTime - currentTime);\\n\\n currentTime = newCurrentTime;\\n\\n var funcsToRun = scheduledFunctions[currentTime];\\n\\n delete scheduledFunctions[currentTime];\\n\\n forEachFunction(funcsToRun, function(funcToRun) {\\n if (funcToRun.recurring) {\\n reschedule(funcToRun);\\n }\\n });\\n\\n forEachFunction(funcsToRun, function(funcToRun) {\\n if (j$.util.arrayContains(deletedKeys, funcToRun.timeoutKey)) {\\n // skip a timeoutKey deleted whilst we were running\\n return;\\n }\\n funcToRun.funcToCall.apply(null, funcToRun.params || []);\\n });\\n deletedKeys = [];\\n } while (scheduledLookup.length > 0 &&\\n // checking first if we're out of time prevents setTimeout(0)\\n // scheduled in a funcToRun from forcing an extra iteration\\n currentTime !== endTime &&\\n scheduledLookup[0] <= endTime);\\n\\n // ran out of functions to call, but still time left on the clock\\n if (currentTime !== endTime) {\\n tickDate(endTime - currentTime);\\n }\\n }\\n }\\n\\n return DelayedFunctionScheduler;\\n};\\n\\ngetJasmineRequireObj().errors = function() {\\n function ExpectationFailed() {}\\n\\n ExpectationFailed.prototype = new Error();\\n ExpectationFailed.prototype.constructor = ExpectationFailed;\\n\\n return {\\n ExpectationFailed: ExpectationFailed\\n };\\n};\\ngetJasmineRequireObj().ExceptionFormatter = function(j$) {\\n\\n var ignoredProperties = ['name', 'message', 'stack', 'fileName', 'sourceURL', 'line', 'lineNumber', 'column', 'description', 'jasmineMessage'];\\n\\n function ExceptionFormatter(options) {\\n var jasmineFile = (options && options.jasmineFile) || j$.util.jasmineFile();\\n this.message = function(error) {\\n var message = '';\\n\\n if (error.jasmineMessage) {\\n message += error.jasmineMessage;\\n } else if (error.name && error.message) {\\n message += error.name + ': ' + error.message;\\n } else if (error.message) {\\n message += error.message;\\n } else {\\n message += error.toString() + ' thrown';\\n }\\n\\n if (error.fileName || error.sourceURL) {\\n message += ' in ' + (error.fileName || error.sourceURL);\\n }\\n\\n if (error.line || error.lineNumber) {\\n message += ' (line ' + (error.line || error.lineNumber) + ')';\\n }\\n\\n return message;\\n };\\n\\n this.stack = function(error) {\\n if (!error || !error.stack) {\\n return null;\\n }\\n\\n var stackTrace = new j$.StackTrace(error);\\n var lines = filterJasmine(stackTrace);\\n var result = '';\\n\\n if (stackTrace.message) {\\n lines.unshift(stackTrace.message);\\n }\\n\\n result += formatProperties(error);\\n result += lines.join('\\\\n');\\n\\n return result;\\n };\\n\\n function filterJasmine(stackTrace) {\\n var result = [],\\n jasmineMarker = stackTrace.style === 'webkit' ? '<Jasmine>' : ' at <Jasmine>';\\n\\n stackTrace.frames.forEach(function(frame) {\\n if (frame.file && frame.file !== jasmineFile) {\\n result.push(frame.raw);\\n } else if (result[result.length - 1] !== jasmineMarker) {\\n result.push(jasmineMarker);\\n }\\n });\\n\\n return result;\\n }\\n\\n function formatProperties(error) {\\n if (!(error instanceof Object)) {\\n return;\\n }\\n\\n var result = {};\\n var empty = true;\\n\\n for (var prop in error) {\\n if (j$.util.arrayContains(ignoredProperties, prop)) {\\n continue;\\n }\\n result[prop] = error[prop];\\n empty = false;\\n }\\n\\n if (!empty) {\\n return 'error properties: ' + j$.pp(result) + '\\\\n';\\n }\\n\\n return '';\\n }\\n }\\n\\n return ExceptionFormatter;\\n};\\n\\ngetJasmineRequireObj().Expectation = function(j$) {\\n var promiseForMessage = {\\n jasmineToString: function() { return 'a promise'; }\\n };\\n\\n /**\\n * Matchers that come with Jasmine out of the box.\\n * @namespace matchers\\n */\\n function Expectation(options) {\\n this.expector = new j$.Expector(options);\\n\\n var customMatchers = options.customMatchers || {};\\n for (var matcherName in customMatchers) {\\n this[matcherName] = wrapSyncCompare(matcherName, customMatchers[matcherName]);\\n }\\n }\\n\\n /**\\n * Add some context for an {@link expect}\\n * @function\\n * @name matchers#withContext\\n * @param {String} message - Additional context to show when the matcher fails\\n * @return {matchers}\\n */\\n Expectation.prototype.withContext = function withContext(message) {\\n return addFilter(this, new ContextAddingFilter(message));\\n };\\n\\n /**\\n * Invert the matcher following this {@link expect}\\n * @member\\n * @name matchers#not\\n * @type {matchers}\\n * @example\\n * expect(something).not.toBe(true);\\n */\\n Object.defineProperty(Expectation.prototype, 'not', {\\n get: function() {\\n return addFilter(this, syncNegatingFilter);\\n }\\n });\\n\\n /**\\n * Asynchronous matchers.\\n * @namespace async-matchers\\n */\\n function AsyncExpectation(options) {\\n var global = options.global || j$.getGlobal();\\n this.expector = new j$.Expector(options);\\n\\n if (!global.Promise) {\\n throw new Error('expectAsync is unavailable because the environment does not support promises.');\\n }\\n\\n if (!j$.isPromiseLike(this.expector.actual)) {\\n throw new Error('Expected expectAsync to be called with a promise.');\\n }\\n }\\n\\n /**\\n * Add some context for an {@link expectAsync}\\n * @function\\n * @name async-matchers#withContext\\n * @param {String} message - Additional context to show when the async matcher fails\\n * @return {async-matchers}\\n */\\n AsyncExpectation.prototype.withContext = function withContext(message) {\\n return addFilter(this, new ContextAddingFilter(message));\\n };\\n\\n /**\\n * Invert the matcher following this {@link expectAsync}\\n * @member\\n * @name async-matchers#not\\n * @type {async-matchers}\\n * @example\\n * await expectAsync(myPromise).not.toBeResolved();\\n * @example\\n * return expectAsync(myPromise).not.toBeResolved();\\n */\\n Object.defineProperty(AsyncExpectation.prototype, 'not', {\\n get: function() {\\n return addFilter(this, asyncNegatingFilter);\\n }\\n });\\n\\n function wrapSyncCompare(name, matcherFactory) {\\n return function() {\\n var result = this.expector.compare(name, matcherFactory, arguments);\\n this.expector.processResult(result);\\n };\\n }\\n\\n function wrapAsyncCompare(name, matcherFactory) {\\n return function() {\\n var self = this;\\n\\n // Capture the call stack here, before we go async, so that it will contain\\n // frames that are relevant to the user instead of just parts of Jasmine.\\n var errorForStack = j$.util.errorWithStack();\\n\\n return this.expector.compare(name, matcherFactory, arguments).then(function(result) {\\n self.expector.processResult(result, errorForStack, promiseForMessage);\\n });\\n };\\n }\\n\\n function addCoreMatchers(prototype, matchers, wrapper) {\\n for (var matcherName in matchers) {\\n var matcher = matchers[matcherName];\\n prototype[matcherName] = wrapper(matcherName, matcher);\\n }\\n }\\n\\n function addFilter(source, filter) {\\n var result = Object.create(source);\\n result.expector = source.expector.addFilter(filter);\\n return result;\\n }\\n\\n function negatedFailureMessage(result, matcherName, args, util) {\\n if (result.message) {\\n if (j$.isFunction_(result.message)) {\\n return result.message();\\n } else {\\n return result.message;\\n }\\n }\\n\\n args = args.slice();\\n args.unshift(true);\\n args.unshift(matcherName);\\n return util.buildFailureMessage.apply(null, args);\\n }\\n\\n function negate(result) {\\n result.pass = !result.pass;\\n return result;\\n }\\n\\n var syncNegatingFilter = {\\n selectComparisonFunc: function(matcher) {\\n function defaultNegativeCompare() {\\n return negate(matcher.compare.apply(null, arguments));\\n }\\n\\n return matcher.negativeCompare || defaultNegativeCompare;\\n },\\n buildFailureMessage: negatedFailureMessage\\n };\\n\\n var asyncNegatingFilter = {\\n selectComparisonFunc: function(matcher) {\\n function defaultNegativeCompare() {\\n return matcher.compare.apply(this, arguments).then(negate);\\n }\\n\\n return defaultNegativeCompare;\\n },\\n buildFailureMessage: negatedFailureMessage\\n };\\n\\n function ContextAddingFilter(message) {\\n this.message = message;\\n }\\n\\n ContextAddingFilter.prototype.modifyFailureMessage = function(msg) {\\n return this.message + ': ' + msg;\\n };\\n\\n return {\\n factory: function(options) {\\n return new Expectation(options || {});\\n },\\n addCoreMatchers: function(matchers) {\\n addCoreMatchers(Expectation.prototype, matchers, wrapSyncCompare);\\n },\\n asyncFactory: function(options) {\\n return new AsyncExpectation(options || {});\\n },\\n addAsyncCoreMatchers: function(matchers) {\\n addCoreMatchers(AsyncExpectation.prototype, matchers, wrapAsyncCompare);\\n }\\n };\\n};\\n\\ngetJasmineRequireObj().ExpectationFilterChain = function() {\\n function ExpectationFilterChain(maybeFilter, prev) {\\n this.filter_ = maybeFilter;\\n this.prev_ = prev;\\n }\\n\\n ExpectationFilterChain.prototype.addFilter = function(filter) {\\n return new ExpectationFilterChain(filter, this);\\n };\\n\\n ExpectationFilterChain.prototype.selectComparisonFunc = function(matcher) {\\n return this.callFirst_('selectComparisonFunc', arguments).result;\\n };\\n\\n ExpectationFilterChain.prototype.buildFailureMessage = function(result, matcherName, args, util) {\\n return this.callFirst_('buildFailureMessage', arguments).result;\\n };\\n\\n ExpectationFilterChain.prototype.modifyFailureMessage = function(msg) {\\n var result = this.callFirst_('modifyFailureMessage', arguments).result;\\n return result || msg;\\n };\\n\\n ExpectationFilterChain.prototype.callFirst_ = function(fname, args) {\\n var prevResult;\\n\\n if (this.prev_) {\\n prevResult = this.prev_.callFirst_(fname, args);\\n\\n if (prevResult.found) {\\n return prevResult;\\n }\\n }\\n\\n if (this.filter_ && this.filter_[fname]) {\\n return {\\n found: true,\\n result: this.filter_[fname].apply(this.filter_, args)\\n };\\n }\\n\\n return {found: false};\\n };\\n\\n return ExpectationFilterChain;\\n};\\n\\n//TODO: expectation result may make more sense as a presentation of an expectation.\\ngetJasmineRequireObj().buildExpectationResult = function() {\\n function buildExpectationResult(options) {\\n var messageFormatter = options.messageFormatter || function() {},\\n stackFormatter = options.stackFormatter || function() {};\\n\\n /**\\n * @typedef Expectation\\n * @property {String} matcherName - The name of the matcher that was executed for this expectation.\\n * @property {String} message - The failure message for the expectation.\\n * @property {String} stack - The stack trace for the failure if available.\\n * @property {Boolean} passed - Whether the expectation passed or failed.\\n * @property {Object} expected - If the expectation failed, what was the expected value.\\n * @property {Object} actual - If the expectation failed, what actual value was produced.\\n */\\n var result = {\\n matcherName: options.matcherName,\\n message: message(),\\n stack: stack(),\\n passed: options.passed\\n };\\n\\n if(!result.passed) {\\n result.expected = options.expected;\\n result.actual = options.actual;\\n }\\n\\n return result;\\n\\n function message() {\\n if (options.passed) {\\n return 'Passed.';\\n } else if (options.message) {\\n return options.message;\\n } else if (options.error) {\\n return messageFormatter(options.error);\\n }\\n return '';\\n }\\n\\n function stack() {\\n if (options.passed) {\\n return '';\\n }\\n\\n var error = options.error;\\n if (!error) {\\n if (options.errorForStack) {\\n error = options.errorForStack;\\n } else if (options.stack) {\\n error = options;\\n } else {\\n try {\\n throw new Error(message());\\n } catch (e) {\\n error = e;\\n }\\n }\\n }\\n return stackFormatter(error);\\n }\\n }\\n\\n return buildExpectationResult;\\n};\\n\\ngetJasmineRequireObj().Expector = function(j$) {\\n function Expector(options) {\\n this.util = options.util || { buildFailureMessage: function() {} };\\n this.customEqualityTesters = options.customEqualityTesters || [];\\n this.actual = options.actual;\\n this.addExpectationResult = options.addExpectationResult || function(){};\\n this.filters = new j$.ExpectationFilterChain();\\n }\\n\\n Expector.prototype.instantiateMatcher = function(matcherName, matcherFactory, args) {\\n this.matcherName = matcherName;\\n this.args = Array.prototype.slice.call(args, 0);\\n this.expected = this.args.slice(0);\\n\\n this.args.unshift(this.actual);\\n\\n var matcher = matcherFactory(this.util, this.customEqualityTesters);\\n var comparisonFunc = this.filters.selectComparisonFunc(matcher);\\n return comparisonFunc || matcher.compare;\\n };\\n\\n Expector.prototype.buildMessage = function(result) {\\n var self = this;\\n\\n if (result.pass) {\\n return '';\\n }\\n\\n var msg = this.filters.buildFailureMessage(result, this.matcherName, this.args, this.util, defaultMessage);\\n return this.filters.modifyFailureMessage(msg || defaultMessage());\\n\\n function defaultMessage() {\\n if (!result.message) {\\n var args = self.args.slice();\\n args.unshift(false);\\n args.unshift(self.matcherName);\\n return self.util.buildFailureMessage.apply(null, args);\\n } else if (j$.isFunction_(result.message)) {\\n return result.message();\\n } else {\\n return result.message;\\n }\\n }\\n };\\n\\n Expector.prototype.compare = function(matcherName, matcherFactory, args) {\\n var matcherCompare = this.instantiateMatcher(matcherName, matcherFactory, args);\\n return matcherCompare.apply(null, this.args);\\n };\\n\\n Expector.prototype.addFilter = function(filter) {\\n var result = Object.create(this);\\n result.filters = this.filters.addFilter(filter);\\n return result;\\n };\\n\\n Expector.prototype.processResult = function(result, errorForStack, actualOverride) {\\n this.args[0] = actualOverride || this.args[0];\\n var message = this.buildMessage(result);\\n\\n if (this.expected.length === 1) {\\n this.expected = this.expected[0];\\n }\\n\\n this.addExpectationResult(\\n result.pass,\\n {\\n matcherName: this.matcherName,\\n passed: result.pass,\\n message: message,\\n error: errorForStack ? undefined : result.error,\\n errorForStack: errorForStack || undefined,\\n actual: this.actual,\\n expected: this.expected // TODO: this may need to be arrayified/sliced\\n }\\n );\\n };\\n\\n return Expector;\\n};\\n\\ngetJasmineRequireObj().formatErrorMsg = function() {\\n function generateErrorMsg(domain, usage) {\\n var usageDefinition = usage ? '\\\\nUsage: ' + usage : '';\\n\\n return function errorMsg(msg) {\\n return domain + ' : ' + msg + usageDefinition;\\n };\\n }\\n\\n return generateErrorMsg;\\n};\\n\\ngetJasmineRequireObj().GlobalErrors = function(j$) {\\n function GlobalErrors(global) {\\n var handlers = [];\\n global = global || j$.getGlobal();\\n\\n var onerror = function onerror() {\\n var handler = handlers[handlers.length - 1];\\n\\n if (handler) {\\n handler.apply(null, Array.prototype.slice.call(arguments, 0));\\n } else {\\n throw arguments[0];\\n }\\n };\\n\\n this.originalHandlers = {};\\n this.jasmineHandlers = {};\\n this.installOne_ = function installOne_(errorType, jasmineMessage) {\\n function taggedOnError(error) {\\n error.jasmineMessage = jasmineMessage + ': ' + error;\\n\\n var handler = handlers[handlers.length - 1];\\n\\n if (handler) {\\n handler(error);\\n } else {\\n throw error;\\n }\\n }\\n\\n this.originalHandlers[errorType] = global.process.listeners(errorType);\\n this.jasmineHandlers[errorType] = taggedOnError;\\n\\n global.process.removeAllListeners(errorType);\\n global.process.on(errorType, taggedOnError);\\n\\n this.uninstall = function uninstall() {\\n var errorTypes = Object.keys(this.originalHandlers);\\n for (var iType = 0; iType < errorTypes.length; iType++) {\\n var errorType = errorTypes[iType];\\n global.process.removeListener(errorType, this.jasmineHandlers[errorType]);\\n for (var i = 0; i < this.originalHandlers[errorType].length; i++) {\\n global.process.on(errorType, this.originalHandlers[errorType][i]);\\n }\\n delete this.originalHandlers[errorType];\\n delete this.jasmineHandlers[errorType];\\n }\\n };\\n };\\n\\n this.install = function install() {\\n if (global.process && global.process.listeners && j$.isFunction_(global.process.on)) {\\n this.installOne_('uncaughtException', 'Uncaught exception');\\n this.installOne_('unhandledRejection', 'Unhandled promise rejection');\\n } else {\\n var originalHandler = global.onerror;\\n global.onerror = onerror;\\n\\n this.uninstall = function uninstall() {\\n global.onerror = originalHandler;\\n };\\n }\\n };\\n\\n this.pushListener = function pushListener(listener) {\\n handlers.push(listener);\\n };\\n\\n this.popListener = function popListener() {\\n handlers.pop();\\n };\\n }\\n\\n return GlobalErrors;\\n};\\n\\ngetJasmineRequireObj().toBeRejected = function(j$) {\\n /**\\n * Expect a promise to be rejected.\\n * @function\\n * @async\\n * @name async-matchers#toBeRejected\\n * @example\\n * await expectAsync(aPromise).toBeRejected();\\n * @example\\n * return expectAsync(aPromise).toBeRejected();\\n */\\n return function toBeResolved(util) {\\n return {\\n compare: function(actual) {\\n return actual.then(\\n function() { return {pass: false}; },\\n function() { return {pass: true}; }\\n );\\n }\\n };\\n };\\n};\\n\\ngetJasmineRequireObj().toBeRejectedWith = function(j$) {\\n /**\\n * Expect a promise to be rejected with a value equal to the expected, using deep equality comparison.\\n * @function\\n * @async\\n * @name async-matchers#toBeRejectedWith\\n * @param {Object} expected - Value that the promise is expected to be rejected with\\n * @example\\n * await expectAsync(aPromise).toBeRejectedWith({prop: 'value'});\\n * @example\\n * return expectAsync(aPromise).toBeRejectedWith({prop: 'value'});\\n */\\n return function toBeRejectedWith(util, customEqualityTesters) {\\n return {\\n compare: function(actualPromise, expectedValue) {\\n function prefix(passed) {\\n return 'Expected a promise ' +\\n (passed ? 'not ' : '') +\\n 'to be rejected with ' + j$.pp(expectedValue);\\n }\\n\\n return actualPromise.then(\\n function() {\\n return {\\n pass: false,\\n message: prefix(false) + ' but it was resolved.'\\n };\\n },\\n function(actualValue) {\\n if (util.equals(actualValue, expectedValue, customEqualityTesters)) {\\n return {\\n pass: true,\\n message: prefix(true) + '.'\\n };\\n } else {\\n return {\\n pass: false,\\n message: prefix(false) + ' but it was rejected with ' + j$.pp(actualValue) + '.'\\n };\\n }\\n }\\n );\\n }\\n };\\n };\\n};\\n\\ngetJasmineRequireObj().toBeResolved = function(j$) {\\n /**\\n * Expect a promise to be resolved.\\n * @function\\n * @async\\n * @name async-matchers#toBeResolved\\n * @example\\n * await expectAsync(aPromise).toBeResolved();\\n * @example\\n * return expectAsync(aPromise).toBeResolved();\\n */\\n return function toBeResolved(util) {\\n return {\\n compare: function(actual) {\\n return actual.then(\\n function() { return {pass: true}; },\\n function() { return {pass: false}; }\\n );\\n }\\n };\\n };\\n};\\n\\ngetJasmineRequireObj().toBeResolvedTo = function(j$) {\\n /**\\n * Expect a promise to be resolved to a value equal to the expected, using deep equality comparison.\\n * @function\\n * @async\\n * @name async-matchers#toBeResolvedTo\\n * @param {Object} expected - Value that the promise is expected to resolve to\\n * @example\\n * await expectAsync(aPromise).toBeResolvedTo({prop: 'value'});\\n * @example\\n * return expectAsync(aPromise).toBeResolvedTo({prop: 'value'});\\n */\\n return function toBeResolvedTo(util, customEqualityTesters) {\\n return {\\n compare: function(actualPromise, expectedValue) {\\n function prefix(passed) {\\n return 'Expected a promise ' +\\n (passed ? 'not ' : '') +\\n 'to be resolved to ' + j$.pp(expectedValue);\\n }\\n\\n return actualPromise.then(\\n function(actualValue) {\\n if (util.equals(actualValue, expectedValue, customEqualityTesters)) {\\n return {\\n pass: true,\\n message: prefix(true) + '.'\\n };\\n } else {\\n return {\\n pass: false,\\n message: prefix(false) + ' but it was resolved to ' + j$.pp(actualValue) + '.'\\n };\\n }\\n },\\n function() {\\n return {\\n pass: false,\\n message: prefix(false) + ' but it was rejected.'\\n };\\n }\\n );\\n }\\n };\\n };\\n};\\n\\ngetJasmineRequireObj().DiffBuilder = function(j$) {\\n return function DiffBuilder() {\\n var path = new j$.ObjectPath(),\\n mismatches = [];\\n\\n return {\\n record: function (actual, expected, formatter) {\\n formatter = formatter || defaultFormatter;\\n mismatches.push(formatter(actual, expected, path));\\n },\\n\\n getMessage: function () {\\n return mismatches.join('\\\\n');\\n },\\n\\n withPath: function (pathComponent, block) {\\n var oldPath = path;\\n path = path.add(pathComponent);\\n block();\\n path = oldPath;\\n }\\n };\\n\\n function defaultFormatter (actual, expected, path) {\\n return 'Expected ' +\\n path + (path.depth() ? ' = ' : '') +\\n j$.pp(actual) +\\n ' to equal ' +\\n j$.pp(expected) +\\n '.';\\n }\\n };\\n};\\n\\ngetJasmineRequireObj().matchersUtil = function(j$) {\\n // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter?\\n\\n return {\\n equals: equals,\\n\\n contains: function(haystack, needle, customTesters) {\\n customTesters = customTesters || [];\\n\\n if ((Object.prototype.toString.apply(haystack) === '[object Set]')) {\\n return haystack.has(needle);\\n }\\n\\n if ((Object.prototype.toString.apply(haystack) === '[object Array]') ||\\n (!!haystack && !haystack.indexOf))\\n {\\n for (var i = 0; i < haystack.length; i++) {\\n if (equals(haystack[i], needle, customTesters)) {\\n return true;\\n }\\n }\\n return false;\\n }\\n\\n return !!haystack && haystack.indexOf(needle) >= 0;\\n },\\n\\n buildFailureMessage: function() {\\n var args = Array.prototype.slice.call(arguments, 0),\\n matcherName = args[0],\\n isNot = args[1],\\n actual = args[2],\\n expected = args.slice(3),\\n englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); });\\n\\n var message = 'Expected ' +\\n j$.pp(actual) +\\n (isNot ? ' not ' : ' ') +\\n englishyPredicate;\\n\\n if (expected.length > 0) {\\n for (var i = 0; i < expected.length; i++) {\\n if (i > 0) {\\n message += ',';\\n }\\n message += ' ' + j$.pp(expected[i]);\\n }\\n }\\n\\n return message + '.';\\n }\\n };\\n\\n function isAsymmetric(obj) {\\n return obj && j$.isA_('Function', obj.asymmetricMatch);\\n }\\n\\n function asymmetricMatch(a, b, customTesters, diffBuilder) {\\n var asymmetricA = isAsymmetric(a),\\n asymmetricB = isAsymmetric(b),\\n result;\\n\\n if (asymmetricA && asymmetricB) {\\n return undefined;\\n }\\n\\n if (asymmetricA) {\\n result = a.asymmetricMatch(b, customTesters);\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n }\\n\\n if (asymmetricB) {\\n result = b.asymmetricMatch(a, customTesters);\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n }\\n }\\n\\n function equals(a, b, customTesters, diffBuilder) {\\n customTesters = customTesters || [];\\n diffBuilder = diffBuilder || j$.NullDiffBuilder();\\n\\n return eq(a, b, [], [], customTesters, diffBuilder);\\n }\\n\\n // Equality function lovingly adapted from isEqual in\\n // [Underscore](http://underscorejs.org)\\n function eq(a, b, aStack, bStack, customTesters, diffBuilder) {\\n var result = true, i;\\n\\n var asymmetricResult = asymmetricMatch(a, b, customTesters, diffBuilder);\\n if (!j$.util.isUndefined(asymmetricResult)) {\\n return asymmetricResult;\\n }\\n\\n for (i = 0; i < customTesters.length; i++) {\\n var customTesterResult = customTesters[i](a, b);\\n if (!j$.util.isUndefined(customTesterResult)) {\\n if (!customTesterResult) {\\n diffBuilder.record(a, b);\\n }\\n return customTesterResult;\\n }\\n }\\n\\n if (a instanceof Error && b instanceof Error) {\\n result = a.message == b.message;\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n }\\n\\n // Identical objects are equal. `0 === -0`, but they aren't identical.\\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\\n if (a === b) {\\n result = a !== 0 || 1 / a == 1 / b;\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n }\\n // A strict comparison is necessary because `null == undefined`.\\n if (a === null || b === null) {\\n result = a === b;\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n }\\n var className = Object.prototype.toString.call(a);\\n if (className != Object.prototype.toString.call(b)) {\\n diffBuilder.record(a, b);\\n return false;\\n }\\n switch (className) {\\n // Strings, numbers, dates, and booleans are compared by value.\\n case '[object String]':\\n // Primitives and their corresponding object wrappers are equivalent; thus, `\\\"5\\\"` is\\n // equivalent to `new String(\\\"5\\\")`.\\n result = a == String(b);\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n case '[object Number]':\\n // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\\n // other numeric values.\\n result = a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b);\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n case '[object Date]':\\n case '[object Boolean]':\\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\\n // millisecond representations. Note that invalid dates with millisecond representations\\n // of `NaN` are not equivalent.\\n result = +a == +b;\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n // RegExps are compared by their source patterns and flags.\\n case '[object RegExp]':\\n return a.source == b.source &&\\n a.global == b.global &&\\n a.multiline == b.multiline &&\\n a.ignoreCase == b.ignoreCase;\\n }\\n if (typeof a != 'object' || typeof b != 'object') {\\n diffBuilder.record(a, b);\\n return false;\\n }\\n\\n var aIsDomNode = j$.isDomNode(a);\\n var bIsDomNode = j$.isDomNode(b);\\n if (aIsDomNode && bIsDomNode) {\\n // At first try to use DOM3 method isEqualNode\\n result = a.isEqualNode(b);\\n if (!result) {\\n diffBuilder.record(a, b);\\n }\\n return result;\\n }\\n if (aIsDomNode || bIsDomNode) {\\n diffBuilder.record(a, b);\\n return false;\\n }\\n\\n var aIsPromise = j$.isPromise(a);\\n var bIsPromise = j$.isPromise(b);\\n if (aIsPromise && bIsPromise) {\\n return a === b;\\n }\\n\\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\\n var length = aStack.length;\\n while (length--) {\\n // Linear search. Performance is inversely proportional to the number of\\n // unique nested structures.\\n if (aStack[length] == a) { return bStack[length] == b; }\\n }\\n // Add the first object to the stack of traversed objects.\\n aStack.push(a);\\n bStack.push(b);\\n var size = 0;\\n // Recursively compare objects and arrays.\\n // Compare array lengths to determine if a deep comparison is necessary.\\n if (className == '[object Array]') {\\n var aLength = a.length;\\n var bLength = b.length;\\n\\n diffBuilder.withPath('length', function() {\\n if (aLength !== bLength) {\\n diffBuilder.record(aLength, bLength);\\n result = false;\\n }\\n });\\n\\n for (i = 0; i < aLength || i < bLength; i++) {\\n var formatter = false;\\n diffBuilder.withPath(i, function() {\\n if (i >= bLength) {\\n diffBuilder.record(a[i], void 0, actualArrayIsLongerFormatter);\\n result = false;\\n } else {\\n result = eq(i < aLength ? a[i] : void 0, i < bLength ? b[i] : void 0, aStack, bStack, customTesters, diffBuilder) && result;\\n }\\n });\\n }\\n if (!result) {\\n return false;\\n }\\n } else if (j$.isMap(a) && j$.isMap(b)) {\\n if (a.size != b.size) {\\n diffBuilder.record(a, b);\\n return false;\\n }\\n\\n var keysA = [];\\n var keysB = [];\\n a.forEach( function( valueA, keyA ) {\\n keysA.push( keyA );\\n });\\n b.forEach( function( valueB, keyB ) {\\n keysB.push( keyB );\\n });\\n\\n // For both sets of keys, check they map to equal values in both maps.\\n // Keep track of corresponding keys (in insertion order) in order to handle asymmetric obj keys.\\n var mapKeys = [keysA, keysB];\\n var cmpKeys = [keysB, keysA];\\n var mapIter, mapKey, mapValueA, mapValueB;\\n var cmpIter, cmpKey;\\n for (i = 0; result && i < mapKeys.length; i++) {\\n mapIter = mapKeys[i];\\n cmpIter = cmpKeys[i];\\n\\n for (var j = 0; result && j < mapIter.length; j++) {\\n mapKey = mapIter[j];\\n cmpKey = cmpIter[j];\\n mapValueA = a.get(mapKey);\\n\\n // Only use the cmpKey when one of the keys is asymmetric and the corresponding key matches,\\n // otherwise explicitly look up the mapKey in the other Map since we want keys with unique\\n // obj identity (that are otherwise equal) to not match.\\n if (isAsymmetric(mapKey) || isAsymmetric(cmpKey) &&\\n eq(mapKey, cmpKey, aStack, bStack, customTesters, j$.NullDiffBuilder())) {\\n mapValueB = b.get(cmpKey);\\n } else {\\n mapValueB = b.get(mapKey);\\n }\\n result = eq(mapValueA, mapValueB, aStack, bStack, customTesters, j$.NullDiffBuilder());\\n }\\n }\\n\\n if (!result) {\\n diffBuilder.record(a, b);\\n return false;\\n }\\n } else if (j$.isSet(a) && j$.isSet(b)) {\\n if (a.size != b.size) {\\n diffBuilder.record(a, b);\\n return false;\\n }\\n\\n var valuesA = [];\\n a.forEach( function( valueA ) {\\n valuesA.push( valueA );\\n });\\n var valuesB = [];\\n b.forEach( function( valueB ) {\\n valuesB.push( valueB );\\n });\\n\\n // For both sets, check they are all contained in the other set\\n var setPairs = [[valuesA, valuesB], [valuesB, valuesA]];\\n var stackPairs = [[aStack, bStack], [bStack, aStack]];\\n var baseValues, baseValue, baseStack;\\n var otherValues, otherValue, otherStack;\\n var found;\\n var prevStackSize;\\n for (i = 0; result && i < setPairs.length; i++) {\\n baseValues = setPairs[i][0];\\n otherValues = setPairs[i][1];\\n baseStack = stackPairs[i][0];\\n otherStack = stackPairs[i][1];\\n // For each value in the base set...\\n for (var k = 0; result && k < baseValues.length; k++) {\\n baseValue = baseValues[k];\\n found = false;\\n // ... test that it is present in the other set\\n for (var l = 0; !found && l < otherValues.length; l++) {\\n otherValue = otherValues[l];\\n prevStackSize = baseStack.length;\\n // compare by value equality\\n found = eq(baseValue, otherValue, baseStack, otherStack, customTesters, j$.NullDiffBuilder());\\n if (!found && prevStackSize !== baseStack.length) {\\n baseStack.splice(prevStackSize);\\n otherStack.splice(prevStackSize);\\n }\\n }\\n result = result && found;\\n }\\n }\\n\\n if (!result) {\\n diffBuilder.record(a, b);\\n return false;\\n }\\n } else {\\n\\n // Objects with different constructors are not equivalent, but `Object`s\\n // or `Array`s from different frames are.\\n var aCtor = a.constructor, bCtor = b.constructor;\\n if (aCtor !== bCtor &&\\n isFunction(aCtor) && isFunction(bCtor) &&\\n a instanceof aCtor && b instanceof bCtor &&\\n !(aCtor instanceof aCtor && bCtor instanceof bCtor)) {\\n\\n diffBuilder.record(a, b, constructorsAreDifferentFormatter);\\n return false;\\n }\\n }\\n\\n // Deep compare objects.\\n var aKeys = keys(a, className == '[object Array]'), key;\\n size = aKeys.length;\\n\\n // Ensure that both objects contain the same number of properties before comparing deep equality.\\n if (keys(b, className == '[object Array]').length !== size) {\\n diffBuilder.record(a, b, objectKeysAreDifferentFormatter);\\n return false;\\n }\\n\\n for (i = 0; i < size; i++) {\\n key = aKeys[i];\\n // Deep compare each member\\n if (!j$.util.has(b, key)) {\\n diffBuilder.record(a, b, objectKeysAreDifferentFormatter);\\n result = false;\\n continue;\\n }\\n\\n diffBuilder.withPath(key, function() {\\n if(!eq(a[key], b[key], aStack, bStack, customTesters, diffBuilder)) {\\n result = false;\\n }\\n });\\n }\\n\\n if (!result) {\\n return false;\\n }\\n\\n // Remove the first object from the stack of traversed objects.\\n aStack.pop();\\n bStack.pop();\\n\\n return result;\\n }\\n\\n function keys(obj, isArray) {\\n var allKeys = Object.keys ? Object.keys(obj) :\\n (function(o) {\\n var keys = [];\\n for (var key in o) {\\n if (j$.util.has(o, key)) {\\n keys.push(key);\\n }\\n }\\n return keys;\\n })(obj);\\n\\n if (!isArray) {\\n return allKeys;\\n }\\n\\n if (allKeys.length === 0) {\\n return allKeys;\\n }\\n\\n var extraKeys = [];\\n for (var i = 0; i < allKeys.length; i++) {\\n if (!/^[0-9]+$/.test(allKeys[i])) {\\n extraKeys.push(allKeys[i]);\\n }\\n }\\n\\n return extraKeys;\\n }\\n\\n function has(obj, key) {\\n return Object.prototype.hasOwnProperty.call(obj, key);\\n }\\n\\n function isFunction(obj) {\\n return typeof obj === 'function';\\n }\\n\\n function objectKeysAreDifferentFormatter(actual, expected, path) {\\n var missingProperties = j$.util.objectDifference(expected, actual),\\n extraProperties = j$.util.objectDifference(actual, expected),\\n missingPropertiesMessage = formatKeyValuePairs(missingProperties),\\n extraPropertiesMessage = formatKeyValuePairs(extraProperties),\\n messages = [];\\n\\n if (!path.depth()) {\\n path = 'object';\\n }\\n\\n if (missingPropertiesMessage.length) {\\n messages.push('Expected ' + path + ' to have properties' + missingPropertiesMessage);\\n }\\n\\n if (extraPropertiesMessage.length) {\\n messages.push('Expected ' + path + ' not to have properties' + extraPropertiesMessage);\\n }\\n\\n return messages.join('\\\\n');\\n }\\n\\n function constructorsAreDifferentFormatter(actual, expected, path) {\\n if (!path.depth()) {\\n path = 'object';\\n }\\n\\n return 'Expected ' +\\n path + ' to be a kind of ' +\\n j$.fnNameFor(expected.constructor) +\\n ', but was ' + j$.pp(actual) + '.';\\n }\\n\\n function actualArrayIsLongerFormatter(actual, expected, path) {\\n return 'Unexpected ' +\\n path + (path.depth() ? ' = ' : '') +\\n j$.pp(actual) +\\n ' in array.';\\n }\\n\\n function formatKeyValuePairs(obj) {\\n var formatted = '';\\n for (var key in obj) {\\n formatted += '\\\\n ' + key + ': ' + j$.pp(obj[key]);\\n }\\n return formatted;\\n }\\n};\\n\\ngetJasmineRequireObj().nothing = function() {\\n /**\\n * {@link expect} nothing explicitly.\\n * @function\\n * @name matchers#nothing\\n * @example\\n * expect().nothing();\\n */\\n function nothing() {\\n return {\\n compare: function() {\\n return {\\n pass: true\\n };\\n }\\n };\\n }\\n\\n return nothing;\\n};\\n\\ngetJasmineRequireObj().NullDiffBuilder = function(j$) {\\n return function() {\\n return {\\n withPath: function(_, block) {\\n block();\\n },\\n record: function() {}\\n };\\n };\\n};\\n\\ngetJasmineRequireObj().ObjectPath = function(j$) {\\n function ObjectPath(components) {\\n this.components = components || [];\\n }\\n\\n ObjectPath.prototype.toString = function() {\\n if (this.components.length) {\\n return '$' + map(this.components, formatPropertyAccess).join('');\\n } else {\\n return '';\\n }\\n };\\n\\n ObjectPath.prototype.add = function(component) {\\n return new ObjectPath(this.components.concat([component]));\\n };\\n\\n ObjectPath.prototype.depth = function() {\\n return this.components.length;\\n };\\n\\n function formatPropertyAccess(prop) {\\n if (typeof prop === 'number') {\\n return '[' + prop + ']';\\n }\\n\\n if (isValidIdentifier(prop)) {\\n return '.' + prop;\\n }\\n\\n return '[\\\\'' + prop + '\\\\']';\\n }\\n\\n function map(array, fn) {\\n var results = [];\\n for (var i = 0; i < array.length; i++) {\\n results.push(fn(array[i]));\\n }\\n return results;\\n }\\n\\n function isValidIdentifier(string) {\\n return /^[A-Za-z\\\\$_][A-Za-z0-9\\\\$_]*$/.test(string);\\n }\\n\\n return ObjectPath;\\n};\\n\\ngetJasmineRequireObj().requireAsyncMatchers = function(jRequire, j$) {\\n var availableMatchers = [\\n 'toBeResolved',\\n 'toBeRejected',\\n 'toBeResolvedTo',\\n 'toBeRejectedWith'\\n ],\\n matchers = {};\\n\\n for (var i = 0; i < availableMatchers.length; i++) {\\n var name = availableMatchers[i];\\n matchers[name] = jRequire[name](j$);\\n }\\n\\n return matchers;\\n};\\n\\ngetJasmineRequireObj().toBe = function(j$) {\\n /**\\n * {@link expect} the actual value to be `===` to the expected value.\\n * @function\\n * @name matchers#toBe\\n * @param {Object} expected - The expected value to compare against.\\n * @example\\n * expect(thing).toBe(realThing);\\n */\\n function toBe(util) {\\n var tip = ' Tip: To check for deep equality, use .toEqual() instead of .toBe().';\\n\\n return {\\n compare: function(actual, expected) {\\n var result = {\\n pass: actual === expected,\\n };\\n\\n if (typeof expected === 'object') {\\n result.message = util.buildFailureMessage('toBe', result.pass, actual, expected) + tip;\\n }\\n\\n return result;\\n }\\n };\\n }\\n\\n return toBe;\\n};\\n\\ngetJasmineRequireObj().toBeCloseTo = function() {\\n /**\\n * {@link expect} the actual value to be within a specified precision of the expected value.\\n * @function\\n * @name matchers#toBeCloseTo\\n * @param {Object} expected - The expected value to compare against.\\n * @param {Number} [precision=2] - The number of decimal points to check.\\n * @example\\n * expect(number).toBeCloseTo(42.2, 3);\\n */\\n function toBeCloseTo() {\\n return {\\n compare: function(actual, expected, precision) {\\n if (precision !== 0) {\\n precision = precision || 2;\\n }\\n\\n if (expected === null || actual === null) {\\n throw new Error('Cannot use toBeCloseTo with null. Arguments evaluated to: ' +\\n 'expect(' + actual + ').toBeCloseTo(' + expected + ').'\\n );\\n }\\n\\n var pow = Math.pow(10, precision + 1);\\n var delta = Math.abs(expected - actual);\\n var maxDelta = Math.pow(10, -precision) / 2;\\n\\n return {\\n pass: Math.round(delta * pow) / pow <= maxDelta\\n };\\n }\\n };\\n }\\n\\n return toBeCloseTo;\\n};\\n\\ngetJasmineRequireObj().toBeDefined = function() {\\n /**\\n * {@link expect} the actual value to be defined. (Not `undefined`)\\n * @function\\n * @name matchers#toBeDefined\\n * @example\\n * expect(result).toBeDefined();\\n */\\n function toBeDefined() {\\n return {\\n compare: function(actual) {\\n return {\\n pass: (void 0 !== actual)\\n };\\n }\\n };\\n }\\n\\n return toBeDefined;\\n};\\n\\ngetJasmineRequireObj().toBeFalsy = function() {\\n /**\\n * {@link expect} the actual value to be falsy\\n * @function\\n * @name matchers#toBeFalsy\\n * @example\\n * expect(result).toBeFalsy();\\n */\\n function toBeFalsy() {\\n return {\\n compare: function(actual) {\\n return {\\n pass: !!!actual\\n };\\n }\\n };\\n }\\n\\n return toBeFalsy;\\n};\\n\\ngetJasmineRequireObj().toBeGreaterThan = function() {\\n /**\\n * {@link expect} the actual value to be greater than the expected value.\\n * @function\\n * @name matchers#toBeGreaterThan\\n * @param {Number} expected - The value to compare against.\\n * @example\\n * expect(result).toBeGreaterThan(3);\\n */\\n function toBeGreaterThan() {\\n return {\\n compare: function(actual, expected) {\\n return {\\n pass: actual > expected\\n };\\n }\\n };\\n }\\n\\n return toBeGreaterThan;\\n};\\n\\n\\ngetJasmineRequireObj().toBeGreaterThanOrEqual = function() {\\n /**\\n * {@link expect} the actual value to be greater than or equal to the expected value.\\n * @function\\n * @name matchers#toBeGreaterThanOrEqual\\n * @param {Number} expected - The expected value to compare against.\\n * @example\\n * expect(result).toBeGreaterThanOrEqual(25);\\n */\\n function toBeGreaterThanOrEqual() {\\n return {\\n compare: function(actual, expected) {\\n return {\\n pass: actual >= expected\\n };\\n }\\n };\\n }\\n\\n return toBeGreaterThanOrEqual;\\n};\\n\\ngetJasmineRequireObj().toBeLessThan = function() {\\n /**\\n * {@link expect} the actual value to be less than the expected value.\\n * @function\\n * @name matchers#toBeLessThan\\n * @param {Number} expected - The expected value to compare against.\\n * @example\\n * expect(result).toBeLessThan(0);\\n */\\n function toBeLessThan() {\\n return {\\n\\n compare: function(actual, expected) {\\n return {\\n pass: actual < expected\\n };\\n }\\n };\\n }\\n\\n return toBeLessThan;\\n};\\n\\ngetJasmineRequireObj().toBeLessThanOrEqual = function() {\\n /**\\n * {@link expect} the actual value to be less than or equal to the expected value.\\n * @function\\n * @name matchers#toBeLessThanOrEqual\\n * @param {Number} expected - The expected value to compare against.\\n * @example\\n * expect(result).toBeLessThanOrEqual(123);\\n */\\n function toBeLessThanOrEqual() {\\n return {\\n\\n compare: function(actual, expected) {\\n return {\\n pass: actual <= expected\\n };\\n }\\n };\\n }\\n\\n return toBeLessThanOrEqual;\\n};\\n\\ngetJasmineRequireObj().toBeNaN = function(j$) {\\n /**\\n * {@link expect} the actual value to be `NaN` (Not a Number).\\n * @function\\n * @name matchers#toBeNaN\\n * @example\\n * expect(thing).toBeNaN();\\n */\\n function toBeNaN() {\\n return {\\n compare: function(actual) {\\n var result = {\\n pass: (actual !== actual)\\n };\\n\\n if (result.pass) {\\n result.message = 'Expected actual not to be NaN.';\\n } else {\\n result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; };\\n }\\n\\n return result;\\n }\\n };\\n }\\n\\n return toBeNaN;\\n};\\n\\ngetJasmineRequireObj().toBeNegativeInfinity = function(j$) {\\n /**\\n * {@link expect} the actual value to be `-Infinity` (-infinity).\\n * @function\\n * @name matchers#toBeNegativeInfinity\\n * @example\\n * expect(thing).toBeNegativeInfinity();\\n */\\n function toBeNegativeInfinity() {\\n return {\\n compare: function(actual) {\\n var result = {\\n pass: (actual === Number.NEGATIVE_INFINITY)\\n };\\n\\n if (result.pass) {\\n result.message = 'Expected actual to be -Infinity.';\\n } else {\\n result.message = function() { return 'Expected ' + j$.pp(actual) + ' not to be -Infinity.'; };\\n }\\n\\n return result;\\n }\\n };\\n }\\n\\n return toBeNegativeInfinity;\\n};\\n\\ngetJasmineRequireObj().toBeNull = function() {\\n /**\\n * {@link expect} the actual value to be `null`.\\n * @function\\n * @name matchers#toBeNull\\n * @example\\n * expect(result).toBeNull();\\n */\\n function toBeNull() {\\n return {\\n compare: function(actual) {\\n return {\\n pass: actual === null\\n };\\n }\\n };\\n }\\n\\n return toBeNull;\\n};\\n\\ngetJasmineRequireObj().toBePositiveInfinity = function(j$) {\\n /**\\n * {@link expect} the actual value to be `Infinity` (infinity).\\n * @function\\n * @name matchers#toBePositiveInfinity\\n * @example\\n * expect(thing).toBePositiveInfinity();\\n */\\n function toBePositiveInfinity() {\\n return {\\n compare: function(actual) {\\n var result = {\\n pass: (actual === Number.POSITIVE_INFINITY)\\n };\\n\\n if (result.pass) {\\n result.message = 'Expected actual to be Infinity.';\\n } else {\\n result.message = function() { return 'Expected ' + j$.pp(actual) + ' not to be Infinity.'; };\\n }\\n\\n return result;\\n }\\n };\\n }\\n\\n return toBePositiveInfinity;\\n};\\n\\ngetJasmineRequireObj().toBeTruthy = function() {\\n /**\\n * {@link expect} the actual value to be truthy.\\n * @function\\n * @name matchers#toBeTruthy\\n * @example\\n * expect(thing).toBeTruthy();\\n */\\n function toBeTruthy() {\\n return {\\n compare: function(actual) {\\n return {\\n pass: !!actual\\n };\\n }\\n };\\n }\\n\\n return toBeTruthy;\\n};\\n\\ngetJasmineRequireObj().toBeUndefined = function() {\\n /**\\n * {@link expect} the actual value to be `undefined`.\\n * @function\\n * @name matchers#toBeUndefined\\n * @example\\n * expect(result).toBeUndefined():\\n */\\n function toBeUndefined() {\\n return {\\n compare: function(actual) {\\n return {\\n pass: void 0 === actual\\n };\\n }\\n };\\n }\\n\\n return toBeUndefined;\\n};\\n\\ngetJasmineRequireObj().toContain = function() {\\n /**\\n * {@link expect} the actual value to contain a specific value.\\n * @function\\n * @name matchers#toContain\\n * @param {Object} expected - The value to look for.\\n * @example\\n * expect(array).toContain(anElement);\\n * expect(string).toContain(substring);\\n */\\n function toContain(util, customEqualityTesters) {\\n customEqualityTesters = customEqualityTesters || [];\\n\\n return {\\n compare: function(actual, expected) {\\n\\n return {\\n pass: util.contains(actual, expected, customEqualityTesters)\\n };\\n }\\n };\\n }\\n\\n return toContain;\\n};\\n\\ngetJasmineRequireObj().toEqual = function(j$) {\\n /**\\n * {@link expect} the actual value to be equal to the expected, using deep equality comparison.\\n * @function\\n * @name matchers#toEqual\\n * @param {Object} expected - Expected value\\n * @example\\n * expect(bigObject).toEqual({\\\"foo\\\": ['bar', 'baz']});\\n */\\n function toEqual(util, customEqualityTesters) {\\n customEqualityTesters = customEqualityTesters || [];\\n\\n return {\\n compare: function(actual, expected) {\\n var result = {\\n pass: false\\n },\\n diffBuilder = j$.DiffBuilder();\\n\\n result.pass = util.equals(actual, expected, customEqualityTesters, diffBuilder);\\n\\n // TODO: only set error message if test fails\\n result.message = diffBuilder.getMessage();\\n\\n return result;\\n }\\n };\\n }\\n\\n return toEqual;\\n};\\n\\ngetJasmineRequireObj().toHaveBeenCalled = function(j$) {\\n\\n var getErrorMsg = j$.formatErrorMsg('<toHaveBeenCalled>', 'expect(<spyObj>).toHaveBeenCalled()');\\n\\n /**\\n * {@link expect} the actual (a {@link Spy}) to have been called.\\n * @function\\n * @name matchers#toHaveBeenCalled\\n * @example\\n * expect(mySpy).toHaveBeenCalled();\\n * expect(mySpy).not.toHaveBeenCalled();\\n */\\n function toHaveBeenCalled() {\\n return {\\n compare: function(actual) {\\n var result = {};\\n\\n if (!j$.isSpy(actual)) {\\n throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.'));\\n }\\n\\n if (arguments.length > 1) {\\n throw new Error(getErrorMsg('Does not take arguments, use toHaveBeenCalledWith'));\\n }\\n\\n result.pass = actual.calls.any();\\n\\n result.message = result.pass ?\\n 'Expected spy ' + actual.and.identity + ' not to have been called.' :\\n 'Expected spy ' + actual.and.identity + ' to have been called.';\\n\\n return result;\\n }\\n };\\n }\\n\\n return toHaveBeenCalled;\\n};\\n\\ngetJasmineRequireObj().toHaveBeenCalledBefore = function(j$) {\\n\\n var getErrorMsg = j$.formatErrorMsg('<toHaveBeenCalledBefore>', 'expect(<spyObj>).toHaveBeenCalledBefore(<spyObj>)');\\n\\n /**\\n * {@link expect} the actual value (a {@link Spy}) to have been called before another {@link Spy}.\\n * @function\\n * @name matchers#toHaveBeenCalledBefore\\n * @param {Spy} expected - {@link Spy} that should have been called after the `actual` {@link Spy}.\\n * @example\\n * expect(mySpy).toHaveBeenCalledBefore(otherSpy);\\n */\\n function toHaveBeenCalledBefore() {\\n return {\\n compare: function(firstSpy, latterSpy) {\\n if (!j$.isSpy(firstSpy)) {\\n throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(firstSpy) + '.'));\\n }\\n if (!j$.isSpy(latterSpy)) {\\n throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(latterSpy) + '.'));\\n }\\n\\n var result = { pass: false };\\n\\n if (!firstSpy.calls.count()) {\\n result.message = 'Expected spy ' + firstSpy.and.identity + ' to have been called.';\\n return result;\\n }\\n if (!latterSpy.calls.count()) {\\n result.message = 'Expected spy ' + latterSpy.and.identity + ' to have been called.';\\n return result;\\n }\\n\\n var latest1stSpyCall = firstSpy.calls.mostRecent().invocationOrder;\\n var first2ndSpyCall = latterSpy.calls.first().invocationOrder;\\n\\n result.pass = latest1stSpyCall < first2ndSpyCall;\\n\\n if (result.pass) {\\n result.message = 'Expected spy ' + firstSpy.and.identity + ' to not have been called before spy ' + latterSpy.and.identity + ', but it was';\\n } else {\\n var first1stSpyCall = firstSpy.calls.first().invocationOrder;\\n var latest2ndSpyCall = latterSpy.calls.mostRecent().invocationOrder;\\n\\n if(first1stSpyCall < first2ndSpyCall) {\\n result.message = 'Expected latest call to spy ' + firstSpy.and.identity + ' to have been called before first call to spy ' + latterSpy.and.identity + ' (no interleaved calls)';\\n } else if (latest2ndSpyCall > latest1stSpyCall) {\\n result.message = 'Expected first call to spy ' + latterSpy.and.identity + ' to have been called after latest call to spy ' + firstSpy.and.identity + ' (no interleaved calls)';\\n } else {\\n result.message = 'Expected spy ' + firstSpy.and.identity + ' to have been called before spy ' + latterSpy.and.identity;\\n }\\n }\\n\\n return result;\\n }\\n };\\n }\\n\\n return toHaveBeenCalledBefore;\\n};\\n\\ngetJasmineRequireObj().toHaveBeenCalledTimes = function(j$) {\\n\\n var getErrorMsg = j$.formatErrorMsg('<toHaveBeenCalledTimes>', 'expect(<spyObj>).toHaveBeenCalledTimes(<Number>)');\\n\\n /**\\n * {@link expect} the actual (a {@link Spy}) to have been called the specified number of times.\\n * @function\\n * @name matchers#toHaveBeenCalledTimes\\n * @param {Number} expected - The number of invocations to look for.\\n * @example\\n * expect(mySpy).toHaveBeenCalledTimes(3);\\n */\\n function toHaveBeenCalledTimes() {\\n return {\\n compare: function(actual, expected) {\\n if (!j$.isSpy(actual)) {\\n throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.'));\\n }\\n\\n var args = Array.prototype.slice.call(arguments, 0),\\n result = { pass: false };\\n\\n if (!j$.isNumber_(expected)){\\n throw new Error(getErrorMsg('The expected times failed is a required argument and must be a number.'));\\n }\\n\\n actual = args[0];\\n var calls = actual.calls.count();\\n var timesMessage = expected === 1 ? 'once' : expected + ' times';\\n result.pass = calls === expected;\\n result.message = result.pass ?\\n 'Expected spy ' + actual.and.identity + ' not to have been called ' + timesMessage + '. It was called ' + calls + ' times.' :\\n 'Expected spy ' + actual.and.identity + ' to have been called ' + timesMessage + '. It was called ' + calls + ' times.';\\n return result;\\n }\\n };\\n }\\n\\n return toHaveBeenCalledTimes;\\n};\\n\\ngetJasmineRequireObj().toHaveBeenCalledWith = function(j$) {\\n\\n var getErrorMsg = j$.formatErrorMsg('<toHaveBeenCalledWith>', 'expect(<spyObj>).toHaveBeenCalledWith(...arguments)');\\n\\n /**\\n * {@link expect} the actual (a {@link Spy}) to have been called with particular arguments at least once.\\n * @function\\n * @name matchers#toHaveBeenCalledWith\\n * @param {...Object} - The arguments to look for\\n * @example\\n * expect(mySpy).toHaveBeenCalledWith('foo', 'bar', 2);\\n */\\n function toHaveBeenCalledWith(util, customEqualityTesters) {\\n return {\\n compare: function() {\\n var args = Array.prototype.slice.call(arguments, 0),\\n actual = args[0],\\n expectedArgs = args.slice(1),\\n result = { pass: false };\\n\\n if (!j$.isSpy(actual)) {\\n throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.'));\\n }\\n\\n if (!actual.calls.any()) {\\n result.message = function() { return 'Expected spy ' + actual.and.identity + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; };\\n return result;\\n }\\n\\n if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) {\\n result.pass = true;\\n result.message = function() { return 'Expected spy ' + actual.and.identity + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; };\\n } else {\\n result.message = function() { return 'Expected spy ' + actual.and.identity + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\\\\[ | \\\\]$/g, '') + '.'; };\\n }\\n\\n return result;\\n }\\n };\\n }\\n\\n return toHaveBeenCalledWith;\\n};\\n\\ngetJasmineRequireObj().toHaveClass = function(j$) {\\n /**\\n * {@link expect} the actual value to be a DOM element that has the expected class\\n * @function\\n * @name matchers#toHaveClass\\n * @param {Object} expected - The class name to test for\\n * @example\\n * var el = document.createElement('div');\\n * el.className = 'foo bar baz';\\n * expect(el).toHaveClass('bar');\\n */\\n function toHaveClass(util, customEqualityTesters) {\\n return {\\n compare: function(actual, expected) {\\n if (!isElement(actual)) {\\n throw new Error(j$.pp(actual) + ' is not a DOM element');\\n }\\n\\n return {\\n pass: actual.classList.contains(expected)\\n };\\n }\\n };\\n }\\n\\n function isElement(maybeEl) {\\n return maybeEl &&\\n maybeEl.classList &&\\n j$.isFunction_(maybeEl.classList.contains);\\n }\\n\\n return toHaveClass;\\n};\\n\\ngetJasmineRequireObj().toMatch = function(j$) {\\n\\n var getErrorMsg = j$.formatErrorMsg('<toMatch>', 'expect(<expectation>).toMatch(<string> || <regexp>)');\\n\\n /**\\n * {@link expect} the actual value to match a regular expression\\n * @function\\n * @name matchers#toMatch\\n * @param {RegExp|String} expected - Value to look for in the string.\\n * @example\\n * expect(\\\"my string\\\").toMatch(/string$/);\\n * expect(\\\"other string\\\").toMatch(\\\"her\\\");\\n */\\n function toMatch() {\\n return {\\n compare: function(actual, expected) {\\n if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) {\\n throw new Error(getErrorMsg('Expected is not a String or a RegExp'));\\n }\\n\\n var regexp = new RegExp(expected);\\n\\n return {\\n pass: regexp.test(actual)\\n };\\n }\\n };\\n }\\n\\n return toMatch;\\n};\\n\\ngetJasmineRequireObj().toThrow = function(j$) {\\n\\n var getErrorMsg = j$.formatErrorMsg('<toThrow>', 'expect(function() {<expectation>}).toThrow()');\\n\\n /**\\n * {@link expect} a function to `throw` something.\\n * @function\\n * @name matchers#toThrow\\n * @param {Object} [expected] - Value that should be thrown. If not provided, simply the fact that something was thrown will be checked.\\n * @example\\n * expect(function() { return 'things'; }).toThrow('foo');\\n * expect(function() { return 'stuff'; }).toThrow();\\n */\\n function toThrow(util) {\\n return {\\n compare: function(actual, expected) {\\n var result = { pass: false },\\n threw = false,\\n thrown;\\n\\n if (typeof actual != 'function') {\\n throw new Error(getErrorMsg('Actual is not a Function'));\\n }\\n\\n try {\\n actual();\\n } catch (e) {\\n threw = true;\\n thrown = e;\\n }\\n\\n if (!threw) {\\n result.message = 'Expected function to throw an exception.';\\n return result;\\n }\\n\\n if (arguments.length == 1) {\\n result.pass = true;\\n result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; };\\n\\n return result;\\n }\\n\\n if (util.equals(thrown, expected)) {\\n result.pass = true;\\n result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; };\\n } else {\\n result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; };\\n }\\n\\n return result;\\n }\\n };\\n }\\n\\n return toThrow;\\n};\\n\\ngetJasmineRequireObj().toThrowError = function(j$) {\\n\\n var getErrorMsg = j$.formatErrorMsg('<toThrowError>', 'expect(function() {<expectation>}).toThrowError(<ErrorConstructor>, <message>)');\\n\\n /**\\n * {@link expect} a function to `throw` an `Error`.\\n * @function\\n * @name matchers#toThrowError\\n * @param {Error} [expected] - `Error` constructor the object that was thrown needs to be an instance of. If not provided, `Error` will be used.\\n * @param {RegExp|String} [message] - The message that should be set on the thrown `Error`\\n * @example\\n * expect(function() { return 'things'; }).toThrowError(MyCustomError, 'message');\\n * expect(function() { return 'things'; }).toThrowError(MyCustomError, /bar/);\\n * expect(function() { return 'stuff'; }).toThrowError(MyCustomError);\\n * expect(function() { return 'other'; }).toThrowError(/foo/);\\n * expect(function() { return 'other'; }).toThrowError();\\n */\\n function toThrowError () {\\n return {\\n compare: function(actual) {\\n var errorMatcher = getMatcher.apply(null, arguments),\\n thrown;\\n\\n if (typeof actual != 'function') {\\n throw new Error(getErrorMsg('Actual is not a Function'));\\n }\\n\\n try {\\n actual();\\n return fail('Expected function to throw an Error.');\\n } catch (e) {\\n thrown = e;\\n }\\n\\n if (!j$.isError_(thrown)) {\\n return fail(function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; });\\n }\\n\\n return errorMatcher.match(thrown);\\n }\\n };\\n\\n function getMatcher() {\\n var expected, errorType;\\n\\n if (arguments[2]) {\\n errorType = arguments[1];\\n expected = arguments[2];\\n if (!isAnErrorType(errorType)) {\\n throw new Error(getErrorMsg('Expected error type is not an Error.'));\\n }\\n\\n return exactMatcher(expected, errorType);\\n } else if (arguments[1]) {\\n expected = arguments[1];\\n\\n if (isAnErrorType(arguments[1])) {\\n return exactMatcher(null, arguments[1]);\\n } else {\\n return exactMatcher(arguments[1], null);\\n }\\n } else {\\n return anyMatcher();\\n }\\n }\\n\\n function anyMatcher() {\\n return {\\n match: function(error) {\\n return pass('Expected function not to throw an Error, but it threw ' + j$.fnNameFor(error) + '.');\\n }\\n };\\n }\\n\\n function exactMatcher(expected, errorType) {\\n if (expected && !isStringOrRegExp(expected)) {\\n if (errorType) {\\n throw new Error(getErrorMsg('Expected error message is not a string or RegExp.'));\\n } else {\\n throw new Error(getErrorMsg('Expected is not an Error, string, or RegExp.'));\\n }\\n }\\n\\n function messageMatch(message) {\\n if (typeof expected == 'string') {\\n return expected == message;\\n } else {\\n return expected.test(message);\\n }\\n }\\n\\n var errorTypeDescription = errorType ? j$.fnNameFor(errorType) : 'an exception';\\n\\n function thrownDescription(thrown) {\\n var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception',\\n thrownMessage = '';\\n\\n if (expected) {\\n thrownMessage = ' with message ' + j$.pp(thrown.message);\\n }\\n\\n return thrownName + thrownMessage;\\n }\\n\\n function messageDescription() {\\n if (expected === null) {\\n return '';\\n } else if (expected instanceof RegExp) {\\n return ' with a message matching ' + j$.pp(expected);\\n } else {\\n return ' with message ' + j$.pp(expected);\\n }\\n }\\n\\n function matches(error) {\\n return (errorType === null || error instanceof errorType) &&\\n (expected === null || messageMatch(error.message));\\n }\\n\\n return {\\n match: function(thrown) {\\n if (matches(thrown)) {\\n return pass(function() {\\n return 'Expected function not to throw ' + errorTypeDescription + messageDescription() + '.';\\n });\\n } else {\\n return fail(function() {\\n return 'Expected function to throw ' + errorTypeDescription + messageDescription() +\\n ', but it threw ' + thrownDescription(thrown) + '.';\\n });\\n }\\n }\\n };\\n }\\n\\n function isStringOrRegExp(potential) {\\n return potential instanceof RegExp || (typeof potential == 'string');\\n }\\n\\n function isAnErrorType(type) {\\n if (typeof type !== 'function') {\\n return false;\\n }\\n\\n var Surrogate = function() {};\\n Surrogate.prototype = type.prototype;\\n return j$.isError_(new Surrogate());\\n }\\n }\\n\\n function pass(message) {\\n return {\\n pass: true,\\n message: message\\n };\\n }\\n\\n function fail(message) {\\n return {\\n pass: false,\\n message: message\\n };\\n }\\n\\n return toThrowError;\\n};\\n\\ngetJasmineRequireObj().toThrowMatching = function(j$) {\\n var usageError = j$.formatErrorMsg('<toThrowMatching>', 'expect(function() {<expectation>}).toThrowMatching(<Predicate>)');\\n\\n /**\\n * {@link expect} a function to `throw` something matching a predicate.\\n * @function\\n * @name matchers#toThrowMatching\\n * @param {Function} predicate - A function that takes the thrown exception as its parameter and returns true if it matches.\\n * @example\\n * expect(function() { throw new Error('nope'); }).toThrowMatching(function(thrown) { return thrown.message === 'nope'; });\\n */\\n function toThrowMatching() {\\n return {\\n compare: function(actual, predicate) {\\n var thrown;\\n\\n if (typeof actual !== 'function') {\\n throw new Error(usageError('Actual is not a Function'));\\n }\\n\\n if (typeof predicate !== 'function') {\\n throw new Error(usageError('Predicate is not a Function'));\\n }\\n\\n try {\\n actual();\\n return fail('Expected function to throw an exception.');\\n } catch (e) {\\n thrown = e;\\n }\\n\\n if (predicate(thrown)) {\\n return pass('Expected function not to throw an exception matching a predicate.');\\n } else {\\n return fail(function() {\\n return 'Expected function to throw an exception matching a predicate, ' +\\n 'but it threw ' + thrownDescription(thrown) + '.';\\n });\\n }\\n }\\n };\\n }\\n\\n function thrownDescription(thrown) {\\n if (thrown && thrown.constructor) {\\n return j$.fnNameFor(thrown.constructor) + ' with message ' +\\n j$.pp(thrown.message);\\n } else {\\n return j$.pp(thrown);\\n }\\n }\\n\\n function pass(message) {\\n return {\\n pass: true,\\n message: message\\n };\\n }\\n\\n function fail(message) {\\n return {\\n pass: false,\\n message: message\\n };\\n }\\n\\n return toThrowMatching;\\n};\\n\\ngetJasmineRequireObj().MockDate = function() {\\n function MockDate(global) {\\n var self = this;\\n var currentTime = 0;\\n\\n if (!global || !global.Date) {\\n self.install = function() {};\\n self.tick = function() {};\\n self.uninstall = function() {};\\n return self;\\n }\\n\\n var GlobalDate = global.Date;\\n\\n self.install = function(mockDate) {\\n if (mockDate instanceof GlobalDate) {\\n currentTime = mockDate.getTime();\\n } else {\\n currentTime = new GlobalDate().getTime();\\n }\\n\\n global.Date = FakeDate;\\n };\\n\\n self.tick = function(millis) {\\n millis = millis || 0;\\n currentTime = currentTime + millis;\\n };\\n\\n self.uninstall = function() {\\n currentTime = 0;\\n global.Date = GlobalDate;\\n };\\n\\n createDateProperties();\\n\\n return self;\\n\\n function FakeDate() {\\n switch(arguments.length) {\\n case 0:\\n return new GlobalDate(currentTime);\\n case 1:\\n return new GlobalDate(arguments[0]);\\n case 2:\\n return new GlobalDate(arguments[0], arguments[1]);\\n case 3:\\n return new GlobalDate(arguments[0], arguments[1], arguments[2]);\\n case 4:\\n return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]);\\n case 5:\\n return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],\\n arguments[4]);\\n case 6:\\n return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],\\n arguments[4], arguments[5]);\\n default:\\n return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3],\\n arguments[4], arguments[5], arguments[6]);\\n }\\n }\\n\\n function createDateProperties() {\\n FakeDate.prototype = GlobalDate.prototype;\\n\\n FakeDate.now = function() {\\n if (GlobalDate.now) {\\n return currentTime;\\n } else {\\n throw new Error('Browser does not support Date.now()');\\n }\\n };\\n\\n FakeDate.toSource = GlobalDate.toSource;\\n FakeDate.toString = GlobalDate.toString;\\n FakeDate.parse = GlobalDate.parse;\\n FakeDate.UTC = GlobalDate.UTC;\\n }\\n\\t}\\n\\n return MockDate;\\n};\\n\\ngetJasmineRequireObj().pp = function(j$) {\\n\\n function PrettyPrinter() {\\n this.ppNestLevel_ = 0;\\n this.seen = [];\\n this.length = 0;\\n this.stringParts = [];\\n }\\n\\n function hasCustomToString(value) {\\n // value.toString !== Object.prototype.toString if value has no custom toString but is from another context (e.g.\\n // iframe, web worker)\\n return j$.isFunction_(value.toString) && value.toString !== Object.prototype.toString && (value.toString() !== Object.prototype.toString.call(value));\\n }\\n\\n PrettyPrinter.prototype.format = function(value) {\\n this.ppNestLevel_++;\\n try {\\n if (j$.util.isUndefined(value)) {\\n this.emitScalar('undefined');\\n } else if (value === null) {\\n this.emitScalar('null');\\n } else if (value === 0 && 1/value === -Infinity) {\\n this.emitScalar('-0');\\n } else if (value === j$.getGlobal()) {\\n this.emitScalar('<global>');\\n } else if (value.jasmineToString) {\\n this.emitScalar(value.jasmineToString());\\n } else if (typeof value === 'string') {\\n this.emitString(value);\\n } else if (j$.isSpy(value)) {\\n this.emitScalar('spy on ' + value.and.identity);\\n } else if (value instanceof RegExp) {\\n this.emitScalar(value.toString());\\n } else if (typeof value === 'function') {\\n this.emitScalar('Function');\\n } else if (j$.isDomNode(value)) {\\n if (value.tagName) {\\n this.emitDomElement(value);\\n } else {\\n this.emitScalar('HTMLNode');\\n }\\n } else if (value instanceof Date) {\\n this.emitScalar('Date(' + value + ')');\\n } else if (j$.isSet(value)) {\\n this.emitSet(value);\\n } else if (j$.isMap(value)) {\\n this.emitMap(value);\\n } else if (j$.isTypedArray_(value)) {\\n this.emitTypedArray(value);\\n } else if (value.toString && typeof value === 'object' && !j$.isArray_(value) && hasCustomToString(value)) {\\n this.emitScalar(value.toString());\\n } else if (j$.util.arrayContains(this.seen, value)) {\\n this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');\\n } else if (j$.isArray_(value) || j$.isA_('Object', value)) {\\n this.seen.push(value);\\n if (j$.isArray_(value)) {\\n this.emitArray(value);\\n } else {\\n this.emitObject(value);\\n }\\n this.seen.pop();\\n } else {\\n this.emitScalar(value.toString());\\n }\\n } catch (e) {\\n if (this.ppNestLevel_ > 1 || !(e instanceof MaxCharsReachedError)) {\\n throw e;\\n }\\n } finally {\\n this.ppNestLevel_--;\\n }\\n };\\n\\n PrettyPrinter.prototype.iterateObject = function(obj, fn) {\\n var objKeys = keys(obj, j$.isArray_(obj));\\n var isGetter = function isGetter(prop) {};\\n\\n if (obj.__lookupGetter__) {\\n isGetter = function isGetter(prop) {\\n var getter = obj.__lookupGetter__(prop);\\n return !j$.util.isUndefined(getter) && getter !== null;\\n };\\n\\n }\\n var length = Math.min(objKeys.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);\\n for (var i = 0; i < length; i++) {\\n var property = objKeys[i];\\n fn(property, isGetter(property));\\n }\\n\\n return objKeys.length > length;\\n };\\n\\n PrettyPrinter.prototype.emitScalar = function(value) {\\n this.append(value);\\n };\\n\\n PrettyPrinter.prototype.emitString = function(value) {\\n this.append('\\\\'' + value + '\\\\'');\\n };\\n\\n PrettyPrinter.prototype.emitArray = function(array) {\\n if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {\\n this.append('Array');\\n return;\\n }\\n var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);\\n this.append('[ ');\\n for (var i = 0; i < length; i++) {\\n if (i > 0) {\\n this.append(', ');\\n }\\n this.format(array[i]);\\n }\\n if(array.length > length){\\n this.append(', ...');\\n }\\n\\n var self = this;\\n var first = array.length === 0;\\n var truncated = this.iterateObject(array, function(property, isGetter) {\\n if (first) {\\n first = false;\\n } else {\\n self.append(', ');\\n }\\n\\n self.formatProperty(array, property, isGetter);\\n });\\n\\n if (truncated) { this.append(', ...'); }\\n\\n this.append(' ]');\\n };\\n\\n PrettyPrinter.prototype.emitSet = function(set) {\\n if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {\\n this.append('Set');\\n return;\\n }\\n this.append('Set( ');\\n var size = Math.min(set.size, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);\\n var i = 0;\\n set.forEach( function( value, key ) {\\n if (i >= size) {\\n return;\\n }\\n if (i > 0) {\\n this.append(', ');\\n }\\n this.format(value);\\n\\n i++;\\n }, this );\\n if (set.size > size){\\n this.append(', ...');\\n }\\n this.append(' )');\\n };\\n\\n PrettyPrinter.prototype.emitMap = function(map) {\\n if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {\\n this.append('Map');\\n return;\\n }\\n this.append('Map( ');\\n var size = Math.min(map.size, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH);\\n var i = 0;\\n map.forEach( function( value, key ) {\\n if (i >= size) {\\n return;\\n }\\n if (i > 0) {\\n this.append(', ');\\n }\\n this.format([key,value]);\\n\\n i++;\\n }, this );\\n if (map.size > size){\\n this.append(', ...');\\n }\\n this.append(' )');\\n };\\n\\n PrettyPrinter.prototype.emitObject = function(obj) {\\n var ctor = obj.constructor,\\n constructorName;\\n\\n constructorName = typeof ctor === 'function' && obj instanceof ctor ?\\n j$.fnNameFor(obj.constructor) :\\n 'null';\\n\\n this.append(constructorName);\\n\\n if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) {\\n return;\\n }\\n\\n var self = this;\\n this.append('({ ');\\n var first = true;\\n\\n var truncated = this.iterateObject(obj, function(property, isGetter) {\\n if (first) {\\n first = false;\\n } else {\\n self.append(', ');\\n }\\n\\n self.formatProperty(obj, property, isGetter);\\n });\\n\\n if (truncated) { this.append(', ...'); }\\n\\n this.append(' })');\\n };\\n\\n PrettyPrinter.prototype.emitTypedArray = function(arr) {\\n var constructorName = j$.fnNameFor(arr.constructor),\\n limitedArray = Array.prototype.slice.call(arr, 0, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH),\\n itemsString = Array.prototype.join.call(limitedArray, ', ');\\n\\n if (limitedArray.length !== arr.length) {\\n itemsString += ', ...';\\n }\\n\\n this.append(constructorName + ' [ ' + itemsString + ' ]');\\n };\\n\\n PrettyPrinter.prototype.emitDomElement = function(el) {\\n var tagName = el.tagName.toLowerCase(),\\n attrs = el.attributes,\\n i,\\n len = attrs.length,\\n out = '<' + tagName,\\n attr;\\n\\n for (i = 0; i < len; i++) {\\n attr = attrs[i];\\n out += ' ' + attr.name;\\n\\n if (attr.value !== '') {\\n out += '=\\\"' + attr.value + '\\\"';\\n }\\n }\\n\\n out += '>';\\n\\n if (el.childElementCount !== 0 || el.textContent !== '') {\\n out += '...</' + tagName + '>';\\n }\\n\\n this.append(out);\\n };\\n\\n PrettyPrinter.prototype.formatProperty = function(obj, property, isGetter) {\\n this.append(property);\\n this.append(': ');\\n if (isGetter) {\\n this.append('<getter>');\\n } else {\\n this.format(obj[property]);\\n }\\n };\\n\\n PrettyPrinter.prototype.append = function(value) {\\n var result = truncate(value, j$.MAX_PRETTY_PRINT_CHARS - this.length);\\n this.length += result.value.length;\\n this.stringParts.push(result.value);\\n\\n if (result.truncated) {\\n throw new MaxCharsReachedError();\\n }\\n };\\n\\n\\n function truncate(s, maxlen) {\\n if (s.length <= maxlen) {\\n return { value: s, truncated: false };\\n }\\n\\n s = s.substring(0, maxlen - 4) + ' ...';\\n return { value: s, truncated: true };\\n }\\n\\n function MaxCharsReachedError() {\\n this.message = 'Exceeded ' + j$.MAX_PRETTY_PRINT_CHARS +\\n ' characters while pretty-printing a value';\\n }\\n\\n MaxCharsReachedError.prototype = new Error();\\n\\n function keys(obj, isArray) {\\n var allKeys = Object.keys ? Object.keys(obj) :\\n (function(o) {\\n var keys = [];\\n for (var key in o) {\\n if (j$.util.has(o, key)) {\\n keys.push(key);\\n }\\n }\\n return keys;\\n })(obj);\\n\\n if (!isArray) {\\n return allKeys;\\n }\\n\\n if (allKeys.length === 0) {\\n return allKeys;\\n }\\n\\n var extraKeys = [];\\n for (var i = 0; i < allKeys.length; i++) {\\n if (!/^[0-9]+$/.test(allKeys[i])) {\\n extraKeys.push(allKeys[i]);\\n }\\n }\\n\\n return extraKeys;\\n }\\n return function(value) {\\n var prettyPrinter = new PrettyPrinter();\\n prettyPrinter.format(value);\\n return prettyPrinter.stringParts.join('');\\n };\\n};\\n\\ngetJasmineRequireObj().QueueRunner = function(j$) {\\n function StopExecutionError() {}\\n StopExecutionError.prototype = new Error();\\n j$.StopExecutionError = StopExecutionError;\\n\\n function once(fn) {\\n var called = false;\\n return function(arg) {\\n if (!called) {\\n called = true;\\n // Direct call using single parameter, because cleanup/next does not need more\\n fn(arg);\\n }\\n return null;\\n };\\n }\\n\\n function emptyFn() {}\\n\\n function QueueRunner(attrs) {\\n var queueableFns = attrs.queueableFns || [];\\n this.queueableFns = queueableFns.concat(attrs.cleanupFns || []);\\n this.firstCleanupIx = queueableFns.length;\\n this.onComplete = attrs.onComplete || emptyFn;\\n this.clearStack = attrs.clearStack || function(fn) {fn();};\\n this.onException = attrs.onException || emptyFn;\\n this.userContext = attrs.userContext || new j$.UserContext();\\n this.timeout = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout};\\n this.fail = attrs.fail || emptyFn;\\n this.globalErrors = attrs.globalErrors || { pushListener: emptyFn, popListener: emptyFn };\\n this.completeOnFirstError = !!attrs.completeOnFirstError;\\n this.errored = false;\\n\\n if (typeof(this.onComplete) !== 'function') {\\n throw new Error('invalid onComplete ' + JSON.stringify(this.onComplete));\\n }\\n this.deprecated = attrs.deprecated;\\n }\\n\\n QueueRunner.prototype.execute = function() {\\n var self = this;\\n this.handleFinalError = function(error) {\\n self.onException(error);\\n };\\n this.globalErrors.pushListener(this.handleFinalError);\\n this.run(0);\\n };\\n\\n QueueRunner.prototype.skipToCleanup = function(lastRanIndex) {\\n if (lastRanIndex < this.firstCleanupIx) {\\n this.run(this.firstCleanupIx);\\n } else {\\n this.run(lastRanIndex + 1);\\n }\\n };\\n\\n QueueRunner.prototype.clearTimeout = function(timeoutId) {\\n Function.prototype.apply.apply(this.timeout.clearTimeout, [j$.getGlobal(), [timeoutId]]);\\n };\\n\\n QueueRunner.prototype.setTimeout = function(fn, timeout) {\\n return Function.prototype.apply.apply(this.timeout.setTimeout, [j$.getGlobal(), [fn, timeout]]);\\n };\\n\\n QueueRunner.prototype.attempt = function attempt(iterativeIndex) {\\n var self = this, completedSynchronously = true,\\n handleError = function handleError(error) {\\n onException(error);\\n next(error);\\n },\\n cleanup = once(function cleanup() {\\n if (timeoutId !== void 0) {\\n self.clearTimeout(timeoutId);\\n }\\n self.globalErrors.popListener(handleError);\\n }),\\n next = once(function next(err) {\\n cleanup();\\n\\n if (j$.isError_(err)) {\\n if (!(err instanceof StopExecutionError) && !err.jasmineMessage) {\\n self.fail(err);\\n }\\n self.errored = errored = true;\\n }\\n\\n function runNext() {\\n if (self.completeOnFirstError && errored) {\\n self.skipToCleanup(iterativeIndex);\\n } else {\\n self.run(iterativeIndex + 1);\\n }\\n }\\n\\n if (completedSynchronously) {\\n self.setTimeout(runNext);\\n } else {\\n runNext();\\n }\\n }),\\n errored = false,\\n queueableFn = self.queueableFns[iterativeIndex],\\n timeoutId;\\n\\n next.fail = function nextFail() {\\n self.fail.apply(null, arguments);\\n self.errored = errored = true;\\n next();\\n };\\n\\n self.globalErrors.pushListener(handleError);\\n\\n if (queueableFn.timeout !== undefined) {\\n var timeoutInterval = queueableFn.timeout || j$.DEFAULT_TIMEOUT_INTERVAL;\\n timeoutId = self.setTimeout(function() {\\n var error = new Error(\\n 'Timeout - Async callback was not invoked within ' + timeoutInterval + 'ms ' +\\n (queueableFn.timeout ? '(custom timeout)' : '(set by jasmine.DEFAULT_TIMEOUT_INTERVAL)')\\n );\\n onException(error);\\n next();\\n }, timeoutInterval);\\n }\\n\\n try {\\n if (queueableFn.fn.length === 0) {\\n var maybeThenable = queueableFn.fn.call(self.userContext);\\n\\n if (maybeThenable && j$.isFunction_(maybeThenable.then)) {\\n maybeThenable.then(next, onPromiseRejection);\\n completedSynchronously = false;\\n return { completedSynchronously: false };\\n }\\n } else {\\n queueableFn.fn.call(self.userContext, next);\\n completedSynchronously = false;\\n return { completedSynchronously: false };\\n }\\n } catch (e) {\\n onException(e);\\n self.errored = errored = true;\\n }\\n\\n cleanup();\\n return { completedSynchronously: true, errored: errored };\\n\\n function onException(e) {\\n self.onException(e);\\n self.errored = errored = true;\\n }\\n\\n function onPromiseRejection(e) {\\n onException(e);\\n next();\\n }\\n };\\n\\n QueueRunner.prototype.run = function(recursiveIndex) {\\n var length = this.queueableFns.length,\\n self = this,\\n iterativeIndex;\\n\\n\\n for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) {\\n var result = this.attempt(iterativeIndex);\\n\\n if (!result.completedSynchronously) {\\n return;\\n }\\n\\n self.errored = self.errored || result.errored;\\n\\n if (this.completeOnFirstError && result.errored) {\\n this.skipToCleanup(iterativeIndex);\\n return;\\n }\\n }\\n\\n this.clearStack(function() {\\n self.globalErrors.popListener(self.handleFinalError);\\n self.onComplete(self.errored && new StopExecutionError());\\n });\\n\\n };\\n\\n return QueueRunner;\\n};\\n\\ngetJasmineRequireObj().ReportDispatcher = function(j$) {\\n function ReportDispatcher(methods, queueRunnerFactory) {\\n\\n var dispatchedMethods = methods || [];\\n\\n for (var i = 0; i < dispatchedMethods.length; i++) {\\n var method = dispatchedMethods[i];\\n this[method] = (function(m) {\\n return function() {\\n dispatch(m, arguments);\\n };\\n }(method));\\n }\\n\\n var reporters = [];\\n var fallbackReporter = null;\\n\\n this.addReporter = function(reporter) {\\n reporters.push(reporter);\\n };\\n\\n this.provideFallbackReporter = function(reporter) {\\n fallbackReporter = reporter;\\n };\\n\\n this.clearReporters = function() {\\n reporters = [];\\n };\\n\\n return this;\\n\\n function dispatch(method, args) {\\n if (reporters.length === 0 && fallbackReporter !== null) {\\n reporters.push(fallbackReporter);\\n }\\n var onComplete = args[args.length - 1];\\n args = j$.util.argsToArray(args).splice(0, args.length - 1);\\n var fns = [];\\n for (var i = 0; i < reporters.length; i++) {\\n var reporter = reporters[i];\\n addFn(fns, reporter, method, args);\\n }\\n\\n queueRunnerFactory({\\n queueableFns: fns,\\n onComplete: onComplete,\\n isReporter: true\\n });\\n }\\n\\n function addFn(fns, reporter, method, args) {\\n var fn = reporter[method];\\n if (!fn) {\\n return;\\n }\\n\\n var thisArgs = j$.util.cloneArgs(args);\\n if (fn.length <= 1) {\\n fns.push({\\n fn: function () {\\n return fn.apply(reporter, thisArgs);\\n }\\n });\\n } else {\\n fns.push({\\n fn: function (done) {\\n return fn.apply(reporter, thisArgs.concat([done]));\\n }\\n });\\n }\\n }\\n }\\n\\n return ReportDispatcher;\\n};\\n\\n\\ngetJasmineRequireObj().interface = function(jasmine, env) {\\n var jasmineInterface = {\\n /**\\n * Callback passed to parts of the Jasmine base interface.\\n *\\n * By default Jasmine assumes this function completes synchronously.\\n * If you have code that you need to test asynchronously, you can declare that you receive a `done` callback, return a Promise, or use the `async` keyword if it is supported in your environment.\\n * @callback implementationCallback\\n * @param {Function} [done] Used to specify to Jasmine that this callback is asynchronous and Jasmine should wait until it has been called before moving on.\\n * @returns {} Optionally return a Promise instead of using `done` to cause Jasmine to wait for completion.\\n */\\n\\n /**\\n * Create a group of specs (often called a suite).\\n *\\n * Calls to `describe` can be nested within other calls to compose your suite as a tree.\\n * @name describe\\n * @function\\n * @global\\n * @param {String} description Textual description of the group\\n * @param {Function} specDefinitions Function for Jasmine to invoke that will define inner suites and specs\\n */\\n describe: function(description, specDefinitions) {\\n return env.describe(description, specDefinitions);\\n },\\n\\n /**\\n * A temporarily disabled [`describe`]{@link describe}\\n *\\n * Specs within an `xdescribe` will be marked pending and not executed\\n * @name xdescribe\\n * @function\\n * @global\\n * @param {String} description Textual description of the group\\n * @param {Function} specDefinitions Function for Jasmine to invoke that will define inner suites and specs\\n */\\n xdescribe: function(description, specDefinitions) {\\n return env.xdescribe(description, specDefinitions);\\n },\\n\\n /**\\n * A focused [`describe`]{@link describe}\\n *\\n * If suites or specs are focused, only those that are focused will be executed\\n * @see fit\\n * @name fdescribe\\n * @function\\n * @global\\n * @param {String} description Textual description of the group\\n * @param {Function} specDefinitions Function for Jasmine to invoke that will define inner suites and specs\\n */\\n fdescribe: function(description, specDefinitions) {\\n return env.fdescribe(description, specDefinitions);\\n },\\n\\n /**\\n * Define a single spec. A spec should contain one or more {@link expect|expectations} that test the state of the code.\\n *\\n * A spec whose expectations all succeed will be passing and a spec with any failures will fail.\\n * @name it\\n * @function\\n * @global\\n * @param {String} description Textual description of what this spec is checking\\n * @param {implementationCallback} [testFunction] Function that contains the code of your test. If not provided the test will be `pending`.\\n * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async spec.\\n * @see async\\n */\\n it: function() {\\n return env.it.apply(env, arguments);\\n },\\n\\n /**\\n * A temporarily disabled [`it`]{@link it}\\n *\\n * The spec will report as `pending` and will not be executed.\\n * @name xit\\n * @function\\n * @global\\n * @param {String} description Textual description of what this spec is checking.\\n * @param {implementationCallback} [testFunction] Function that contains the code of your test. Will not be executed.\\n */\\n xit: function() {\\n return env.xit.apply(env, arguments);\\n },\\n\\n /**\\n * A focused [`it`]{@link it}\\n *\\n * If suites or specs are focused, only those that are focused will be executed.\\n * @name fit\\n * @function\\n * @global\\n * @param {String} description Textual description of what this spec is checking.\\n * @param {implementationCallback} testFunction Function that contains the code of your test.\\n * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async spec.\\n * @see async\\n */\\n fit: function() {\\n return env.fit.apply(env, arguments);\\n },\\n\\n /**\\n * Run some shared setup before each of the specs in the {@link describe} in which it is called.\\n * @name beforeEach\\n * @function\\n * @global\\n * @param {implementationCallback} [function] Function that contains the code to setup your specs.\\n * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async beforeEach.\\n * @see async\\n */\\n beforeEach: function() {\\n return env.beforeEach.apply(env, arguments);\\n },\\n\\n /**\\n * Run some shared teardown after each of the specs in the {@link describe} in which it is called.\\n * @name afterEach\\n * @function\\n * @global\\n * @param {implementationCallback} [function] Function that contains the code to teardown your specs.\\n * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async afterEach.\\n * @see async\\n */\\n afterEach: function() {\\n return env.afterEach.apply(env, arguments);\\n },\\n\\n /**\\n * Run some shared setup once before all of the specs in the {@link describe} are run.\\n *\\n * _Note:_ Be careful, sharing the setup from a beforeAll makes it easy to accidentally leak state between your specs so that they erroneously pass or fail.\\n * @name beforeAll\\n * @function\\n * @global\\n * @param {implementationCallback} [function] Function that contains the code to setup your specs.\\n * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async beforeAll.\\n * @see async\\n */\\n beforeAll: function() {\\n return env.beforeAll.apply(env, arguments);\\n },\\n\\n /**\\n * Run some shared teardown once after all of the specs in the {@link describe} are run.\\n *\\n * _Note:_ Be careful, sharing the teardown from a afterAll makes it easy to accidentally leak state between your specs so that they erroneously pass or fail.\\n * @name afterAll\\n * @function\\n * @global\\n * @param {implementationCallback} [function] Function that contains the code to teardown your specs.\\n * @param {Int} [timeout={@link jasmine.DEFAULT_TIMEOUT_INTERVAL}] Custom timeout for an async afterAll.\\n * @see async\\n */\\n afterAll: function() {\\n return env.afterAll.apply(env, arguments);\\n },\\n\\n /**\\n * Create an expectation for a spec.\\n * @name expect\\n * @function\\n * @global\\n * @param {Object} actual - Actual computed value to test expectations against.\\n * @return {matchers}\\n */\\n expect: function(actual) {\\n return env.expect(actual);\\n },\\n\\n /**\\n * Create an asynchronous expectation for a spec. Note that the matchers\\n * that are provided by an asynchronous expectation all return promises\\n * which must be either returned from the spec or waited for using `await`\\n * in order for Jasmine to associate them with the correct spec.\\n * @name expectAsync\\n * @function\\n * @global\\n * @param {Object} actual - Actual computed value to test expectations against.\\n * @return {async-matchers}\\n * @example\\n * await expectAsync(somePromise).toBeResolved();\\n * @example\\n * return expectAsync(somePromise).toBeResolved();\\n */\\n expectAsync: function(actual) {\\n return env.expectAsync(actual);\\n },\\n\\n /**\\n * Mark a spec as pending, expectation results will be ignored.\\n * @name pending\\n * @function\\n * @global\\n * @param {String} [message] - Reason the spec is pending.\\n */\\n pending: function() {\\n return env.pending.apply(env, arguments);\\n },\\n\\n /**\\n * Explicitly mark a spec as failed.\\n * @name fail\\n * @function\\n * @global\\n * @param {String|Error} [error] - Reason for the failure.\\n */\\n fail: function() {\\n return env.fail.apply(env, arguments);\\n },\\n\\n /**\\n * Install a spy onto an existing object.\\n * @name spyOn\\n * @function\\n * @global\\n * @param {Object} obj - The object upon which to install the {@link Spy}.\\n * @param {String} methodName - The name of the method to replace with a {@link Spy}.\\n * @returns {Spy}\\n */\\n spyOn: function(obj, methodName) {\\n return env.spyOn(obj, methodName);\\n },\\n\\n /**\\n * Install a spy on a property installed with `Object.defineProperty` onto an existing object.\\n * @name spyOnProperty\\n * @function\\n * @global\\n * @param {Object} obj - The object upon which to install the {@link Spy}\\n * @param {String} propertyName - The name of the property to replace with a {@link Spy}.\\n * @param {String} [accessType=get] - The access type (get|set) of the property to {@link Spy} on.\\n * @returns {Spy}\\n */\\n spyOnProperty: function(obj, methodName, accessType) {\\n return env.spyOnProperty(obj, methodName, accessType);\\n },\\n\\n /**\\n * Installs spies on all writable and configurable properties of an object.\\n * @name spyOnAllFunctions\\n * @function\\n * @global\\n * @param {Object} obj - The object upon which to install the {@link Spy}s\\n * @returns {Object} the spied object\\n */\\n spyOnAllFunctions: function(obj) {\\n return env.spyOnAllFunctions(obj);\\n },\\n\\n jsApiReporter: new jasmine.JsApiReporter({\\n timer: new jasmine.Timer()\\n }),\\n\\n /**\\n * @namespace jasmine\\n */\\n jasmine: jasmine\\n };\\n\\n /**\\n * Add a custom equality tester for the current scope of specs.\\n *\\n * _Note:_ This is only callable from within a {@link beforeEach}, {@link it}, or {@link beforeAll}.\\n * @name jasmine.addCustomEqualityTester\\n * @function\\n * @param {Function} tester - A function which takes two arguments to compare and returns a `true` or `false` comparison result if it knows how to compare them, and `undefined` otherwise.\\n * @see custom_equality\\n */\\n jasmine.addCustomEqualityTester = function(tester) {\\n env.addCustomEqualityTester(tester);\\n };\\n\\n /**\\n * Add custom matchers for the current scope of specs.\\n *\\n * _Note:_ This is only callable from within a {@link beforeEach}, {@link it}, or {@link beforeAll}.\\n * @name jasmine.addMatchers\\n * @function\\n * @param {Object} matchers - Keys from this object will be the new matcher names.\\n * @see custom_matcher\\n */\\n jasmine.addMatchers = function(matchers) {\\n return env.addMatchers(matchers);\\n };\\n\\n /**\\n * Get the currently booted mock {Clock} for this Jasmine environment.\\n * @name jasmine.clock\\n * @function\\n * @returns {Clock}\\n */\\n jasmine.clock = function() {\\n return env.clock;\\n };\\n\\n /**\\n * Create a bare {@link Spy} object. This won't be installed anywhere and will not have any implementation behind it.\\n * @name jasmine.createSpy\\n * @function\\n * @param {String} [name] - Name to give the spy. This will be displayed in failure messages.\\n * @param {Function} [originalFn] - Function to act as the real implementation.\\n * @return {Spy}\\n */\\n jasmine.createSpy = function(name, originalFn) {\\n return env.createSpy(name, originalFn);\\n };\\n\\n /**\\n * Create an object with multiple {@link Spy}s as its members.\\n * @name jasmine.createSpyObj\\n * @function\\n * @param {String} [baseName] - Base name for the spies in the object.\\n * @param {String[]|Object} methodNames - Array of method names to create spies for, or Object whose keys will be method names and values the {@link Spy#and#returnValue|returnValue}.\\n * @return {Object}\\n */\\n jasmine.createSpyObj = function(baseName, methodNames) {\\n return env.createSpyObj(baseName, methodNames);\\n };\\n\\n /**\\n * Add a custom spy strategy for the current scope of specs.\\n *\\n * _Note:_ This is only callable from within a {@link beforeEach}, {@link it}, or {@link beforeAll}.\\n * @name jasmine.addSpyStrategy\\n * @function\\n * @param {String} name - The name of the strategy (i.e. what you call from `and`)\\n * @param {Function} factory - Factory function that returns the plan to be executed.\\n */\\n jasmine.addSpyStrategy = function(name, factory) {\\n return env.addSpyStrategy(name, factory);\\n };\\n\\n return jasmineInterface;\\n};\\n\\ngetJasmineRequireObj().Spy = function (j$) {\\n\\n var nextOrder = (function() {\\n var order = 0;\\n\\n return function() {\\n return order++;\\n };\\n })();\\n\\n /**\\n * _Note:_ Do not construct this directly, use {@link spyOn}, {@link spyOnProperty}, {@link jasmine.createSpy}, or {@link jasmine.createSpyObj}\\n * @constructor\\n * @name Spy\\n */\\n function Spy(name, originalFn, customStrategies) {\\n var numArgs = (typeof originalFn === 'function' ? originalFn.length : 0),\\n wrapper = makeFunc(numArgs, function () {\\n return spy.apply(this, Array.prototype.slice.call(arguments));\\n }),\\n strategyDispatcher = new SpyStrategyDispatcher({\\n name: name,\\n fn: originalFn,\\n getSpy: function () {\\n return wrapper;\\n },\\n customStrategies: customStrategies\\n }),\\n callTracker = new j$.CallTracker(),\\n spy = function () {\\n /**\\n * @name Spy.callData\\n * @property {object} object - `this` context for the invocation.\\n * @property {number} invocationOrder - Order of the invocation.\\n * @property {Array} args - The arguments passed for this invocation.\\n */\\n var callData = {\\n object: this,\\n invocationOrder: nextOrder(),\\n args: Array.prototype.slice.apply(arguments)\\n };\\n\\n callTracker.track(callData);\\n var returnValue = strategyDispatcher.exec(this, arguments);\\n callData.returnValue = returnValue;\\n\\n return returnValue;\\n };\\n\\n function makeFunc(length, fn) {\\n switch (length) {\\n case 1 : return function (a) { return fn.apply(this, arguments); };\\n case 2 : return function (a,b) { return fn.apply(this, arguments); };\\n case 3 : return function (a,b,c) { return fn.apply(this, arguments); };\\n case 4 : return function (a,b,c,d) { return fn.apply(this, arguments); };\\n case 5 : return function (a,b,c,d,e) { return fn.apply(this, arguments); };\\n case 6 : return function (a,b,c,d,e,f) { return fn.apply(this, arguments); };\\n case 7 : return function (a,b,c,d,e,f,g) { return fn.apply(this, arguments); };\\n case 8 : return function (a,b,c,d,e,f,g,h) { return fn.apply(this, arguments); };\\n case 9 : return function (a,b,c,d,e,f,g,h,i) { return fn.apply(this, arguments); };\\n default : return function () { return fn.apply(this, arguments); };\\n }\\n }\\n\\n for (var prop in originalFn) {\\n if (prop === 'and' || prop === 'calls') {\\n throw new Error('Jasmine spies would overwrite the \\\\'and\\\\' and \\\\'calls\\\\' properties on the object being spied upon');\\n }\\n\\n wrapper[prop] = originalFn[prop];\\n }\\n\\n /**\\n * @member {SpyStrategy} - Accesses the default strategy for the spy. This strategy will be used\\n * whenever the spy is called with arguments that don't match any strategy\\n * created with {@link Spy#withArgs}.\\n * @name Spy#and\\n * @example\\n * spyOn(someObj, 'func').and.returnValue(42);\\n */\\n wrapper.and = strategyDispatcher.and;\\n /**\\n * Specifies a strategy to be used for calls to the spy that have the\\n * specified arguments.\\n * @name Spy#withArgs\\n * @function\\n * @param {...*} args - The arguments to match\\n * @type {SpyStrategy}\\n * @example\\n * spyOn(someObj, 'func').withArgs(1, 2, 3).and.returnValue(42);\\n * someObj.func(1, 2, 3); // returns 42\\n */\\n wrapper.withArgs = function() {\\n return strategyDispatcher.withArgs.apply(strategyDispatcher, arguments);\\n };\\n wrapper.calls = callTracker;\\n\\n return wrapper;\\n }\\n\\n\\n function SpyStrategyDispatcher(strategyArgs) {\\n var baseStrategy = new j$.SpyStrategy(strategyArgs);\\n var argsStrategies = new StrategyDict(function() {\\n return new j$.SpyStrategy(strategyArgs);\\n });\\n\\n this.and = baseStrategy;\\n\\n this.exec = function(spy, args) {\\n var strategy = argsStrategies.get(args);\\n\\n if (!strategy) {\\n if (argsStrategies.any() && !baseStrategy.isConfigured()) {\\n throw new Error('Spy \\\\'' + strategyArgs.name + '\\\\' received a call with arguments ' + j$.pp(Array.prototype.slice.call(args)) + ' but all configured strategies specify other arguments.');\\n } else {\\n strategy = baseStrategy;\\n }\\n }\\n\\n return strategy.exec(spy, args);\\n };\\n\\n this.withArgs = function() {\\n return { and: argsStrategies.getOrCreate(arguments) };\\n };\\n }\\n\\n function StrategyDict(strategyFactory) {\\n this.strategies = [];\\n this.strategyFactory = strategyFactory;\\n }\\n\\n StrategyDict.prototype.any = function() {\\n return this.strategies.length > 0;\\n };\\n\\n StrategyDict.prototype.getOrCreate = function(args) {\\n var strategy = this.get(args);\\n\\n if (!strategy) {\\n strategy = this.strategyFactory();\\n this.strategies.push({\\n args: args,\\n strategy: strategy\\n });\\n }\\n\\n return strategy;\\n };\\n\\n StrategyDict.prototype.get = function(args) {\\n var i;\\n\\n for (i = 0; i < this.strategies.length; i++) {\\n if (j$.matchersUtil.equals(args, this.strategies[i].args)) {\\n return this.strategies[i].strategy;\\n }\\n }\\n };\\n\\n return Spy;\\n};\\n\\ngetJasmineRequireObj().SpyFactory = function(j$) {\\n\\n function SpyFactory(getCustomStrategies) {\\n var self = this;\\n\\n this.createSpy = function(name, originalFn) {\\n return j$.Spy(name, originalFn, getCustomStrategies());\\n };\\n\\n this.createSpyObj = function(baseName, methodNames) {\\n var baseNameIsCollection = j$.isObject_(baseName) || j$.isArray_(baseName);\\n\\n if (baseNameIsCollection && j$.util.isUndefined(methodNames)) {\\n methodNames = baseName;\\n baseName = 'unknown';\\n }\\n\\n var obj = {};\\n var spiesWereSet = false;\\n\\n if (j$.isArray_(methodNames)) {\\n for (var i = 0; i < methodNames.length; i++) {\\n obj[methodNames[i]] = self.createSpy(baseName + '.' + methodNames[i]);\\n spiesWereSet = true;\\n }\\n } else if (j$.isObject_(methodNames)) {\\n for (var key in methodNames) {\\n if (methodNames.hasOwnProperty(key)) {\\n obj[key] = self.createSpy(baseName + '.' + key);\\n obj[key].and.returnValue(methodNames[key]);\\n spiesWereSet = true;\\n }\\n }\\n }\\n\\n if (!spiesWereSet) {\\n throw 'createSpyObj requires a non-empty array or object of method names to create spies for';\\n }\\n\\n return obj;\\n };\\n }\\n\\n return SpyFactory;\\n};\\n\\ngetJasmineRequireObj().SpyRegistry = function(j$) {\\n\\n var getErrorMsg = j$.formatErrorMsg('<spyOn>', 'spyOn(<object>, <methodName>)');\\n\\n function SpyRegistry(options) {\\n options = options || {};\\n var global = options.global || j$.getGlobal();\\n var createSpy = options.createSpy;\\n var currentSpies = options.currentSpies || function() { return []; };\\n\\n this.allowRespy = function(allow){\\n this.respy = allow;\\n };\\n\\n this.spyOn = function(obj, methodName) {\\n\\n if (j$.util.isUndefined(obj) || obj === null) {\\n throw new Error(getErrorMsg('could not find an object to spy upon for ' + methodName + '()'));\\n }\\n\\n if (j$.util.isUndefined(methodName) || methodName === null) {\\n throw new Error(getErrorMsg('No method name supplied'));\\n }\\n\\n if (j$.util.isUndefined(obj[methodName])) {\\n throw new Error(getErrorMsg(methodName + '() method does not exist'));\\n }\\n\\n if (obj[methodName] && j$.isSpy(obj[methodName]) ) {\\n if ( !!this.respy ){\\n return obj[methodName];\\n }else {\\n throw new Error(getErrorMsg(methodName + ' has already been spied upon'));\\n }\\n }\\n\\n var descriptor = Object.getOwnPropertyDescriptor(obj, methodName);\\n\\n if (descriptor && !(descriptor.writable || descriptor.set)) {\\n throw new Error(getErrorMsg(methodName + ' is not declared writable or has no setter'));\\n }\\n\\n var originalMethod = obj[methodName],\\n spiedMethod = createSpy(methodName, originalMethod),\\n restoreStrategy;\\n\\n if (Object.prototype.hasOwnProperty.call(obj, methodName) || (obj === global && methodName === 'onerror')) {\\n restoreStrategy = function() {\\n obj[methodName] = originalMethod;\\n };\\n } else {\\n restoreStrategy = function() {\\n if (!delete obj[methodName]) {\\n obj[methodName] = originalMethod;\\n }\\n };\\n }\\n\\n currentSpies().push({\\n restoreObjectToOriginalState: restoreStrategy\\n });\\n\\n obj[methodName] = spiedMethod;\\n\\n return spiedMethod;\\n };\\n\\n this.spyOnProperty = function (obj, propertyName, accessType) {\\n accessType = accessType || 'get';\\n\\n if (j$.util.isUndefined(obj)) {\\n throw new Error('spyOn could not find an object to spy upon for ' + propertyName + '');\\n }\\n\\n if (j$.util.isUndefined(propertyName)) {\\n throw new Error('No property name supplied');\\n }\\n\\n var descriptor = j$.util.getPropertyDescriptor(obj, propertyName);\\n\\n if (!descriptor) {\\n throw new Error(propertyName + ' property does not exist');\\n }\\n\\n if (!descriptor.configurable) {\\n throw new Error(propertyName + ' is not declared configurable');\\n }\\n\\n if(!descriptor[accessType]) {\\n throw new Error('Property ' + propertyName + ' does not have access type ' + accessType);\\n }\\n\\n if (j$.isSpy(descriptor[accessType])) {\\n //TODO?: should this return the current spy? Downside: may cause user confusion about spy state\\n throw new Error(propertyName + ' has already been spied upon');\\n }\\n\\n var originalDescriptor = j$.util.clone(descriptor),\\n spy = createSpy(propertyName, descriptor[accessType]),\\n restoreStrategy;\\n\\n if (Object.prototype.hasOwnProperty.call(obj, propertyName)) {\\n restoreStrategy = function() {\\n Object.defineProperty(obj, propertyName, originalDescriptor);\\n };\\n } else {\\n restoreStrategy = function() {\\n delete obj[propertyName];\\n };\\n }\\n\\n currentSpies().push({\\n restoreObjectToOriginalState: restoreStrategy\\n });\\n\\n descriptor[accessType] = spy;\\n\\n Object.defineProperty(obj, propertyName, descriptor);\\n\\n return spy;\\n };\\n\\n this.spyOnAllFunctions = function(obj) {\\n if (j$.util.isUndefined(obj)) {\\n throw new Error('spyOnAllFunctions could not find an object to spy upon');\\n }\\n\\n for (var prop in obj) {\\n if (Object.prototype.hasOwnProperty.call(obj, prop) && obj[prop] instanceof Function) {\\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\\n if ((descriptor.writable || descriptor.set) && descriptor.configurable) {\\n this.spyOn(obj, prop);\\n }\\n }\\n }\\n\\n return obj;\\n };\\n\\n this.clearSpies = function() {\\n var spies = currentSpies();\\n for (var i = spies.length - 1; i >= 0; i--) {\\n var spyEntry = spies[i];\\n spyEntry.restoreObjectToOriginalState();\\n }\\n };\\n }\\n\\n return SpyRegistry;\\n};\\n\\ngetJasmineRequireObj().SpyStrategy = function(j$) {\\n\\n /**\\n * @interface SpyStrategy\\n */\\n function SpyStrategy(options) {\\n options = options || {};\\n\\n /**\\n * Get the identifying information for the spy.\\n * @name SpyStrategy#identity\\n * @member\\n * @type {String}\\n */\\n this.identity = options.name || 'unknown';\\n this.originalFn = options.fn || function() {};\\n this.getSpy = options.getSpy || function() {};\\n this.plan = this._defaultPlan = function() {};\\n\\n var k, cs = options.customStrategies || {};\\n for (k in cs) {\\n if (j$.util.has(cs, k) && !this[k]) {\\n this[k] = createCustomPlan(cs[k]);\\n }\\n }\\n }\\n\\n function createCustomPlan(factory) {\\n return function() {\\n var plan = factory.apply(null, arguments);\\n\\n if (!j$.isFunction_(plan)) {\\n throw new Error('Spy strategy must return a function');\\n }\\n\\n this.plan = plan;\\n return this.getSpy();\\n };\\n }\\n\\n /**\\n * Execute the current spy strategy.\\n * @name SpyStrategy#exec\\n * @function\\n */\\n SpyStrategy.prototype.exec = function(context, args) {\\n return this.plan.apply(context, args);\\n };\\n\\n /**\\n * Tell the spy to call through to the real implementation when invoked.\\n * @name SpyStrategy#callThrough\\n * @function\\n */\\n SpyStrategy.prototype.callThrough = function() {\\n this.plan = this.originalFn;\\n return this.getSpy();\\n };\\n\\n /**\\n * Tell the spy to return the value when invoked.\\n * @name SpyStrategy#returnValue\\n * @function\\n * @param {*} value The value to return.\\n */\\n SpyStrategy.prototype.returnValue = function(value) {\\n this.plan = function() {\\n return value;\\n };\\n return this.getSpy();\\n };\\n\\n /**\\n * Tell the spy to return one of the specified values (sequentially) each time the spy is invoked.\\n * @name SpyStrategy#returnValues\\n * @function\\n * @param {...*} values - Values to be returned on subsequent calls to the spy.\\n */\\n SpyStrategy.prototype.returnValues = function() {\\n var values = Array.prototype.slice.call(arguments);\\n this.plan = function () {\\n return values.shift();\\n };\\n return this.getSpy();\\n };\\n\\n /**\\n * Tell the spy to throw an error when invoked.\\n * @name SpyStrategy#throwError\\n * @function\\n * @param {Error|String} something Thing to throw\\n */\\n SpyStrategy.prototype.throwError = function(something) {\\n var error = (something instanceof Error) ? something : new Error(something);\\n this.plan = function() {\\n throw error;\\n };\\n return this.getSpy();\\n };\\n\\n /**\\n * Tell the spy to call a fake implementation when invoked.\\n * @name SpyStrategy#callFake\\n * @function\\n * @param {Function} fn The function to invoke with the passed parameters.\\n */\\n SpyStrategy.prototype.callFake = function(fn) {\\n if(!(j$.isFunction_(fn) || j$.isAsyncFunction_(fn))) {\\n throw new Error('Argument passed to callFake should be a function, got ' + fn);\\n }\\n this.plan = fn;\\n return this.getSpy();\\n };\\n\\n /**\\n * Tell the spy to do nothing when invoked. This is the default.\\n * @name SpyStrategy#stub\\n * @function\\n */\\n SpyStrategy.prototype.stub = function(fn) {\\n this.plan = function() {};\\n return this.getSpy();\\n };\\n\\n SpyStrategy.prototype.isConfigured = function() {\\n return this.plan !== this._defaultPlan;\\n };\\n\\n return SpyStrategy;\\n};\\n\\ngetJasmineRequireObj().StackTrace = function(j$) {\\n function StackTrace(error) {\\n var lines = error.stack\\n .split('\\\\n')\\n .filter(function(line) { return line !== ''; });\\n\\n var extractResult = extractMessage(error.message, lines);\\n\\n if (extractResult) {\\n this.message = extractResult.message;\\n lines = extractResult.remainder;\\n }\\n\\n var parseResult = tryParseFrames(lines);\\n this.frames = parseResult.frames;\\n this.style = parseResult.style;\\n }\\n\\n var framePatterns = [\\n // PhantomJS on Linux, Node, Chrome, IE, Edge\\n // e.g. \\\" at QueueRunner.run (http://localhost:8888/__jasmine__/jasmine.js:4320:20)\\\"\\n // Note that the \\\"function name\\\" can include a surprisingly large set of\\n // characters, including angle brackets and square brackets.\\n { re: /^\\\\s*at ([^\\\\)]+) \\\\(([^\\\\)]+)\\\\)$/, fnIx: 1, fileLineColIx: 2, style: 'v8' },\\n\\n // NodeJS alternate form, often mixed in with the Chrome style\\n // e.g. \\\" at /some/path:4320:20\\n { re: /\\\\s*at (.+)$/, fileLineColIx: 1, style: 'v8' },\\n\\n // PhantomJS on OS X, Safari, Firefox\\n // e.g. \\\"run@http://localhost:8888/__jasmine__/jasmine.js:4320:27\\\"\\n // or \\\"http://localhost:8888/__jasmine__/jasmine.js:4320:27\\\"\\n { re: /^(([^@\\\\s]+)@)?([^\\\\s]+)$/, fnIx: 2, fileLineColIx: 3, style: 'webkit' }\\n ];\\n\\n // regexes should capture the function name (if any) as group 1\\n // and the file, line, and column as group 2.\\n function tryParseFrames(lines) {\\n var style = null;\\n var frames = lines.map(function(line) {\\n var convertedLine = first(framePatterns, function(pattern) {\\n var overallMatch = line.match(pattern.re),\\n fileLineColMatch;\\n if (!overallMatch) { return null; }\\n\\n fileLineColMatch = overallMatch[pattern.fileLineColIx].match(\\n /^(.*):(\\\\d+):\\\\d+$/);\\n if (!fileLineColMatch) { return null; }\\n\\n style = style || pattern.style;\\n return {\\n raw: line,\\n file: fileLineColMatch[1],\\n line: parseInt(fileLineColMatch[2], 10),\\n func: overallMatch[pattern.fnIx]\\n };\\n });\\n\\n return convertedLine || { raw: line };\\n });\\n\\n return {\\n style: style,\\n frames: frames\\n };\\n }\\n\\n function first(items, fn) {\\n var i, result;\\n\\n for (i = 0; i < items.length; i++) {\\n result = fn(items[i]);\\n\\n if (result) {\\n return result;\\n }\\n }\\n }\\n\\n function extractMessage(message, stackLines) {\\n var len = messagePrefixLength(message, stackLines);\\n\\n if (len > 0) {\\n return {\\n message: stackLines.slice(0, len).join('\\\\n'),\\n remainder: stackLines.slice(len)\\n };\\n }\\n }\\n\\n function messagePrefixLength(message, stackLines) {\\n if (!stackLines[0].match(/^Error/)) {\\n return 0;\\n }\\n\\n var messageLines = message.split('\\\\n');\\n var i;\\n\\n for (i = 1; i < messageLines.length; i++) {\\n if (messageLines[i] !== stackLines[i]) {\\n return 0;\\n }\\n }\\n\\n return messageLines.length;\\n }\\n\\n return StackTrace;\\n};\\n\\ngetJasmineRequireObj().Suite = function(j$) {\\n function Suite(attrs) {\\n this.env = attrs.env;\\n this.id = attrs.id;\\n this.parentSuite = attrs.parentSuite;\\n this.description = attrs.description;\\n this.expectationFactory = attrs.expectationFactory;\\n this.asyncExpectationFactory = attrs.asyncExpectationFactory;\\n this.expectationResultFactory = attrs.expectationResultFactory;\\n this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure;\\n\\n this.beforeFns = [];\\n this.afterFns = [];\\n this.beforeAllFns = [];\\n this.afterAllFns = [];\\n\\n this.timer = attrs.timer || j$.noopTimer;\\n\\n this.children = [];\\n\\n /**\\n * @typedef SuiteResult\\n * @property {Int} id - The unique id of this suite.\\n * @property {String} description - The description text passed to the {@link describe} that made this suite.\\n * @property {String} fullName - The full description including all ancestors of this suite.\\n * @property {Expectation[]} failedExpectations - The list of expectations that failed in an {@link afterAll} for this suite.\\n * @property {Expectation[]} deprecationWarnings - The list of deprecation warnings that occurred on this suite.\\n * @property {String} status - Once the suite has completed, this string represents the pass/fail status of this suite.\\n * @property {number} duration - The time in ms for Suite execution, including any before/afterAll, before/afterEach.\\n */\\n this.result = {\\n id: this.id,\\n description: this.description,\\n fullName: this.getFullName(),\\n failedExpectations: [],\\n deprecationWarnings: [],\\n duration: null,\\n };\\n }\\n\\n Suite.prototype.expect = function(actual) {\\n return this.expectationFactory(actual, this);\\n };\\n\\n Suite.prototype.expectAsync = function(actual) {\\n return this.asyncExpectationFactory(actual, this);\\n };\\n\\n Suite.prototype.getFullName = function() {\\n var fullName = [];\\n for (var parentSuite = this; parentSuite; parentSuite = parentSuite.parentSuite) {\\n if (parentSuite.parentSuite) {\\n fullName.unshift(parentSuite.description);\\n }\\n }\\n return fullName.join(' ');\\n };\\n\\n Suite.prototype.pend = function() {\\n this.markedPending = true;\\n };\\n\\n Suite.prototype.beforeEach = function(fn) {\\n this.beforeFns.unshift(fn);\\n };\\n\\n Suite.prototype.beforeAll = function(fn) {\\n this.beforeAllFns.push(fn);\\n };\\n\\n Suite.prototype.afterEach = function(fn) {\\n this.afterFns.unshift(fn);\\n };\\n\\n Suite.prototype.afterAll = function(fn) {\\n this.afterAllFns.unshift(fn);\\n };\\n\\n Suite.prototype.startTimer = function() {\\n this.timer.start();\\n };\\n\\n Suite.prototype.endTimer = function() {\\n this.result.duration = this.timer.elapsed();\\n };\\n\\n function removeFns(queueableFns) {\\n for(var i = 0; i < queueableFns.length; i++) {\\n queueableFns[i].fn = null;\\n }\\n }\\n\\n Suite.prototype.cleanupBeforeAfter = function() {\\n removeFns(this.beforeAllFns);\\n removeFns(this.afterAllFns);\\n removeFns(this.beforeFns);\\n removeFns(this.afterFns);\\n };\\n\\n Suite.prototype.addChild = function(child) {\\n this.children.push(child);\\n };\\n\\n Suite.prototype.status = function() {\\n if (this.markedPending) {\\n return 'pending';\\n }\\n\\n if (this.result.failedExpectations.length > 0) {\\n return 'failed';\\n } else {\\n return 'passed';\\n }\\n };\\n\\n Suite.prototype.canBeReentered = function() {\\n return this.beforeAllFns.length === 0 && this.afterAllFns.length === 0;\\n };\\n\\n Suite.prototype.getResult = function() {\\n this.result.status = this.status();\\n return this.result;\\n };\\n\\n Suite.prototype.sharedUserContext = function() {\\n if (!this.sharedContext) {\\n this.sharedContext = this.parentSuite ? this.parentSuite.clonedSharedUserContext() : new j$.UserContext();\\n }\\n\\n return this.sharedContext;\\n };\\n\\n Suite.prototype.clonedSharedUserContext = function() {\\n return j$.UserContext.fromExisting(this.sharedUserContext());\\n };\\n\\n Suite.prototype.onException = function() {\\n if (arguments[0] instanceof j$.errors.ExpectationFailed) {\\n return;\\n }\\n\\n var data = {\\n matcherName: '',\\n passed: false,\\n expected: '',\\n actual: '',\\n error: arguments[0]\\n };\\n var failedExpectation = this.expectationResultFactory(data);\\n\\n if (!this.parentSuite) {\\n failedExpectation.globalErrorType = 'afterAll';\\n }\\n\\n this.result.failedExpectations.push(failedExpectation);\\n };\\n\\n Suite.prototype.addExpectationResult = function () {\\n if(isFailure(arguments)) {\\n var data = arguments[1];\\n this.result.failedExpectations.push(this.expectationResultFactory(data));\\n if(this.throwOnExpectationFailure) {\\n throw new j$.errors.ExpectationFailed();\\n }\\n }\\n };\\n\\n Suite.prototype.addDeprecationWarning = function(deprecation) {\\n if (typeof deprecation === 'string') {\\n deprecation = { message: deprecation };\\n }\\n this.result.deprecationWarnings.push(this.expectationResultFactory(deprecation));\\n };\\n\\n function isFailure(args) {\\n return !args[0];\\n }\\n\\n return Suite;\\n};\\n\\nif (typeof window == void 0 && typeof exports == 'object') {\\n /* globals exports */\\n exports.Suite = jasmineRequire.Suite;\\n}\\n\\ngetJasmineRequireObj().Timer = function() {\\n var defaultNow = (function(Date) {\\n return function() { return new Date().getTime(); };\\n })(Date);\\n\\n function Timer(options) {\\n options = options || {};\\n\\n var now = options.now || defaultNow,\\n startTime;\\n\\n this.start = function() {\\n startTime = now();\\n };\\n\\n this.elapsed = function() {\\n return now() - startTime;\\n };\\n }\\n\\n return Timer;\\n};\\n\\ngetJasmineRequireObj().noopTimer = function() {\\n return {\\n start: function() {},\\n elapsed: function() { return 0; }\\n };\\n};\\ngetJasmineRequireObj().TreeProcessor = function() {\\n function TreeProcessor(attrs) {\\n var tree = attrs.tree,\\n runnableIds = attrs.runnableIds,\\n queueRunnerFactory = attrs.queueRunnerFactory,\\n nodeStart = attrs.nodeStart || function() {},\\n nodeComplete = attrs.nodeComplete || function() {},\\n orderChildren = attrs.orderChildren || function(node) { return node.children; },\\n excludeNode = attrs.excludeNode || function(node) { return false; },\\n stats = { valid: true },\\n processed = false,\\n defaultMin = Infinity,\\n defaultMax = 1 - Infinity;\\n\\n this.processTree = function() {\\n processNode(tree, true);\\n processed = true;\\n return stats;\\n };\\n\\n this.execute = function(done) {\\n if (!processed) {\\n this.processTree();\\n }\\n\\n if (!stats.valid) {\\n throw 'invalid order';\\n }\\n\\n var childFns = wrapChildren(tree, 0);\\n\\n queueRunnerFactory({\\n queueableFns: childFns,\\n userContext: tree.sharedUserContext(),\\n onException: function() {\\n tree.onException.apply(tree, arguments);\\n },\\n onComplete: done\\n });\\n };\\n\\n function runnableIndex(id) {\\n for (var i = 0; i < runnableIds.length; i++) {\\n if (runnableIds[i] === id) {\\n return i;\\n }\\n }\\n }\\n\\n function processNode(node, parentExcluded) {\\n var executableIndex = runnableIndex(node.id);\\n\\n if (executableIndex !== undefined) {\\n parentExcluded = false;\\n }\\n\\n if (!node.children) {\\n var excluded = parentExcluded || excludeNode(node);\\n stats[node.id] = {\\n excluded: excluded,\\n willExecute: !excluded && !node.markedPending,\\n segments: [{\\n index: 0,\\n owner: node,\\n nodes: [node],\\n min: startingMin(executableIndex),\\n max: startingMax(executableIndex)\\n }]\\n };\\n } else {\\n var hasExecutableChild = false;\\n\\n var orderedChildren = orderChildren(node);\\n\\n for (var i = 0; i < orderedChildren.length; i++) {\\n var child = orderedChildren[i];\\n\\n processNode(child, parentExcluded);\\n\\n if (!stats.valid) {\\n return;\\n }\\n\\n var childStats = stats[child.id];\\n\\n hasExecutableChild = hasExecutableChild || childStats.willExecute;\\n }\\n\\n stats[node.id] = {\\n excluded: parentExcluded,\\n willExecute: hasExecutableChild\\n };\\n\\n segmentChildren(node, orderedChildren, stats[node.id], executableIndex);\\n\\n if (!node.canBeReentered() && stats[node.id].segments.length > 1) {\\n stats = { valid: false };\\n }\\n }\\n }\\n\\n function startingMin(executableIndex) {\\n return executableIndex === undefined ? defaultMin : executableIndex;\\n }\\n\\n function startingMax(executableIndex) {\\n return executableIndex === undefined ? defaultMax : executableIndex;\\n }\\n\\n function segmentChildren(node, orderedChildren, nodeStats, executableIndex) {\\n var currentSegment = { index: 0, owner: node, nodes: [], min: startingMin(executableIndex), max: startingMax(executableIndex) },\\n result = [currentSegment],\\n lastMax = defaultMax,\\n orderedChildSegments = orderChildSegments(orderedChildren);\\n\\n function isSegmentBoundary(minIndex) {\\n return lastMax !== defaultMax && minIndex !== defaultMin && lastMax < minIndex - 1;\\n }\\n\\n for (var i = 0; i < orderedChildSegments.length; i++) {\\n var childSegment = orderedChildSegments[i],\\n maxIndex = childSegment.max,\\n minIndex = childSegment.min;\\n\\n if (isSegmentBoundary(minIndex)) {\\n currentSegment = {index: result.length, owner: node, nodes: [], min: defaultMin, max: defaultMax};\\n result.push(currentSegment);\\n }\\n\\n currentSegment.nodes.push(childSegment);\\n currentSegment.min = Math.min(currentSegment.min, minIndex);\\n currentSegment.max = Math.max(currentSegment.max, maxIndex);\\n lastMax = maxIndex;\\n }\\n\\n nodeStats.segments = result;\\n }\\n\\n function orderChildSegments(children) {\\n var specifiedOrder = [],\\n unspecifiedOrder = [];\\n\\n for (var i = 0; i < children.length; i++) {\\n var child = children[i],\\n segments = stats[child.id].segments;\\n\\n for (var j = 0; j < segments.length; j++) {\\n var seg = segments[j];\\n\\n if (seg.min === defaultMin) {\\n unspecifiedOrder.push(seg);\\n } else {\\n specifiedOrder.push(seg);\\n }\\n }\\n }\\n\\n specifiedOrder.sort(function(a, b) {\\n return a.min - b.min;\\n });\\n\\n return specifiedOrder.concat(unspecifiedOrder);\\n }\\n\\n function executeNode(node, segmentNumber) {\\n if (node.children) {\\n return {\\n fn: function(done) {\\n var onStart = {\\n fn: function(next) {\\n nodeStart(node, next);\\n }\\n };\\n\\n queueRunnerFactory({\\n onComplete: function () {\\n var args = Array.prototype.slice.call(arguments, [0]);\\n node.cleanupBeforeAfter();\\n nodeComplete(node, node.getResult(), function() {\\n done.apply(undefined, args);\\n });\\n },\\n queueableFns: [onStart].concat(wrapChildren(node, segmentNumber)),\\n userContext: node.sharedUserContext(),\\n onException: function () {\\n node.onException.apply(node, arguments);\\n }\\n });\\n }\\n };\\n } else {\\n return {\\n fn: function(done) { node.execute(done, stats[node.id].excluded); }\\n };\\n }\\n }\\n\\n function wrapChildren(node, segmentNumber) {\\n var result = [],\\n segmentChildren = stats[node.id].segments[segmentNumber].nodes;\\n\\n for (var i = 0; i < segmentChildren.length; i++) {\\n result.push(executeNode(segmentChildren[i].owner, segmentChildren[i].index));\\n }\\n\\n if (!stats[node.id].willExecute) {\\n return result;\\n }\\n\\n return node.beforeAllFns.concat(result).concat(node.afterAllFns);\\n }\\n }\\n\\n return TreeProcessor;\\n};\\n\\ngetJasmineRequireObj().UserContext = function(j$) {\\n function UserContext() {\\n }\\n\\n UserContext.fromExisting = function(oldContext) {\\n var context = new UserContext();\\n\\n for (var prop in oldContext) {\\n if (oldContext.hasOwnProperty(prop)) {\\n context[prop] = oldContext[prop];\\n }\\n }\\n\\n return context;\\n };\\n\\n return UserContext;\\n};\\n\\ngetJasmineRequireObj().version = function() {\\n return '3.4.0';\\n};\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/json2.js\": {\n \"text\": \"/*\\n json2.js\\n 2014-02-04\\n\\n Public Domain.\\n\\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\\n\\n See http://www.JSON.org/js.html\\n\\n\\n This code should be minified before deployment.\\n See http://javascript.crockford.com/jsmin.html\\n\\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\\n NOT CONTROL.\\n\\n\\n This file creates a global JSON object containing two methods: stringify\\n and parse.\\n\\n JSON.stringify(value, replacer, space)\\n value any JavaScript value, usually an object or array.\\n\\n replacer an optional parameter that determines how object\\n values are stringified for objects. It can be a\\n function or an array of strings.\\n\\n space an optional parameter that specifies the indentation\\n of nested structures. If it is omitted, the text will\\n be packed without extra whitespace. If it is a number,\\n it will specify the number of spaces to indent at each\\n level. If it is a string (such as '\\\\t' or ' '),\\n it contains the characters used to indent at each level.\\n\\n This method produces a JSON text from a JavaScript value.\\n\\n When an object value is found, if the object contains a toJSON\\n method, its toJSON method will be called and the result will be\\n stringified. A toJSON method does not serialize: it returns the\\n value represented by the name/value pair that should be serialized,\\n or undefined if nothing should be serialized. The toJSON method\\n will be passed the key associated with the value, and this will be\\n bound to the value\\n\\n For example, this would serialize Dates as ISO strings.\\n\\n Date.prototype.toJSON = function (key) {\\n function f(n) {\\n // Format integers to have at least two digits.\\n return n < 10 ? '0' + n : n;\\n }\\n\\n return this.getUTCFullYear() + '-' +\\n f(this.getUTCMonth() + 1) + '-' +\\n f(this.getUTCDate()) + 'T' +\\n f(this.getUTCHours()) + ':' +\\n f(this.getUTCMinutes()) + ':' +\\n f(this.getUTCSeconds()) + 'Z';\\n };\\n\\n You can provide an optional replacer method. It will be passed the\\n key and value of each member, with this bound to the containing\\n object. The value that is returned from your method will be\\n serialized. If your method returns undefined, then the member will\\n be excluded from the serialization.\\n\\n If the replacer parameter is an array of strings, then it will be\\n used to select the members to be serialized. It filters the results\\n such that only members with keys listed in the replacer array are\\n stringified.\\n\\n Values that do not have JSON representations, such as undefined or\\n functions, will not be serialized. Such values in objects will be\\n dropped; in arrays they will be replaced with null. You can use\\n a replacer function to replace those with JSON values.\\n JSON.stringify(undefined) returns undefined.\\n\\n The optional space parameter produces a stringification of the\\n value that is filled with line breaks and indentation to make it\\n easier to read.\\n\\n If the space parameter is a non-empty string, then that string will\\n be used for indentation. If the space parameter is a number, then\\n the indentation will be that many spaces.\\n\\n Example:\\n\\n text = JSON.stringify(['e', {pluribus: 'unum'}]);\\n // text is '[\\\"e\\\",{\\\"pluribus\\\":\\\"unum\\\"}]'\\n\\n\\n text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\\\\t');\\n // text is '[\\\\n\\\\t\\\"e\\\",\\\\n\\\\t{\\\\n\\\\t\\\\t\\\"pluribus\\\": \\\"unum\\\"\\\\n\\\\t}\\\\n]'\\n\\n text = JSON.stringify([new Date()], function (key, value) {\\n return this[key] instanceof Date ?\\n 'Date(' + this[key] + ')' : value;\\n });\\n // text is '[\\\"Date(---current time---)\\\"]'\\n\\n\\n JSON.parse(text, reviver)\\n This method parses a JSON text to produce an object or array.\\n It can throw a SyntaxError exception.\\n\\n The optional reviver parameter is a function that can filter and\\n transform the results. It receives each of the keys and values,\\n and its return value is used instead of the original value.\\n If it returns what it received, then the structure is not modified.\\n If it returns undefined then the member is deleted.\\n\\n Example:\\n\\n // Parse the text. Values that look like ISO date strings will\\n // be converted to Date objects.\\n\\n myData = JSON.parse(text, function (key, value) {\\n var a;\\n if (typeof value === 'string') {\\n a =\\n/^(\\\\d{4})-(\\\\d{2})-(\\\\d{2})T(\\\\d{2}):(\\\\d{2}):(\\\\d{2}(?:\\\\.\\\\d*)?)Z$/.exec(value);\\n if (a) {\\n return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\\n +a[5], +a[6]));\\n }\\n }\\n return value;\\n });\\n\\n myData = JSON.parse('[\\\"Date(09/09/2001)\\\"]', function (key, value) {\\n var d;\\n if (typeof value === 'string' &&\\n value.slice(0, 5) === 'Date(' &&\\n value.slice(-1) === ')') {\\n d = new Date(value.slice(5, -1));\\n if (d) {\\n return d;\\n }\\n }\\n return value;\\n });\\n\\n\\n This is a reference implementation. You are free to copy, modify, or\\n redistribute.\\n*/\\n\\n/*jslint evil: true, regexp: true */\\n\\n/*members \\\"\\\", \\\"\\\\b\\\", \\\"\\\\t\\\", \\\"\\\\n\\\", \\\"\\\\f\\\", \\\"\\\\r\\\", \\\"\\\\\\\"\\\", JSON, \\\"\\\\\\\\\\\", apply,\\n call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\\n test, toJSON, toString, valueOf\\n*/\\n\\n\\n// Create a JSON object only if one does not already exist. We create the\\n// methods in a closure to avoid creating global variables.\\n\\nif (typeof JSON !== 'object') {\\n JSON = {};\\n}\\n\\n(function () {\\n 'use strict';\\n\\n function f(n) {\\n // Format integers to have at least two digits.\\n return n < 10 ? '0' + n : n;\\n }\\n\\n if (typeof Date.prototype.toJSON !== 'function') {\\n\\n Date.prototype.toJSON = function () {\\n\\n return isFinite(this.valueOf())\\n ? this.getUTCFullYear() + '-' +\\n f(this.getUTCMonth() + 1) + '-' +\\n f(this.getUTCDate()) + 'T' +\\n f(this.getUTCHours()) + ':' +\\n f(this.getUTCMinutes()) + ':' +\\n f(this.getUTCSeconds()) + 'Z'\\n : null;\\n };\\n\\n String.prototype.toJSON =\\n Number.prototype.toJSON =\\n Boolean.prototype.toJSON = function () {\\n return this.valueOf();\\n };\\n }\\n\\n var cx,\\n escapable,\\n gap,\\n indent,\\n meta,\\n rep;\\n\\n\\n function quote(string) {\\n\\n// If the string contains no control characters, no quote characters, and no\\n// backslash characters, then we can safely slap some quotes around it.\\n// Otherwise we must also replace the offending characters with safe escape\\n// sequences.\\n\\n escapable.lastIndex = 0;\\n return escapable.test(string) ? '\\\"' + string.replace(escapable, function (a) {\\n var c = meta[a];\\n return typeof c === 'string'\\n ? c\\n : '\\\\\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\\n }) + '\\\"' : '\\\"' + string + '\\\"';\\n }\\n\\n\\n function str(key, holder) {\\n\\n// Produce a string from holder[key].\\n\\n var i, // The loop counter.\\n k, // The member key.\\n v, // The member value.\\n length,\\n mind = gap,\\n partial,\\n value = holder[key];\\n\\n// If the value has a toJSON method, call it to obtain a replacement value.\\n\\n if (value && typeof value === 'object' &&\\n typeof value.toJSON === 'function') {\\n value = value.toJSON(key);\\n }\\n\\n// If we were called with a replacer function, then call the replacer to\\n// obtain a replacement value.\\n\\n if (typeof rep === 'function') {\\n value = rep.call(holder, key, value);\\n }\\n\\n// What happens next depends on the value's type.\\n\\n switch (typeof value) {\\n case 'string':\\n return quote(value);\\n\\n case 'number':\\n\\n// JSON numbers must be finite. Encode non-finite numbers as null.\\n\\n return isFinite(value) ? String(value) : 'null';\\n\\n case 'boolean':\\n case 'null':\\n\\n// If the value is a boolean or null, convert it to a string. Note:\\n// typeof null does not produce 'null'. The case is included here in\\n// the remote chance that this gets fixed someday.\\n\\n return String(value);\\n\\n// If the type is 'object', we might be dealing with an object or an array or\\n// null.\\n\\n case 'object':\\n\\n// Due to a specification blunder in ECMAScript, typeof null is 'object',\\n// so watch out for that case.\\n\\n if (!value) {\\n return 'null';\\n }\\n\\n// Make an array to hold the partial results of stringifying this object value.\\n\\n gap += indent;\\n partial = [];\\n\\n// Is the value an array?\\n\\n if (Object.prototype.toString.apply(value) === '[object Array]') {\\n\\n// The value is an array. Stringify every element. Use null as a placeholder\\n// for non-JSON values.\\n\\n length = value.length;\\n for (i = 0; i < length; i += 1) {\\n partial[i] = str(i, value) || 'null';\\n }\\n\\n// Join all of the elements together, separated with commas, and wrap them in\\n// brackets.\\n\\n v = partial.length === 0\\n ? '[]'\\n : gap\\n ? '[\\\\n' + gap + partial.join(',\\\\n' + gap) + '\\\\n' + mind + ']'\\n : '[' + partial.join(',') + ']';\\n gap = mind;\\n return v;\\n }\\n\\n// If the replacer is an array, use it to select the members to be stringified.\\n\\n if (rep && typeof rep === 'object') {\\n length = rep.length;\\n for (i = 0; i < length; i += 1) {\\n if (typeof rep[i] === 'string') {\\n k = rep[i];\\n v = str(k, value);\\n if (v) {\\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\\n }\\n }\\n }\\n } else {\\n\\n// Otherwise, iterate through all of the keys in the object.\\n\\n for (k in value) {\\n if (Object.prototype.hasOwnProperty.call(value, k)) {\\n v = str(k, value);\\n if (v) {\\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\\n }\\n }\\n }\\n }\\n\\n// Join all of the member texts together, separated with commas,\\n// and wrap them in braces.\\n\\n v = partial.length === 0\\n ? '{}'\\n : gap\\n ? '{\\\\n' + gap + partial.join(',\\\\n' + gap) + '\\\\n' + mind + '}'\\n : '{' + partial.join(',') + '}';\\n gap = mind;\\n return v;\\n }\\n }\\n\\n// If the JSON object does not yet have a stringify method, give it one.\\n\\n if (typeof JSON.stringify !== 'function') {\\n escapable = /[\\\\\\\\\\\\\\\"\\\\x00-\\\\x1f\\\\x7f-\\\\x9f\\\\u00ad\\\\u0600-\\\\u0604\\\\u070f\\\\u17b4\\\\u17b5\\\\u200c-\\\\u200f\\\\u2028-\\\\u202f\\\\u2060-\\\\u206f\\\\ufeff\\\\ufff0-\\\\uffff]/g;\\n meta = { // table of character substitutions\\n '\\\\b': '\\\\\\\\b',\\n '\\\\t': '\\\\\\\\t',\\n '\\\\n': '\\\\\\\\n',\\n '\\\\f': '\\\\\\\\f',\\n '\\\\r': '\\\\\\\\r',\\n '\\\"' : '\\\\\\\\\\\"',\\n '\\\\\\\\': '\\\\\\\\\\\\\\\\'\\n };\\n JSON.stringify = function (value, replacer, space) {\\n\\n// The stringify method takes a value and an optional replacer, and an optional\\n// space parameter, and returns a JSON text. The replacer can be a function\\n// that can replace values, or an array of strings that will select the keys.\\n// A default replacer method can be provided. Use of the space parameter can\\n// produce text that is more easily readable.\\n\\n var i;\\n gap = '';\\n indent = '';\\n\\n// If the space parameter is a number, make an indent string containing that\\n// many spaces.\\n\\n if (typeof space === 'number') {\\n for (i = 0; i < space; i += 1) {\\n indent += ' ';\\n }\\n\\n// If the space parameter is a string, it will be used as the indent string.\\n\\n } else if (typeof space === 'string') {\\n indent = space;\\n }\\n\\n// If there is a replacer, it must be a function or an array.\\n// Otherwise, throw an error.\\n\\n rep = replacer;\\n if (replacer && typeof replacer !== 'function' &&\\n (typeof replacer !== 'object' ||\\n typeof replacer.length !== 'number')) {\\n throw new Error('JSON.stringify');\\n }\\n\\n// Make a fake root object containing our value under the key of ''.\\n// Return the result of stringifying the value.\\n\\n return str('', {'': value});\\n };\\n }\\n\\n\\n// If the JSON object does not yet have a parse method, give it one.\\n\\n if (typeof JSON.parse !== 'function') {\\n cx = /[\\\\u0000\\\\u00ad\\\\u0600-\\\\u0604\\\\u070f\\\\u17b4\\\\u17b5\\\\u200c-\\\\u200f\\\\u2028-\\\\u202f\\\\u2060-\\\\u206f\\\\ufeff\\\\ufff0-\\\\uffff]/g;\\n JSON.parse = function (text, reviver) {\\n\\n// The parse method takes a text and an optional reviver function, and returns\\n// a JavaScript value if the text is a valid JSON text.\\n\\n var j;\\n\\n function walk(holder, key) {\\n\\n// The walk method is used to recursively walk the resulting structure so\\n// that modifications can be made.\\n\\n var k, v, value = holder[key];\\n if (value && typeof value === 'object') {\\n for (k in value) {\\n if (Object.prototype.hasOwnProperty.call(value, k)) {\\n v = walk(value, k);\\n if (v !== undefined) {\\n value[k] = v;\\n } else {\\n delete value[k];\\n }\\n }\\n }\\n }\\n return reviver.call(holder, key, value);\\n }\\n\\n\\n// Parsing happens in four stages. In the first stage, we replace certain\\n// Unicode characters with escape sequences. JavaScript handles many characters\\n// incorrectly, either silently deleting them, or treating them as line endings.\\n\\n text = String(text);\\n cx.lastIndex = 0;\\n if (cx.test(text)) {\\n text = text.replace(cx, function (a) {\\n return '\\\\\\\\u' +\\n ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\\n });\\n }\\n\\n// In the second stage, we run the text against regular expressions that look\\n// for non-JSON patterns. We are especially concerned with '()' and 'new'\\n// because they can cause invocation, and '=' because it can cause mutation.\\n// But just to be safe, we want to reject all unexpected forms.\\n\\n// We split the second stage into 4 regexp operations in order to work around\\n// crippling inefficiencies in IE's and Safari's regexp engines. First we\\n// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we\\n// replace all simple value tokens with ']' characters. Third, we delete all\\n// open brackets that follow a colon or comma or that begin the text. Finally,\\n// we look to see that the remaining characters are only whitespace or ']' or\\n// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.\\n\\n if (/^[\\\\],:{}\\\\s]*$/\\n .test(text.replace(/\\\\\\\\(?:[\\\"\\\\\\\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\\n .replace(/\\\"[^\\\"\\\\\\\\\\\\n\\\\r]*\\\"|true|false|null|-?\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d+)?/g, ']')\\n .replace(/(?:^|:|,)(?:\\\\s*\\\\[)+/g, ''))) {\\n\\n// In the third stage we use the eval function to compile the text into a\\n// JavaScript structure. The '{' operator is subject to a syntactic ambiguity\\n// in JavaScript: it can begin a block or an object literal. We wrap the text\\n// in parens to eliminate the ambiguity.\\n\\n j = eval('(' + text + ')');\\n\\n// In the optional fourth stage, we recursively walk the new structure, passing\\n// each name/value pair to a reviver function for possible transformation.\\n\\n return typeof reviver === 'function'\\n ? walk({'': j}, '')\\n : j;\\n }\\n\\n// If the text is not JSON parseable, then a SyntaxError is thrown.\\n\\n throw new SyntaxError('JSON.parse');\\n };\\n }\\n}());\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/json2.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/node_boot.js\": {\n \"text\": \"/*\\nCopyright (c) 2008-2019 Pivotal Labs\\n\\nPermission is hereby granted, free of charge, to any person obtaining\\na copy of this software and associated documentation files (the\\n\\\"Software\\\"), to deal in the Software without restriction, including\\nwithout limitation the rights to use, copy, modify, merge, publish,\\ndistribute, sublicense, and/or sell copies of the Software, and to\\npermit persons to whom the Software is furnished to do so, subject to\\nthe following conditions:\\n\\nThe above copyright notice and this permission notice shall be\\nincluded in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n*/\\nmodule.exports = function(jasmineRequire) {\\n var jasmine = jasmineRequire.core(jasmineRequire);\\n\\n var env = jasmine.getEnv({suppressLoadErrors: true});\\n\\n var jasmineInterface = jasmineRequire.interface(jasmine, env);\\n\\n extend(global, jasmineInterface);\\n\\n function extend(destination, source) {\\n for (var property in source) destination[property] = source[property];\\n return destination;\\n }\\n\\n return jasmine;\\n};\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/node_boot.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine.css\": {\n \"text\": \"@charset \\\"UTF-8\\\";\\nbody { overflow-y: scroll; }\\n\\n.jasmine_html-reporter { background-color: #eee; padding: 5px; margin: -8px; font-size: 11px; font-family: Monaco, \\\"Lucida Console\\\", monospace; line-height: 14px; color: #333; }\\n\\n.jasmine_html-reporter a { text-decoration: none; }\\n\\n.jasmine_html-reporter a:hover { text-decoration: underline; }\\n\\n.jasmine_html-reporter p, .jasmine_html-reporter h1, .jasmine_html-reporter h2, .jasmine_html-reporter h3, .jasmine_html-reporter h4, .jasmine_html-reporter h5, .jasmine_html-reporter h6 { margin: 0; line-height: 14px; }\\n\\n.jasmine_html-reporter .jasmine-banner, .jasmine_html-reporter .jasmine-symbol-summary, .jasmine_html-reporter .jasmine-summary, .jasmine_html-reporter .jasmine-result-message, .jasmine_html-reporter .jasmine-spec .jasmine-description, .jasmine_html-reporter .jasmine-spec-detail .jasmine-description, .jasmine_html-reporter .jasmine-alert .jasmine-bar, .jasmine_html-reporter .jasmine-stack-trace { padding-left: 9px; padding-right: 9px; }\\n\\n.jasmine_html-reporter .jasmine-banner { position: relative; }\\n\\n.jasmine_html-reporter .jasmine-banner .jasmine-title { background: url(\\\"data:image/png;base64,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\\\") no-repeat; background: url(\\\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNjgxLjk2MjUyIgogICBoZWlnaHQ9IjE4Ny41IgogICBpZD0ic3ZnMiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhOCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczYiPjxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTgiPjxwYXRoCiAgICAgICAgIGQ9Ik0gMCwxNTAwIDAsMCBsIDU0NTUuNzQsMCAwLDE1MDAgTCAwLDE1MDAgeiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgyMCIgLz48L2NsaXBQYXRoPjwvZGVmcz48ZwogICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LDAsMTg3LjUpIgogICAgIGlkPSJnMTAiPjxnCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuMSwwLjEpIgogICAgICAgaWQ9ImcxMiI+PGcKICAgICAgICAgaWQ9ImcxNCI+PGcKICAgICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgxOCkiCiAgICAgICAgICAgaWQ9ImcxNiI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTU0NCw1OTkuNDM0IGMgMC45MiwtNDAuMzUyIDI1LjY4LC04MS42MDIgNzEuNTMsLTgxLjYwMiAyNy41MSwwIDQ3LjY4LDEyLjgzMiA2MS40NCwzNS43NTQgMTIuODMsMjIuOTMgMTIuODMsNTYuODUyIDEyLjgzLDgyLjUyNyBsIDAsMzI5LjE4NCAtNzEuNTIsMCAwLDEwNC41NDMgMjY2LjgzLDAgMCwtMTA0LjU0MyAtNzAuNiwwIDAsLTM0NC43NyBjIDAsLTU4LjY5MSAtMy42OCwtMTA0LjUzMSAtNDQuOTMsLTE1Mi4yMTggLTM2LjY4LC00Mi4xOCAtOTYuMjgsLTY2LjAyIC0xNTMuMTQsLTY2LjAyIC0xMTcuMzcsMCAtMjA3LjI0LDc3Ljk0MSAtMjAyLjY0LDE5Ny4xNDUgbCAxMzAuMiwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDIzMDEuNCw2NjIuNjk1IGMgMCw4MC43MDMgLTY2Ljk0LDE0NS44MTMgLTE0Ny42MywxNDUuODEzIC04My40NCwwIC0xNDcuNjMsLTY4Ljc4MSAtMTQ3LjYzLC0xNTEuMzAxIDAsLTc5Ljc4NSA2Ni45NCwtMTQ1LjgwMSAxNDUuOCwtMTQ1LjgwMSA4NC4zNSwwIDE0OS40Niw2Ny44NTIgMTQ5LjQ2LDE1MS4yODkgeiBtIC0xLjgzLC0xODEuNTQ3IGMgLTM1Ljc3LC01NC4wOTcgLTkzLjUzLC03OC44NTkgLTE1Ny43MiwtNzguODU5IC0xNDAuMywwIC0yNTEuMjQsMTE2LjQ0OSAtMjUxLjI0LDI1NC45MTggMCwxNDIuMTI5IDExMy43LDI2MC40MSAyNTYuNzQsMjYwLjQxIDYzLjI3LDAgMTE4LjI5LC0yOS4zMzYgMTUyLjIyLC04Mi41MjMgbCAwLDY5LjY4NyAxNzUuMTQsMCAwLC0xMDQuNTI3IC02MS40NCwwIDAsLTI4MC41OTggNjEuNDQsMCAwLC0xMDQuNTI3IC0xNzUuMTQsMCAwLDY2LjAxOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAyNjIyLjMzLDU1Ny4yNTggYyAzLjY3LC00NC4wMTYgMzMuMDEsLTczLjM0OCA3OC44NiwtNzMuMzQ4IDMzLjkzLDAgNjYuOTMsMjMuODI0IDY2LjkzLDYwLjUwNCAwLDQ4LjYwNiAtNDUuODQsNTYuODU2IC04My40NCw2Ni45NDEgLTg1LjI4LDIyLjAwNCAtMTc4LjgxLDQ4LjYwNiAtMTc4LjgxLDE1NS44NzkgMCw5My41MzYgNzguODYsMTQ3LjYzMyAxNjUuOTgsMTQ3LjYzMyA0NCwwIDgzLjQzLC05LjE3NiAxMTAuOTQsLTQ0LjAwOCBsIDAsMzMuOTIyIDgyLjUzLDAgMCwtMTMyLjk2NSAtMTA4LjIxLDAgYyAtMS44MywzNC44NTYgLTI4LjQyLDU3Ljc3NCAtNjMuMjYsNTcuNzc0IC0zMC4yNiwwIC02Mi4zNSwtMTcuNDIyIC02Mi4zNSwtNTEuMzQ4IDAsLTQ1Ljg0NyA0NC45MywtNTUuOTMgODAuNjksLTY0LjE4IDg4LjAyLC0yMC4xNzUgMTgyLjQ3LC00Ny42OTUgMTgyLjQ3LC0xNTcuNzM0IDAsLTk5LjAyNyAtODMuNDQsLTE1NC4wMzkgLTE3NS4xMywtMTU0LjAzOSAtNDkuNTMsMCAtOTQuNDYsMTUuNTgyIC0xMjYuNTUsNTMuMTggbCAwLC00MC4zNCAtODUuMjcsMCAwLDE0Mi4xMjkgMTE0LjYyLDAiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGgyNiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjk4OC4xOCw4MDAuMjU0IC02My4yNiwwIDAsMTA0LjUyNyAxNjUuMDUsMCAwLC03My4zNTUgYyAzMS4xOCw1MS4zNDcgNzguODYsODUuMjc3IDE0MS4yMSw4NS4yNzcgNjcuODUsMCAxMjQuNzEsLTQxLjI1OCAxNTIuMjEsLTEwMi42OTkgMjYuNiw2Mi4zNTEgOTIuNjIsMTAyLjY5OSAxNjAuNDcsMTAyLjY5OSA1My4xOSwwIDEwNS40NiwtMjIgMTQxLjIxLC02Mi4zNTEgMzguNTIsLTQ0LjkzOCAzOC41MiwtOTMuNTMyIDM4LjUyLC0xNDkuNDU3IGwgMCwtMTg1LjIzOSA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40MiwwIDAsMTA0LjUyNyA2My4yOCwwIDAsMTU3LjcxNSBjIDAsMzIuMTAyIDAsNjAuNTI3IC0xNC42Nyw4OC45NTcgLTE4LjM0LDI2LjU4MiAtNDguNjEsNDAuMzQ0IC03OS43Nyw0MC4zNDQgLTMwLjI2LDAgLTYzLjI4LC0xMi44NDQgLTgyLjUzLC0zNi42NzIgLTIyLjkzLC0yOS4zNTUgLTIyLjkzLC01Ni44NjMgLTIyLjkzLC05Mi42MjkgbCAwLC0xNTcuNzE1IDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM4LjQxLDAgMCwxMDQuNTI3IDYzLjI4LDAgMCwxNTAuMzgzIGMgMCwyOS4zNDggMCw2Ni4wMjMgLTE0LjY3LDkxLjY5OSAtMTUuNTksMjkuMzM2IC00Ny42OSw0NC45MzQgLTgwLjcsNDQuOTM0IC0zMS4xOCwwIC01Ny43NywtMTEuMDA4IC03Ny45NCwtMzUuNzc0IC0yNC43NywtMzAuMjUzIC0yNi42LC02Mi4zNDMgLTI2LjYsLTk5Ljk0MSBsIDAsLTE1MS4zMDEgNjMuMjcsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNiwwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDI4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSAzOTk4LjY2LDk1MS41NDcgLTExMS44NywwIDAsMTE4LjI5MyAxMTEuODcsMCAwLC0xMTguMjkzIHogbSAwLC00MzEuODkxIDYzLjI3LDAgMCwtMTA0LjUyNyAtMjM5LjMzLDAgMCwxMDQuNTI3IDY0LjE5LDAgMCwyODAuNTk4IC02My4yNywwIDAsMTA0LjUyNyAxNzUuMTQsMCAwLC0zODUuMTI1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDQxNTkuMTIsODAwLjI1NCAtNjMuMjcsMCAwLDEwNC41MjcgMTc1LjE0LDAgMCwtNjkuNjg3IGMgMjkuMzUsNTQuMTAxIDg0LjM2LDgwLjY5OSAxNDQuODcsODAuNjk5IDUzLjE5LDAgMTA1LjQ1LC0yMi4wMTYgMTQxLjIyLC02MC41MjcgNDAuMzQsLTQ0LjkzNCA0MS4yNiwtODguMDMyIDQxLjI2LC0xNDMuOTU3IGwgMCwtMTkxLjY1MyA2My4yNywwIDAsLTEwNC41MjcgLTIzOC40LDAgMCwxMDQuNTI3IDYzLjI2LDAgMCwxNTguNjM3IGMgMCwzMC4yNjIgMCw2MS40MzQgLTE5LjI2LDg4LjAzNSAtMjAuMTcsMjYuNTgyIC01My4xOCwzOS40MTQgLTg2LjE5LDM5LjQxNCAtMzMuOTMsMCAtNjguNzcsLTEzLjc1IC04OC45NCwtNDEuMjUgLTIxLjA5LC0yNy41IC0yMS4wOSwtNjkuNjg3IC0yMS4wOSwtMTAyLjcwNyBsIDAsLTE0Mi4xMjkgNjMuMjYsMCAwLC0xMDQuNTI3IC0yMzguNCwwIDAsMTA0LjUyNyA2My4yNywwIDAsMjgwLjU5OCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDMyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA1MDgyLjQ4LDcwMy45NjUgYyAtMTkuMjQsNzAuNjA1IC04MS42LDExNS41NDcgLTE1NC4wNCwxMTUuNTQ3IC02Ni4wNCwwIC0xMjkuMywtNTEuMzQ4IC0xNDMuMDUsLTExNS41NDcgbCAyOTcuMDksMCB6IG0gODUuMjcsLTE0NC44ODMgYyAtMzguNTEsLTkzLjUyMyAtMTI5LjI3LC0xNTYuNzkzIC0yMzEuMDUsLTE1Ni43OTMgLTE0My4wNywwIC0yNTcuNjgsMTExLjg3MSAtMjU3LjY4LDI1NS44MzYgMCwxNDQuODgzIDEwOS4xMiwyNjEuMzI4IDI1NC45MSwyNjEuMzI4IDY3Ljg3LDAgMTM1LjcyLC0zMC4yNTggMTgzLjM5LC03OC44NjMgNDguNjIsLTUxLjM0NCA2OC43OSwtMTEzLjY5NSA2OC43OSwtMTgzLjM4MyBsIC0zLjY3LC0zOS40MzQgLTM5Ni4xMywwIGMgMTQuNjcsLTY3Ljg2MyA3Ny4wMywtMTE3LjM2MyAxNDYuNzIsLTExNy4zNjMgNDguNTksMCA5MC43NiwxOC4zMjggMTE4LjI4LDU4LjY3MiBsIDExNi40NCwwIgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDY5MC44OTUsODUwLjcwMyA5MC43NSwwIDIyLjU0MywzMS4wMzUgMCwyNDMuMTIyIC0xMzUuODI5LDAgMCwtMjQzLjE0MSAyMi41MzYsLTMxLjAxNiIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDM2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA2MzIuMzk1LDc0Mi4yNTggMjguMDM5LDg2LjMwNCAtMjIuNTUxLDMxLjA0IC0yMzEuMjIzLDc1LjEyOCAtNDEuOTc2LC0xMjkuMTgzIDIzMS4yNTcsLTc1LjEzNyAzNi40NTQsMTEuODQ4IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoMzgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDcxNy40NDksNjUzLjEwNSAtNzMuNDEsNTMuMzYgLTM2LjQ4OCwtMTEuODc1IC0xNDIuOTAzLC0xOTYuNjkyIDEwOS44ODMsLTc5LjgyOCAxNDIuOTE4LDE5Ni43MDMgMCwzOC4zMzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0MCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gODI4LjUyLDcwNi40NjUgLTczLjQyNiwtNTMuMzQgMC4wMTEsLTM4LjM1OSBMIDg5OC4wMDQsNDE4LjA3IDEwMDcuOSw0OTcuODk4IDg2NC45NzMsNjk0LjYwOSA4MjguNTIsNzA2LjQ2NSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQyIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA4MTIuMDg2LDgyOC41ODYgMjguMDU1LC04Ni4zMiAzNi40ODQsLTExLjgzNiAyMzEuMjI1LDc1LjExNyAtNDEuOTcsMTI5LjE4MyAtMjMxLjIzOSwtNzUuMTQgLTIyLjU1NSwtMzEuMDA0IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNDQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDczNi4zMDEsMTMzNS44OCBjIC0zMjMuMDQ3LDAgLTU4NS44NzUsLTI2Mi43OCAtNTg1Ljg3NSwtNTg1Ljc4MiAwLC0zMjMuMTE4IDI2Mi44MjgsLTU4NS45NzcgNTg1Ljg3NSwtNTg1Ljk3NyAzMjMuMDE5LDAgNTg1LjgwOSwyNjIuODU5IDU4NS44MDksNTg1Ljk3NyAwLDMyMy4wMDIgLTI2Mi43OSw1ODUuNzgyIC01ODUuODA5LDU4NS43ODIgbCAwLDAgeiBtIDAsLTExOC42MSBjIDI1Ny45NzIsMCA0NjcuMTg5LC0yMDkuMTMgNDY3LjE4OSwtNDY3LjE3MiAwLC0yNTguMTI5IC0yMDkuMjE3LC00NjcuMzQ4IC00NjcuMTg5LC00NjcuMzQ4IC0yNTguMDc0LDAgLTQ2Ny4yNTQsMjA5LjIxOSAtNDY3LjI1NCw0NjcuMzQ4IDAsMjU4LjA0MiAyMDkuMTgsNDY3LjE3MiA0NjcuMjU0LDQ2Ny4xNzIiCiAgICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgICAgaWQ9InBhdGg0NiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiM4YTQxODI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMTA5MS4xMyw2MTkuODgzIC0xNzUuNzcxLDU3LjEyMSAxMS42MjksMzUuODA4IDE3NS43NjIsLTU3LjEyMSAtMTEuNjIsLTM1LjgwOCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDQ4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA4NjYuOTU3LDkwMi4wNzQgODM2LjUsOTI0LjE5OSA5NDUuMTIxLDEwNzMuNzMgOTc1LjU4NiwxMDUxLjYxIDg2Ni45NTcsOTAyLjA3NCIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDUwIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0iTSA2MDcuNDY1LDkwMy40NDUgNDk4Ljg1NSwxMDUyLjk3IDUyOS4zMiwxMDc1LjEgNjM3LjkzLDkyNS41NjYgNjA3LjQ2NSw5MDMuNDQ1IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICAgICAgICBkPSJtIDM4MC42ODgsNjIyLjEyOSAtMTEuNjI2LDM1LjgwMSAxNzUuNzU4LDU3LjA5IDExLjYyMSwtMzUuODAxIC0xNzUuNzUzLC01Ny4wOSIKICAgICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgICBpZD0icGF0aDU0IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzhhNDE4MjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgICAgICAgZD0ibSA3MTYuMjg5LDM3Ni41OSAzNy42NDA2LDAgMCwxODQuODE2IC0zNy42NDA2LDAgMCwtMTg0LjgxNiB6IgogICAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICAgIGlkPSJwYXRoNTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojOGE0MTgyO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPjwvZz48L2c+PC9nPjwvZz48L3N2Zz4=\\\") no-repeat, none; -moz-background-size: 100%; -o-background-size: 100%; -webkit-background-size: 100%; background-size: 100%; display: block; float: left; width: 90px; height: 25px; }\\n\\n.jasmine_html-reporter .jasmine-banner .jasmine-version { margin-left: 14px; position: relative; top: 6px; }\\n\\n.jasmine_html-reporter #jasmine_content { position: fixed; right: 100%; }\\n\\n.jasmine_html-reporter .jasmine-version { color: #aaa; }\\n\\n.jasmine_html-reporter .jasmine-banner { margin-top: 14px; }\\n\\n.jasmine_html-reporter .jasmine-duration { color: #fff; float: right; line-height: 28px; padding-right: 9px; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary { overflow: hidden; margin: 14px 0; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li { display: inline-block; height: 10px; width: 14px; font-size: 16px; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed { font-size: 14px; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-passed:before { color: #007069; content: \\\"•\\\"; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed { line-height: 9px; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-failed:before { color: #ca3a11; content: \\\"×\\\"; font-weight: bold; margin-left: -1px; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-excluded { font-size: 14px; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-excluded:before { color: #bababa; content: \\\"•\\\"; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-excluded-no-display { font-size: 14px; display: none; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending { line-height: 17px; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-pending:before { color: #ba9d37; content: \\\"*\\\"; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty { font-size: 14px; }\\n\\n.jasmine_html-reporter .jasmine-symbol-summary li.jasmine-empty:before { color: #ba9d37; content: \\\"•\\\"; }\\n\\n.jasmine_html-reporter .jasmine-run-options { float: right; margin-right: 5px; border: 1px solid #8a4182; color: #8a4182; position: relative; line-height: 20px; }\\n\\n.jasmine_html-reporter .jasmine-run-options .jasmine-trigger { cursor: pointer; padding: 8px 16px; }\\n\\n.jasmine_html-reporter .jasmine-run-options .jasmine-payload { position: absolute; display: none; right: -1px; border: 1px solid #8a4182; background-color: #eee; white-space: nowrap; padding: 4px 8px; }\\n\\n.jasmine_html-reporter .jasmine-run-options .jasmine-payload.jasmine-open { display: block; }\\n\\n.jasmine_html-reporter .jasmine-bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }\\n\\n.jasmine_html-reporter .jasmine-bar.jasmine-failed, .jasmine_html-reporter .jasmine-bar.jasmine-errored { background-color: #ca3a11; border-bottom: 1px solid #eee; }\\n\\n.jasmine_html-reporter .jasmine-bar.jasmine-passed { background-color: #007069; }\\n\\n.jasmine_html-reporter .jasmine-bar.jasmine-incomplete { background-color: #bababa; }\\n\\n.jasmine_html-reporter .jasmine-bar.jasmine-skipped { background-color: #bababa; }\\n\\n.jasmine_html-reporter .jasmine-bar.jasmine-warning { background-color: #ba9d37; color: #333; }\\n\\n.jasmine_html-reporter .jasmine-bar.jasmine-menu { background-color: #fff; color: #aaa; }\\n\\n.jasmine_html-reporter .jasmine-bar.jasmine-menu a { color: #333; }\\n\\n.jasmine_html-reporter .jasmine-bar a { color: white; }\\n\\n.jasmine_html-reporter.jasmine-spec-list .jasmine-bar.jasmine-menu.jasmine-failure-list, .jasmine_html-reporter.jasmine-spec-list .jasmine-results .jasmine-failures { display: none; }\\n\\n.jasmine_html-reporter.jasmine-failure-list .jasmine-bar.jasmine-menu.jasmine-spec-list, .jasmine_html-reporter.jasmine-failure-list .jasmine-summary { display: none; }\\n\\n.jasmine_html-reporter .jasmine-results { margin-top: 14px; }\\n\\n.jasmine_html-reporter .jasmine-summary { margin-top: 14px; }\\n\\n.jasmine_html-reporter .jasmine-summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; }\\n\\n.jasmine_html-reporter .jasmine-summary ul.jasmine-suite { margin-top: 7px; margin-bottom: 7px; }\\n\\n.jasmine_html-reporter .jasmine-summary li.jasmine-passed a { color: #007069; }\\n\\n.jasmine_html-reporter .jasmine-summary li.jasmine-failed a { color: #ca3a11; }\\n\\n.jasmine_html-reporter .jasmine-summary li.jasmine-empty a { color: #ba9d37; }\\n\\n.jasmine_html-reporter .jasmine-summary li.jasmine-pending a { color: #ba9d37; }\\n\\n.jasmine_html-reporter .jasmine-summary li.jasmine-excluded a { color: #bababa; }\\n\\n.jasmine_html-reporter .jasmine-specs li.jasmine-passed a:before { content: \\\"• \\\"; }\\n\\n.jasmine_html-reporter .jasmine-specs li.jasmine-failed a:before { content: \\\"× \\\"; }\\n\\n.jasmine_html-reporter .jasmine-specs li.jasmine-empty a:before { content: \\\"* \\\"; }\\n\\n.jasmine_html-reporter .jasmine-specs li.jasmine-pending a:before { content: \\\"• \\\"; }\\n\\n.jasmine_html-reporter .jasmine-specs li.jasmine-excluded a:before { content: \\\"• \\\"; }\\n\\n.jasmine_html-reporter .jasmine-description + .jasmine-suite { margin-top: 0; }\\n\\n.jasmine_html-reporter .jasmine-suite { margin-top: 14px; }\\n\\n.jasmine_html-reporter .jasmine-suite a { color: #333; }\\n\\n.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail { margin-bottom: 28px; }\\n\\n.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description { background-color: #ca3a11; color: white; }\\n\\n.jasmine_html-reporter .jasmine-failures .jasmine-spec-detail .jasmine-description a { color: white; }\\n\\n.jasmine_html-reporter .jasmine-result-message { padding-top: 14px; color: #333; white-space: pre-wrap; }\\n\\n.jasmine_html-reporter .jasmine-result-message span.jasmine-result { display: block; }\\n\\n.jasmine_html-reporter .jasmine-stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666; border: 1px solid #ddd; background: white; white-space: pre; }\\n\",\n \"type\": \"text/css\",\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine.css\",\n \"tags\": \"[[$:/tags/Stylesheet]]\"\n },\n \"$:/plugins/tiddlywiki/jasmine/jasmine-plugin.js\": {\n \"title\": \"$:/plugins/tiddlywiki/jasmine/jasmine-plugin.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/jasmine/jasmine-plugin.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nThe main module of the Jasmine test plugin for TiddlyWiki5\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar TEST_TIDDLER_FILTER = \\\"[type[application/javascript]tag[$:/tags/test-spec]]\\\";\\n\\n/*\\nStartup function for running tests\\n*/\\nexports.startup = function() {\\n\\t// Set up a shared context object.\\n\\tvar context = {\\n\\t\\tconsole: console,\\n\\t\\tsetInterval: setInterval,\\n\\t\\tclearInterval: clearInterval,\\n\\t\\tsetTimeout: setTimeout,\\n\\t\\tclearTimeout: clearTimeout,\\n\\t\\t$tw: $tw\\n\\t};\\n\\t// The `global` property is needed in two places:\\n\\t// 1. jasmine-core/node_boot.js: extends the global object with jasmine interface.\\n\\t// 2. jasmine-core/jasmine.js: when it's loaded, if it determines that it's\\n\\t// running in a commonjs environment and `global` is undefined, it will set\\n\\t// `jasmineGlobal`, its internal reference to the global object, to {},\\n\\t// which is not what we want. Alternatively, the `jasmine.getEnv()` API allows\\n\\t// you to pass in a `global` object, but the boot scripts we use don't allow\\n\\t// the caller to customize the `.getEnv()` call. We'd rather use the boot scripts\\n\\t// as-is than duplicating them in order to do minor tweaks.\\n\\t//\\n\\t// We need this `$tw.browser ?` conditional because:\\n\\t// 1. In a browser environment, 'jasmine-core/jasmine.js' calls `setTimeout` like\\n\\t// `setTimeout.apply(jasmineGlobal, ...)`; the browser throws an \\\"illegal invocation\\\"\\n\\t// unless `jasmineGlobal` is the right context object, which is `window`.\\n\\t// 2. In Node.js, there is no `window` object.\\n\\t// Further more, we don't have access to the `global` object when this code\\n\\t// is executed, so we use the `context` object instead.\\n\\tcontext.global = $tw.browser ? window : context;\\n\\n\\tfunction evalInContext(title) {\\n\\t\\tvar code = $tw.wiki.getTiddlerText(title,\\\"\\\");\\n\\t\\tvar _exports = {};\\n\\t\\tcontext.exports = _exports;\\n\\t\\tcontext.module = {exports: _exports};\\n\\t\\tcontext.require = function(moduleTitle) {\\n\\t\\t\\t// mock out the 'glob' module required in\\n\\t\\t\\t// \\\"$:/plugins/tiddlywiki/jasmine/jasmine/jasmine.js\\\"\\n\\t\\t\\tif (moduleTitle === \\\"glob\\\") {\\n\\t\\t\\t\\treturn {};\\n\\t\\t\\t}\\n\\t\\t\\treturn $tw.modules.execute(moduleTitle,title);\\n\\t\\t};\\n\\t\\tvar contextExports = $tw.utils.evalSandboxed(code,context,title);\\n\\t\\t// jasmine/jasmine.js assigns directly to `module.exports`: check\\n\\t\\t// for it first.\\n\\t\\treturn context.module.exports || contextExports;\\n\\t}\\n\\n\\t// Get the core Jasmine exports\\n\\tvar jasmineCore = evalInContext(\\\"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine.js\\\");\\n\\t// Get the Jasmine instance and configure reporters\\n\\tvar jasmine;\\n\\tif($tw.browser) {\\n\\t\\twindow.jasmineRequire = jasmineCore;\\n\\t\\t$tw.modules.execute(\\\"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/jasmine-html.js\\\");\\n\\t\\t$tw.modules.execute(\\\"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/boot.js\\\");\\n\\t\\tjasmine = window.jasmine;\\n\\t} else {\\n\\t\\t// We load 'jasmine-core/jasmine.js' above instead of the\\n\\t\\t// main script 'jasmine-core/jasmine-core.js', which is what's loaded\\n\\t\\t// when you run `require('jasmine-core')` in a Node.js environment.\\n\\t\\t// We load 'jasmine-core/jasmine.js' because we want to factor out\\n\\t\\t// code paths that are common between browser and Node.js environments.\\n\\t\\t// As a result, the `jasmineCore` object is missing some properties that\\n\\t\\t// 'jasmine/jasmine.js' expects, so we manually populate what we need.\\n\\n\\t\\t// 'jasmine/jasmine.js' calls `.boot()`\\n\\t\\tjasmineCore.boot = evalInContext(\\\"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core/node_boot.js\\\");\\n\\t\\t// 'jasmine/jasmine.js' references `.files.path`\\n\\t\\tjasmineCore.files = {\\n\\t\\t\\tpath: \\\"$:/plugins/tiddlywiki/jasmine/jasmine-core/jasmine-core\\\"\\n\\t\\t};\\n\\t\\t// 'jasmine/jasmine.js' references `process.exit`\\n\\t\\tcontext.process = process;\\n\\n\\t\\tvar JasmineNode = evalInContext(\\\"$:/plugins/tiddlywiki/jasmine/jasmine/jasmine.js\\\");\\n\\t\\tvar jasmineRunner = new JasmineNode({jasmineCore: jasmineCore});\\n\\t\\tjasmineRunner.configureDefaultReporter({});\\n\\t\\tjasmine = jasmineRunner.jasmine;\\n\\t}\\n\\t// Add Jasmine's DSL to our context\\n\\tvar env = jasmine.getEnv();\\n\\tvar jasmineInterface = jasmineCore.interface(jasmine,env)\\n\\tcontext = $tw.utils.extend({},jasmineInterface,context);\\n\\t// Iterate through all the test modules\\n\\tvar tests = $tw.wiki.filterTiddlers(TEST_TIDDLER_FILTER);\\n\\t$tw.utils.each(tests,function(title) {\\n\\t\\tevalInContext(title);\\n\\t});\\n\\t// In a browser environment, jasmine-core/boot.js calls `execute()` for us.\\n\\t// In Node.js, we call it manually.\\n\\tif(!$tw.browser) {\\n\\t\\tenv.execute();\\n\\t}\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/jasmine/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/jasmine/readme\",\n \"text\": \"This plugin provides a framework for running tests in the browser and under Node.js. It is based on [[Jasmine|https://jasmine.github.io/]] test framework.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/jasmine]]\\n\"\n },\n \"/Users/chris/Downloads/SynologyDrive/Tiddly/TiddlyWiki5_Clutterstack/plugins/tiddlywiki/jasmine/update-packages.sh\": {\n \"title\": \"/Users/chris/Downloads/SynologyDrive/Tiddly/TiddlyWiki5_Clutterstack/plugins/tiddlywiki/jasmine/update-packages.sh\",\n \"text\": \"#!/bin/bash\\n# Download jasmine packages from npm and unpack relevant files\\n# into files/.\\n\\nset -exuo pipefail\\n\\nJASMINE_VERSION=3.4.0\\nJASMINE_CORE_VERSION=3.4.0\\n\\nrm -rf files/jasmine\\nmkdir -p files/jasmine\\nif [ ! -f \\\"jasmine-$JASMINE_VERSION.tgz\\\" ]; then\\n npm pack jasmine@$JASMINE_VERSION\\nfi\\ntar xfzv jasmine-$JASMINE_VERSION.tgz \\\\\\n -C files/jasmine \\\\\\n --strip-components=1 \\\\\\n --wildcards \\\"*/lib/*.js\\\" \\\"*/*.LICENSE\\\" \\\\\\n --exclude \\\"example\\\"\\n\\nrm -rf files/jasmine-core\\nmkdir -p files/jasmine-core\\nif [ ! -f \\\"jasmine-core-$JASMINE_CORE_VERSION.tgz\\\" ]; then\\n npm pack jasmine-core@$JASMINE_CORE_VERSION\\nfi\\ntar xfzv jasmine-core-$JASMINE_CORE_VERSION.tgz \\\\\\n -C files/jasmine-core \\\\\\n --strip-components=1 \\\\\\n --wildcards \\\"*/lib/*.js\\\" \\\"*/lib/*.css\\\" \\\"*/*.LICENSE\\\" \\\\\\n --exclude \\\"example\\\"\\n\",\n \"type\": \".sh\"\n }\n }\n}"},"$:/plugins/tiddlywiki/jszip":{"title":"$:/plugins/tiddlywiki/jszip","name":"JSZip","description":"JSZip library","author":"Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso","list":"readme docs examples license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/jszip/docs\": {\n \"title\": \"$:/plugins/tiddlywiki/jszip/docs\",\n \"text\": \"The following messages are provided to allow programmatic manipulation of ZIP files stored within tiddlers:\\n\\n!! Create ZIP file\\n\\n```\\n<$action-sendmessage $message=\\\"tm-zip-create\\\" $param=\\\"MyZipTiddler\\\"/>\\n```\\n\\n* ''$param'': title of tiddler to contain ZIP file\\n\\n!! Add/replace text file within ZIP file\\n\\n```\\n<$action-sendmessage $message=\\\"tm-zip-add-text-file\\\" $param=\\\"MyZipTiddler\\\" filename=\\\"my/newfilename.txt\\\" text=\\\"The content\\\"/>\\n```\\n\\n* ''$param'': title of tiddler containing ZIP file\\n* ''filename'': filename of file to be added\\n* ''text'': text content of file to be added\\n\\n!! Render tiddler to ZIP file\\n\\n```\\n<$action-sendmessage $message=\\\"tm-zip-render-file\\\" $param=\\\"MyZipTiddler\\\" filename=\\\"my/newfilename.txt\\\" tiddler=\\\"HelloThere\\\" template=\\\"The content\\\" mode=\\\"block\\\" output=\\\"text/plain\\\"/>\\n```\\n\\n* ''$param'': title of tiddler containing ZIP file\\n* ''filename'': filename of output file\\n* ''tiddler'': optional title of currentTiddler for rendering template\\n* ''template'': title of template tiddler to be rendered\\n* ''mode'': optional parsing mode \\\"block\\\" (default) or \\\"inline\\\"\\n* ''output'': output format: \\\"text/plain\\\" (default) for the text content or \\\"text/html\\\" for the full HTML content, including tags\\n\\n!! Download a ZIP file\\n\\n```\\n<$action-sendmessage $message=\\\"tm-zip-download\\\" $param=\\\"MyZipTiddler\\\" filename=\\\"myzipfile.zip\\\"/>\\n```\\n\\n* ''$param'': title of tiddler containing ZIP file\\n* ''filename'': filename to be suggested to browser for downloaded file\\n\"\n },\n \"$:/plugins/tiddlywiki/jszip/examples\": {\n \"title\": \"$:/plugins/tiddlywiki/jszip/examples\",\n \"text\": \"\\\\define actions-render-static-site()\\n<$action-sendmessage $message=\\\"tm-zip-create\\\" $param=\\\"$:/temp/_ZipTiddler\\\"/>\\n<$set name=\\\"tv-filter-export-link\\\" value=\\\"[slugify[]addsuffix[.html]]\\\">\\n<$list filter=\\\"[all[tiddlers]!is[system]limit[25]]\\\">\\n<$action-sendmessage $message=\\\"tm-zip-render-file\\\" $param=\\\"$:/temp/_ZipTiddler\\\" filename={{{ [<currentTiddler>slugify[]addsuffix[.html]] }}} tiddler=<<currentTiddler>> template=\\\"$:/core/templates/static.tiddler.html\\\"/>\\n</$list>\\n</$set>\\n<$action-sendmessage $message=\\\"tm-zip-render-file\\\" $param=\\\"$:/temp/_ZipTiddler\\\" filename=\\\"static.css\\\" template=\\\"$:/core/templates/static.template.css\\\"/>\\n<$action-sendmessage $message=\\\"tm-zip-download\\\" $param=\\\"$:/temp/_ZipTiddler\\\" filename=\\\"myzip.zip\\\"/>\\n\\\\end\\n\\n! Rendering a Static Site to a Zip File\\n\\nThe actions below create a ZIP file containing a static HTML rendering of the first 100 non-system tiddlers:\\n\\n<pre>\\n<$text text=<<actions-render-static-site>>/>\\n</pre>\\n\\n<$button actions=<<actions-render-static-site>>>\\nRender site\\n</$button>\\n\\n'<$list filter=\\\"[!is[system]duplicateslugs[]limit[1]]\\\" emptyMessage=\\\"(There are no duplicate slugs)\\\">\\nThe following tiddlers have duplicate slugs:\\n\\n<ul>\\n<$list filter=\\\"[all[tiddlers]!is[system]limit[25]duplicateslugs[]]\\\">\\n<li><$link><$text text=<<currentTiddler>>/></$link></li>\\n</$list>\\n</ul>\\n</$list>\\n\\nTemporary zip file: $:/temp/_ZipTiddler\\n\"\n },\n \"$:/plugins/tiddlywiki/jszip/jszip.js\": {\n \"text\": \"/*!\\n\\nJSZip - A Javascript class for generating and reading zip files\\n<http://stuartk.com/jszip>\\n\\n(c) 2009-2014 Stuart Knightley <stuart [at] stuartk.com>\\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\\n\\nJSZip uses the library pako released under the MIT license :\\nhttps://github.com/nodeca/pako/blob/master/LICENSE\\n*/\\n!function(a){if(\\\"object\\\"==typeof exports&&\\\"undefined\\\"!=typeof module)module.exports=a();else if(\\\"function\\\"==typeof define&&define.amd)define([],a);else{var b;b=\\\"undefined\\\"!=typeof window?window:\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:this,b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i=\\\"function\\\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error(\\\"Cannot find module '\\\"+g+\\\"'\\\");throw j.code=\\\"MODULE_NOT_FOUND\\\",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f=\\\"function\\\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){\\\"use strict\\\";function d(a){if(a){this.data=a,this.length=this.data.length,this.index=0,this.zero=0;for(var b=0;b<this.data.length;b++)a[b]=255&a[b]}}var e=a(\\\"./dataReader\\\");d.prototype=new e,d.prototype.byteAt=function(a){return this.data[this.zero+a]},d.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f-this.zero;return-1},d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return[];var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{\\\"./dataReader\\\":6}],2:[function(a,b,c){\\\"use strict\\\";var d=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\\";c.encode=function(a,b){for(var c,e,f,g,h,i,j,k=\\\"\\\",l=0;l<a.length;)c=a.charCodeAt(l++),e=a.charCodeAt(l++),f=a.charCodeAt(l++),g=c>>2,h=(3&c)<<4|e>>4,i=(15&e)<<2|f>>6,j=63&f,isNaN(e)?i=j=64:isNaN(f)&&(j=64),k=k+d.charAt(g)+d.charAt(h)+d.charAt(i)+d.charAt(j);return k},c.decode=function(a,b){var c,e,f,g,h,i,j,k=\\\"\\\",l=0;for(a=a.replace(/[^A-Za-z0-9\\\\+\\\\/\\\\=]/g,\\\"\\\");l<a.length;)g=d.indexOf(a.charAt(l++)),h=d.indexOf(a.charAt(l++)),i=d.indexOf(a.charAt(l++)),j=d.indexOf(a.charAt(l++)),c=g<<2|h>>4,e=(15&h)<<4|i>>2,f=(3&i)<<6|j,k+=String.fromCharCode(c),64!=i&&(k+=String.fromCharCode(e)),64!=j&&(k+=String.fromCharCode(f));return k}},{}],3:[function(a,b,c){\\\"use strict\\\";function d(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}d.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=d},{}],4:[function(a,b,c){\\\"use strict\\\";c.STORE={magic:\\\"\\\\0\\\\0\\\",compress:function(a,b){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a(\\\"./flate\\\")},{\\\"./flate\\\":9}],5:[function(a,b,c){\\\"use strict\\\";var d=a(\\\"./utils\\\"),e=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if(\\\"undefined\\\"==typeof a||!a.length)return 0;var c=\\\"string\\\"!==d.getTypeOf(a);\\\"undefined\\\"==typeof b&&(b=0);var f=0,g=0,h=0;b^=-1;for(var i=0,j=a.length;i<j;i++)h=c?a[i]:a.charCodeAt(i),g=255&(b^h),f=e[g],b=b>>>8^f;return b^-1}},{\\\"./utils\\\":22}],6:[function(a,b,c){\\\"use strict\\\";function d(a){this.data=null,this.length=0,this.index=0,this.zero=0}var e=a(\\\"./utils\\\");d.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<this.zero+a||a<0)throw new Error(\\\"End of data reached (data length = \\\"+this.length+\\\", asked index = \\\"+a+\\\"). Corrupted zip ?\\\")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(a){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return e.transformTo(\\\"string\\\",this.readData(a))},readData:function(a){},lastIndexOfSignature:function(a){},readDate:function(){var a=this.readInt(4);return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=d},{\\\"./utils\\\":22}],7:[function(a,b,c){\\\"use strict\\\";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.compressionOptions=null,c.comment=null,c.unixPermissions=null,c.dosPermissions=null},{}],8:[function(a,b,c){\\\"use strict\\\";var d=a(\\\"./utils\\\");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo(\\\"uint8array\\\",a)},c.uint8Array2String=function(a){return d.transformTo(\\\"string\\\",a)},c.string2Blob=function(a){var b=d.transformTo(\\\"arraybuffer\\\",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{\\\"./utils\\\":22}],9:[function(a,b,c){\\\"use strict\\\";var d=\\\"undefined\\\"!=typeof Uint8Array&&\\\"undefined\\\"!=typeof Uint16Array&&\\\"undefined\\\"!=typeof Uint32Array,e=a(\\\"pako\\\");c.uncompressInputType=d?\\\"uint8array\\\":\\\"array\\\",c.compressInputType=d?\\\"uint8array\\\":\\\"array\\\",c.magic=\\\"\\\\b\\\\0\\\",c.compress=function(a,b){return e.deflateRaw(a,{level:b.level||-1})},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:25}],10:[function(a,b,c){\\\"use strict\\\";function d(a,b){return this instanceof d?(this.files={},this.comment=null,this.root=\\\"\\\",a&&this.load(a,b),void(this.clone=function(){var a=new d;for(var b in this)\\\"function\\\"!=typeof this[b]&&(a[b]=this[b]);return a})):new d(a,b)}var e=a(\\\"./base64\\\");d.prototype=a(\\\"./object\\\"),d.prototype.load=a(\\\"./load\\\"),d.support=a(\\\"./support\\\"),d.defaults=a(\\\"./defaults\\\"),d.utils=a(\\\"./deprecatedPublicUtils\\\"),d.base64={encode:function(a){return e.encode(a)},decode:function(a){return e.decode(a)}},d.compressions=a(\\\"./compressions\\\"),b.exports=d},{\\\"./base64\\\":2,\\\"./compressions\\\":4,\\\"./defaults\\\":7,\\\"./deprecatedPublicUtils\\\":8,\\\"./load\\\":11,\\\"./object\\\":14,\\\"./support\\\":18}],11:[function(a,b,c){\\\"use strict\\\";var d=a(\\\"./base64\\\"),e=a(\\\"./utf8\\\"),f=a(\\\"./utils\\\"),g=a(\\\"./zipEntries\\\");b.exports=function(a,b){var c,h,i,j;for(b=f.extend(b||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:e.utf8decode}),b.base64&&(a=d.decode(a)),h=new g(a,b),c=h.files,i=0;i<c.length;i++)j=c[i],this.file(j.fileNameStr,j.decompressed,{binary:!0,optimizedBinaryString:!0,date:j.date,dir:j.dir,comment:j.fileCommentStr.length?j.fileCommentStr:null,unixPermissions:j.unixPermissions,dosPermissions:j.dosPermissions,createFolders:b.createFolders});return h.zipComment.length&&(this.comment=h.zipComment),this}},{\\\"./base64\\\":2,\\\"./utf8\\\":21,\\\"./utils\\\":22,\\\"./zipEntries\\\":23}],12:[function(a,b,c){(function(a){\\\"use strict\\\";b.exports=function(b,c){return new a(b,c)},b.exports.test=function(b){return a.isBuffer(b)}}).call(this,\\\"undefined\\\"!=typeof Buffer?Buffer:void 0)},{}],13:[function(a,b,c){\\\"use strict\\\";function d(a){this.data=a,this.length=this.data.length,this.index=0,this.zero=0}var e=a(\\\"./uint8ArrayReader\\\");d.prototype=new e,d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{\\\"./uint8ArrayReader\\\":19}],14:[function(a,b,c){\\\"use strict\\\";var d=a(\\\"./support\\\"),e=a(\\\"./utils\\\"),f=a(\\\"./crc32\\\"),g=a(\\\"./signature\\\"),h=a(\\\"./defaults\\\"),i=a(\\\"./base64\\\"),j=a(\\\"./compressions\\\"),k=a(\\\"./compressedObject\\\"),l=a(\\\"./nodeBuffer\\\"),m=a(\\\"./utf8\\\"),n=a(\\\"./stringWriter\\\"),o=a(\\\"./uint8ArrayWriter\\\"),p=function(a){if(a._data instanceof k&&(a._data=a._data.getContent(),a.options.binary=!0,a.options.base64=!1,\\\"uint8array\\\"===e.getTypeOf(a._data))){var b=a._data;a._data=new Uint8Array(b.length),0!==b.length&&a._data.set(b,0)}return a._data},q=function(a){var b=p(a),c=e.getTypeOf(b);return\\\"string\\\"===c?!a.options.binary&&d.nodebuffer?l(b,\\\"utf-8\\\"):a.asBinary():b},r=function(a){var b=p(this);return null===b||\\\"undefined\\\"==typeof b?\\\"\\\":(this.options.base64&&(b=i.decode(b)),b=a&&this.options.binary?D.utf8decode(b):e.transformTo(\\\"string\\\",b),a||this.options.binary||(b=e.transformTo(\\\"string\\\",D.utf8encode(b))),b)},s=function(a,b,c){this.name=a,this.dir=c.dir,this.date=c.date,this.comment=c.comment,this.unixPermissions=c.unixPermissions,this.dosPermissions=c.dosPermissions,this._data=b,this.options=c,this._initialMetadata={dir:c.dir,date:c.date}};s.prototype={asText:function(){return r.call(this,!0)},asBinary:function(){return r.call(this,!1)},asNodeBuffer:function(){var a=q(this);return e.transformTo(\\\"nodebuffer\\\",a)},asUint8Array:function(){var a=q(this);return e.transformTo(\\\"uint8array\\\",a)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var t=function(a,b){var c,d=\\\"\\\";for(c=0;c<b;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},u=function(a){return a=a||{},a.base64!==!0||null!==a.binary&&void 0!==a.binary||(a.binary=!0),a=e.extend(a,h),a.date=a.date||new Date,null!==a.compression&&(a.compression=a.compression.toUpperCase()),a},v=function(a,b,c){var d,f=e.getTypeOf(b);if(c=u(c),\\\"string\\\"==typeof c.unixPermissions&&(c.unixPermissions=parseInt(c.unixPermissions,8)),c.unixPermissions&&16384&c.unixPermissions&&(c.dir=!0),c.dosPermissions&&16&c.dosPermissions&&(c.dir=!0),c.dir&&(a=x(a)),c.createFolders&&(d=w(a))&&y.call(this,d,!0),c.dir||null===b||\\\"undefined\\\"==typeof b)c.base64=!1,c.binary=!1,b=null,f=null;else if(\\\"string\\\"===f)c.binary&&!c.base64&&c.optimizedBinaryString!==!0&&(b=e.string2binary(b));else{if(c.base64=!1,c.binary=!0,!(f||b instanceof k))throw new Error(\\\"The data of '\\\"+a+\\\"' is in an unsupported format !\\\");\\\"arraybuffer\\\"===f&&(b=e.transformTo(\\\"uint8array\\\",b))}var g=new s(a,b,c);return this.files[a]=g,g},w=function(a){\\\"/\\\"==a.slice(-1)&&(a=a.substring(0,a.length-1));var b=a.lastIndexOf(\\\"/\\\");return b>0?a.substring(0,b):\\\"\\\"},x=function(a){return\\\"/\\\"!=a.slice(-1)&&(a+=\\\"/\\\"),a},y=function(a,b){return b=\\\"undefined\\\"!=typeof b&&b,a=x(a),this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},z=function(a,b,c){var d,g=new k;return a._data instanceof k?(g.uncompressedSize=a._data.uncompressedSize,g.crc32=a._data.crc32,0===g.uncompressedSize||a.dir?(b=j.STORE,g.compressedContent=\\\"\\\",g.crc32=0):a._data.compressionMethod===b.magic?g.compressedContent=a._data.getCompressedContent():(d=a._data.getContent(),g.compressedContent=b.compress(e.transformTo(b.compressInputType,d),c))):(d=q(a),d&&0!==d.length&&!a.dir||(b=j.STORE,d=\\\"\\\"),g.uncompressedSize=d.length,g.crc32=f(d),g.compressedContent=b.compress(e.transformTo(b.compressInputType,d),c)),g.compressedSize=g.compressedContent.length,g.compressionMethod=b.magic,g},A=function(a,b){var c=a;return a||(c=b?16893:33204),(65535&c)<<16},B=function(a,b){return 63&(a||0)},C=function(a,b,c,d,h,i){var j,k,l,n,o=(c.compressedContent,i!==m.utf8encode),p=e.transformTo(\\\"string\\\",i(b.name)),q=e.transformTo(\\\"string\\\",m.utf8encode(b.name)),r=b.comment||\\\"\\\",s=e.transformTo(\\\"string\\\",i(r)),u=e.transformTo(\\\"string\\\",m.utf8encode(r)),v=q.length!==b.name.length,w=u.length!==r.length,x=b.options,y=\\\"\\\",z=\\\"\\\",C=\\\"\\\";l=b._initialMetadata.dir!==b.dir?b.dir:x.dir,n=b._initialMetadata.date!==b.date?b.date:x.date;var D=0,E=0;l&&(D|=16),\\\"UNIX\\\"===h?(E=798,D|=A(b.unixPermissions,l)):(E=20,D|=B(b.dosPermissions,l)),j=n.getHours(),j<<=6,j|=n.getMinutes(),j<<=5,j|=n.getSeconds()/2,k=n.getFullYear()-1980,k<<=4,k|=n.getMonth()+1,k<<=5,k|=n.getDate(),v&&(z=t(1,1)+t(f(p),4)+q,y+=\\\"up\\\"+t(z.length,2)+z),w&&(C=t(1,1)+t(this.crc32(s),4)+u,y+=\\\"uc\\\"+t(C.length,2)+C);var F=\\\"\\\";F+=\\\"\\\\n\\\\0\\\",F+=o||!v&&!w?\\\"\\\\0\\\\0\\\":\\\"\\\\0\\\\b\\\",F+=c.compressionMethod,F+=t(j,2),F+=t(k,2),F+=t(c.crc32,4),F+=t(c.compressedSize,4),F+=t(c.uncompressedSize,4),F+=t(p.length,2),F+=t(y.length,2);var G=g.LOCAL_FILE_HEADER+F+p+y,H=g.CENTRAL_FILE_HEADER+t(E,2)+F+t(s.length,2)+\\\"\\\\0\\\\0\\\\0\\\\0\\\"+t(D,4)+t(d,4)+p+y+s;return{fileRecord:G,dirRecord:H,compressedObject:c}},D={load:function(a,b){throw new Error(\\\"Load method is not defined. Is the file jszip-load.js included ?\\\")},filter:function(a){var b,c,d,f,g=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],f=new s(d.name,d._data,e.extend(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,f)&&g.push(f));return g},file:function(a,b,c){if(1===arguments.length){if(e.isRegExp(a)){var d=a;return this.filter(function(a,b){return!b.dir&&d.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(e.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=y.call(this,b),d=this.clone();return d.root=c.name,d},remove:function(a){a=this.root+a;var b=this.files[a];if(b||(\\\"/\\\"!=a.slice(-1)&&(a+=\\\"/\\\"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d<c.length;d++)delete this.files[c[d].name];return this},generate:function(a){a=e.extend(a||{},{base64:!0,compression:\\\"STORE\\\",compressionOptions:null,type:\\\"base64\\\",platform:\\\"DOS\\\",comment:null,mimeType:\\\"application/zip\\\",encodeFileName:m.utf8encode}),e.checkSupport(a.type),\\\"darwin\\\"!==a.platform&&\\\"freebsd\\\"!==a.platform&&\\\"linux\\\"!==a.platform&&\\\"sunos\\\"!==a.platform||(a.platform=\\\"UNIX\\\"),\\\"win32\\\"===a.platform&&(a.platform=\\\"DOS\\\");var b,c,d=[],f=0,h=0,k=e.transformTo(\\\"string\\\",a.encodeFileName(a.comment||this.comment||\\\"\\\"));for(var l in this.files)if(this.files.hasOwnProperty(l)){var p=this.files[l],q=p.options.compression||a.compression.toUpperCase(),r=j[q];if(!r)throw new Error(q+\\\" is not a valid compression method !\\\");var s=p.options.compressionOptions||a.compressionOptions||{},u=z.call(this,p,r,s),v=C.call(this,l,p,u,f,a.platform,a.encodeFileName);f+=v.fileRecord.length+u.compressedSize,h+=v.dirRecord.length,d.push(v)}var w=\\\"\\\";w=g.CENTRAL_DIRECTORY_END+\\\"\\\\0\\\\0\\\\0\\\\0\\\"+t(d.length,2)+t(d.length,2)+t(h,4)+t(f,4)+t(k.length,2)+k;var x=a.type.toLowerCase();for(b=\\\"uint8array\\\"===x||\\\"arraybuffer\\\"===x||\\\"blob\\\"===x||\\\"nodebuffer\\\"===x?new o(f+h+w.length):new n(f+h+w.length),c=0;c<d.length;c++)b.append(d[c].fileRecord),b.append(d[c].compressedObject.compressedContent);for(c=0;c<d.length;c++)b.append(d[c].dirRecord);b.append(w);var y=b.finalize();switch(a.type.toLowerCase()){case\\\"uint8array\\\":case\\\"arraybuffer\\\":case\\\"nodebuffer\\\":return e.transformTo(a.type.toLowerCase(),y);case\\\"blob\\\":return e.arrayBuffer2Blob(e.transformTo(\\\"arraybuffer\\\",y),a.mimeType);case\\\"base64\\\":return a.base64?i.encode(y):y;default:return y}},crc32:function(a,b){return f(a,b)},utf8encode:function(a){return e.transformTo(\\\"string\\\",m.utf8encode(a))},utf8decode:function(a){return m.utf8decode(a)}};b.exports=D},{\\\"./base64\\\":2,\\\"./compressedObject\\\":3,\\\"./compressions\\\":4,\\\"./crc32\\\":5,\\\"./defaults\\\":7,\\\"./nodeBuffer\\\":12,\\\"./signature\\\":15,\\\"./stringWriter\\\":17,\\\"./support\\\":18,\\\"./uint8ArrayWriter\\\":20,\\\"./utf8\\\":21,\\\"./utils\\\":22}],15:[function(a,b,c){\\\"use strict\\\";c.LOCAL_FILE_HEADER=\\\"PK\\u0003\\u0004\\\",c.CENTRAL_FILE_HEADER=\\\"PK\\u0001\\u0002\\\",c.CENTRAL_DIRECTORY_END=\\\"PK\\u0005\\u0006\\\",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\\\"PK\\u0006\\u0007\\\",c.ZIP64_CENTRAL_DIRECTORY_END=\\\"PK\\u0006\\u0006\\\",c.DATA_DESCRIPTOR=\\\"PK\\u0007\\\\b\\\"},{}],16:[function(a,b,c){\\\"use strict\\\";function d(a,b){this.data=a,b||(this.data=f.string2binary(this.data)),this.length=this.data.length,this.index=0,this.zero=0}var e=a(\\\"./dataReader\\\"),f=a(\\\"./utils\\\");d.prototype=new e,d.prototype.byteAt=function(a){return this.data.charCodeAt(this.zero+a)},d.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)-this.zero},d.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{\\\"./dataReader\\\":6,\\\"./utils\\\":22}],17:[function(a,b,c){\\\"use strict\\\";var d=a(\\\"./utils\\\"),e=function(){this.data=[]};e.prototype={append:function(a){a=d.transformTo(\\\"string\\\",a),this.data.push(a)},finalize:function(){return this.data.join(\\\"\\\")}},b.exports=e},{\\\"./utils\\\":22}],18:[function(a,b,c){(function(a){\\\"use strict\\\";if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer=\\\"undefined\\\"!=typeof ArrayBuffer&&\\\"undefined\\\"!=typeof Uint8Array,c.nodebuffer=\\\"undefined\\\"!=typeof a,c.uint8array=\\\"undefined\\\"!=typeof Uint8Array,\\\"undefined\\\"==typeof ArrayBuffer)c.blob=!1;else{var b=new ArrayBuffer(0);try{c.blob=0===new Blob([b],{type:\\\"application/zip\\\"}).size}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;f.append(b),c.blob=0===f.getBlob(\\\"application/zip\\\").size}catch(d){c.blob=!1}}}}).call(this,\\\"undefined\\\"!=typeof Buffer?Buffer:void 0)},{}],19:[function(a,b,c){\\\"use strict\\\";function d(a){a&&(this.data=a,this.length=this.data.length,this.index=0,this.zero=0)}var e=a(\\\"./arrayReader\\\");d.prototype=new e,d.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.zero+this.index,this.zero+this.index+a);return this.index+=a,b},b.exports=d},{\\\"./arrayReader\\\":1}],20:[function(a,b,c){\\\"use strict\\\";var d=a(\\\"./utils\\\"),e=function(a){this.data=new Uint8Array(a),this.index=0};e.prototype={append:function(a){0!==a.length&&(a=d.transformTo(\\\"uint8array\\\",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=e},{\\\"./utils\\\":22}],21:[function(a,b,c){\\\"use strict\\\";for(var d=a(\\\"./utils\\\"),e=a(\\\"./support\\\"),f=a(\\\"./nodeBuffer\\\"),g=new Array(256),h=0;h<256;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;f<h;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=c<128?1:c<2048?2:c<65536?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;g<i;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),c<128?b[g++]=c:c<2048?(b[g++]=192|c>>>6,b[g++]=128|63&c):c<65536?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;b<h;)if(e=a[b++],e<128)i[c++]=e;else if(f=g[e],f>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&b<h;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:e<65536?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,\\\"utf-8\\\"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo(\\\"nodebuffer\\\",a).toString(\\\"utf-8\\\");a=d.transformTo(e.uint8array?\\\"uint8array\\\":\\\"array\\\",a);for(var b=[],c=0,f=a.length,g=65536;c<f;){var h=j(a,Math.min(c+g,f));e.uint8array?b.push(k(a.subarray(c,h))):b.push(k(a.slice(c,h))),c=h}return b.join(\\\"\\\")}},{\\\"./nodeBuffer\\\":12,\\\"./support\\\":18,\\\"./utils\\\":22}],22:[function(a,b,c){\\\"use strict\\\";function d(a){return a}function e(a,b){for(var c=0;c<a.length;++c)b[c]=255&a.charCodeAt(c);return b}function f(a){var b=65536,d=[],e=a.length,f=c.getTypeOf(a),g=0,h=!0;try{switch(f){case\\\"uint8array\\\":String.fromCharCode.apply(null,new Uint8Array(0));break;case\\\"nodebuffer\\\":String.fromCharCode.apply(null,j(0))}}catch(i){h=!1}if(!h){for(var k=\\\"\\\",l=0;l<a.length;l++)k+=String.fromCharCode(a[l]);return k}for(;g<e&&b>1;)try{\\\"array\\\"===f||\\\"nodebuffer\\\"===f?d.push(String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e)))):d.push(String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(i){b=Math.floor(b/2)}return d.join(\\\"\\\")}function g(a,b){for(var c=0;c<a.length;c++)b[c]=a[c];return b}var h=a(\\\"./support\\\"),i=a(\\\"./compressions\\\"),j=a(\\\"./nodeBuffer\\\");c.string2binary=function(a){for(var b=\\\"\\\",c=0;c<a.length;c++)b+=String.fromCharCode(255&a.charCodeAt(c));return b},c.arrayBuffer2Blob=function(a,b){c.checkSupport(\\\"blob\\\"),b=b||\\\"application/zip\\\";try{return new Blob([a],{type:b})}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;return f.append(a),f.getBlob(b)}catch(d){throw new Error(\\\"Bug : can't construct the Blob.\\\")}}},c.applyFromCharCode=f;var k={};k.string={string:d,array:function(a){return e(a,new Array(a.length))},arraybuffer:function(a){return k.string.uint8array(a).buffer},uint8array:function(a){return e(a,new Uint8Array(a.length))},nodebuffer:function(a){return e(a,j(a.length))}},k.array={string:f,array:d,arraybuffer:function(a){return new Uint8Array(a).buffer},uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(a)}},k.arraybuffer={string:function(a){return f(new Uint8Array(a))},array:function(a){return g(new Uint8Array(a),new Array(a.byteLength))},arraybuffer:d,uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(new Uint8Array(a))}},k.uint8array={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return a.buffer},uint8array:d,nodebuffer:function(a){return j(a)}},k.nodebuffer={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return k.nodebuffer.uint8array(a).buffer},uint8array:function(a){return g(a,new Uint8Array(a.length))},nodebuffer:d},c.transformTo=function(a,b){if(b||(b=\\\"\\\"),!a)return b;c.checkSupport(a);var d=c.getTypeOf(b),e=k[d][a](b);return e},c.getTypeOf=function(a){return\\\"string\\\"==typeof a?\\\"string\\\":\\\"[object Array]\\\"===Object.prototype.toString.call(a)?\\\"array\\\":h.nodebuffer&&j.test(a)?\\\"nodebuffer\\\":h.uint8array&&a instanceof Uint8Array?\\\"uint8array\\\":h.arraybuffer&&a instanceof ArrayBuffer?\\\"arraybuffer\\\":void 0},c.checkSupport=function(a){var b=h[a.toLowerCase()];if(!b)throw new Error(a+\\\" is not supported by this browser\\\")},c.MAX_VALUE_16BITS=65535,c.MAX_VALUE_32BITS=-1,c.pretty=function(a){var b,c,d=\\\"\\\";for(c=0;c<(a||\\\"\\\").length;c++)b=a.charCodeAt(c),d+=\\\"\\\\\\\\x\\\"+(b<16?\\\"0\\\":\\\"\\\")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return\\\"[object RegExp]\\\"===Object.prototype.toString.call(a)},c.extend=function(){var a,b,c={};for(a=0;a<arguments.length;a++)for(b in arguments[a])arguments[a].hasOwnProperty(b)&&\\\"undefined\\\"==typeof c[b]&&(c[b]=arguments[a][b]);return c}},{\\\"./compressions\\\":4,\\\"./nodeBuffer\\\":12,\\\"./support\\\":18}],23:[function(a,b,c){\\\"use strict\\\";function d(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var e=a(\\\"./stringReader\\\"),f=a(\\\"./nodeBufferReader\\\"),g=a(\\\"./uint8ArrayReader\\\"),h=a(\\\"./arrayReader\\\"),i=a(\\\"./utils\\\"),j=a(\\\"./signature\\\"),k=a(\\\"./zipEntry\\\"),l=a(\\\"./support\\\");a(\\\"./object\\\");d.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error(\\\"Corrupted zip or bug : unexpected signature (\\\"+i.pretty(b)+\\\", expected \\\"+i.pretty(a)+\\\")\\\")},isSignature:function(a,b){var c=this.reader.index;this.reader.setIndex(a);var d=this.reader.readString(4),e=d===b;return this.reader.setIndex(c),e},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var a=this.reader.readData(this.zipCommentLength),b=l.uint8array?\\\"uint8array\\\":\\\"array\\\",c=i.transformTo(b,a);this.zipComment=this.loadOptions.decodeFileName(c)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;e<d;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error(\\\"Multi-volumes zip are not supported\\\")},readLocalFiles:function(){var a,b;for(a=0;a<this.files.length;a++)b=this.files[a],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(j.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8(),b.processAttributes()},readCentralDir:function(){var a;for(this.reader.setIndex(this.centralDirOffset);this.reader.readString(4)===j.CENTRAL_FILE_HEADER;)a=new k({zip64:this.zip64},this.loadOptions),a.readCentralPart(this.reader),this.files.push(a);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\\\"Corrupted zip or bug: expected \\\"+this.centralDirRecords+\\\" records in central dir, got \\\"+this.files.length)},readEndOfCentral:function(){var a=this.reader.lastIndexOfSignature(j.CENTRAL_DIRECTORY_END);if(a<0){var b=!this.isSignature(0,j.LOCAL_FILE_HEADER);throw b?new Error(\\\"Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html\\\"):new Error(\\\"Corrupted zip : can't find end of central directory\\\")}this.reader.setIndex(a);var c=a;if(this.checkSignature(j.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(j.ZIP64_CENTRAL_DIRECTORY_LOCATOR),a<0)throw new Error(\\\"Corrupted zip : can't find the ZIP64 end of central directory locator\\\");if(this.reader.setIndex(a),this.checkSignature(j.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,j.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(j.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\\\"Corrupted zip : can't find the ZIP64 end of central directory\\\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(j.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var d=this.centralDirOffset+this.centralDirSize;this.zip64&&(d+=20,d+=12+this.zip64EndOfCentralSize);var e=c-d;if(e>0)this.isSignature(c,j.CENTRAL_FILE_HEADER)||(this.reader.zero=e);else if(e<0)throw new Error(\\\"Corrupted zip: missing \\\"+Math.abs(e)+\\\" bytes.\\\")},prepareReader:function(a){var b=i.getTypeOf(a);if(i.checkSupport(b),\\\"string\\\"!==b||l.uint8array)if(\\\"nodebuffer\\\"===b)this.reader=new f(a);else if(l.uint8array)this.reader=new g(i.transformTo(\\\"uint8array\\\",a));else{if(!l.array)throw new Error(\\\"Unexpected error: unsupported type '\\\"+b+\\\"'\\\");this.reader=new h(i.transformTo(\\\"array\\\",a))}else this.reader=new e(a,this.loadOptions.optimizedBinaryString)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=d},{\\\"./arrayReader\\\":1,\\\"./nodeBufferReader\\\":13,\\\"./object\\\":14,\\\"./signature\\\":15,\\\"./stringReader\\\":16,\\\"./support\\\":18,\\\"./uint8ArrayReader\\\":19,\\\"./utils\\\":22,\\\"./zipEntry\\\":24}],24:[function(a,b,c){\\\"use strict\\\";function d(a,b){this.options=a,this.loadOptions=b}var e=a(\\\"./stringReader\\\"),f=a(\\\"./utils\\\"),g=a(\\\"./compressedObject\\\"),h=a(\\\"./object\\\"),i=a(\\\"./support\\\"),j=0,k=3;d.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},prepareCompressedContent:function(a,b,c){return function(){var d=a.index;a.setIndex(b);var e=a.readData(c);return a.setIndex(d),e}},prepareContent:function(a,b,c,d,e){return function(){var a=f.transformTo(d.uncompressInputType,this.getCompressedContent()),b=d.uncompress(a);if(b.length!==e)throw new Error(\\\"Bug : uncompressed data size mismatch\\\");return b}},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readData(this.fileNameLength),a.skip(c),this.compressedSize==-1||this.uncompressedSize==-1)throw new Error(\\\"Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)\\\");if(b=f.findCompression(this.compressionMethod),null===b)throw new Error(\\\"Corrupted zip : compression \\\"+f.pretty(this.compressionMethod)+\\\" unknown (inner file : \\\"+f.transformTo(\\\"string\\\",this.fileName)+\\\")\\\");if(this.decompressed=new g,this.decompressed.compressedSize=this.compressedSize,this.decompressed.uncompressedSize=this.uncompressedSize,this.decompressed.crc32=this.crc32,this.decompressed.compressionMethod=this.compressionMethod,this.decompressed.getCompressedContent=this.prepareCompressedContent(a,a.index,this.compressedSize,b),this.decompressed.getContent=this.prepareContent(a,a.index,this.compressedSize,b,this.uncompressedSize),this.loadOptions.checkCRC32&&(this.decompressed=f.transformTo(\\\"string\\\",this.decompressed.getContent()),h.crc32(this.decompressed)!==this.crc32))throw new Error(\\\"Corrupted zip : CRC32 mismatch\\\");\\n},readCentralPart:function(a){if(this.versionMadeBy=a.readInt(2),this.versionNeeded=a.readInt(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4),this.fileNameLength=a.readInt(2),this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error(\\\"Encrypted zip are not supported\\\");this.fileName=a.readData(this.fileNameLength),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var a=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),a===j&&(this.dosPermissions=63&this.externalFileAttributes),a===k&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\\\"/\\\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(a){if(this.extraFields[1]){var b=new e(this.extraFields[1].value);this.uncompressedSize===f.MAX_VALUE_32BITS&&(this.uncompressedSize=b.readInt(8)),this.compressedSize===f.MAX_VALUE_32BITS&&(this.compressedSize=b.readInt(8)),this.localHeaderOffset===f.MAX_VALUE_32BITS&&(this.localHeaderOffset=b.readInt(8)),this.diskNumberStart===f.MAX_VALUE_32BITS&&(this.diskNumberStart=b.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index;for(this.extraFields=this.extraFields||{};a.index<e+this.extraFieldsLength;)b=a.readInt(2),c=a.readInt(2),d=a.readString(c),this.extraFields[b]={id:b,length:c,value:d}},handleUTF8:function(){var a=i.uint8array?\\\"uint8array\\\":\\\"array\\\";if(this.useUTF8())this.fileNameStr=h.utf8decode(this.fileName),this.fileCommentStr=h.utf8decode(this.fileComment);else{var b=this.findExtraFieldUnicodePath();if(null!==b)this.fileNameStr=b;else{var c=f.transformTo(a,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(c)}var d=this.findExtraFieldUnicodeComment();if(null!==d)this.fileCommentStr=d;else{var e=f.transformTo(a,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(e)}}},findExtraFieldUnicodePath:function(){var a=this.extraFields[28789];if(a){var b=new e(a.value);return 1!==b.readInt(1)?null:h.crc32(this.fileName)!==b.readInt(4)?null:h.utf8decode(b.readString(a.length-5))}return null},findExtraFieldUnicodeComment:function(){var a=this.extraFields[25461];if(a){var b=new e(a.value);return 1!==b.readInt(1)?null:h.crc32(this.fileComment)!==b.readInt(4)?null:h.utf8decode(b.readString(a.length-5))}return null}},b.exports=d},{\\\"./compressedObject\\\":3,\\\"./object\\\":14,\\\"./stringReader\\\":16,\\\"./support\\\":18,\\\"./utils\\\":22}],25:[function(a,b,c){\\\"use strict\\\";var d=a(\\\"./lib/utils/common\\\").assign,e=a(\\\"./lib/deflate\\\"),f=a(\\\"./lib/inflate\\\"),g=a(\\\"./lib/zlib/constants\\\"),h={};d(h,e,f,g),b.exports=h},{\\\"./lib/deflate\\\":26,\\\"./lib/inflate\\\":27,\\\"./lib/utils/common\\\":28,\\\"./lib/zlib/constants\\\":31}],26:[function(a,b,c){\\\"use strict\\\";function d(a){if(!(this instanceof d))return new d(a);this.options=i.assign({level:s,method:u,chunkSize:16384,windowBits:15,memLevel:8,strategy:t,to:\\\"\\\"},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg=\\\"\\\",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=h.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==p)throw new Error(k[c]);if(b.header&&h.deflateSetHeader(this.strm,b.header),b.dictionary){var e;if(e=\\\"string\\\"==typeof b.dictionary?j.string2buf(b.dictionary):\\\"[object ArrayBuffer]\\\"===m.call(b.dictionary)?new Uint8Array(b.dictionary):b.dictionary,c=h.deflateSetDictionary(this.strm,e),c!==p)throw new Error(k[c]);this._dict_set=!0}}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}function g(a,b){return b=b||{},b.gzip=!0,e(a,b)}var h=a(\\\"./zlib/deflate\\\"),i=a(\\\"./utils/common\\\"),j=a(\\\"./utils/strings\\\"),k=a(\\\"./zlib/messages\\\"),l=a(\\\"./zlib/zstream\\\"),m=Object.prototype.toString,n=0,o=4,p=0,q=1,r=2,s=-1,t=0,u=8;d.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?o:n,\\\"string\\\"==typeof a?e.input=j.string2buf(a):\\\"[object ArrayBuffer]\\\"===m.call(a)?e.input=new Uint8Array(a):e.input=a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new i.Buf8(f),e.next_out=0,e.avail_out=f),c=h.deflate(e,d),c!==q&&c!==p)return this.onEnd(c),this.ended=!0,!1;0!==e.avail_out&&(0!==e.avail_in||d!==o&&d!==r)||(\\\"string\\\"===this.options.to?this.onData(j.buf2binstring(i.shrinkBuf(e.output,e.next_out))):this.onData(i.shrinkBuf(e.output,e.next_out)))}while((e.avail_in>0||0===e.avail_out)&&c!==q);return d===o?(c=h.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===p):d!==r||(this.onEnd(p),e.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===p&&(\\\"string\\\"===this.options.to?this.result=this.chunks.join(\\\"\\\"):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=d,c.deflate=e,c.deflateRaw=f,c.gzip=g},{\\\"./utils/common\\\":28,\\\"./utils/strings\\\":29,\\\"./zlib/deflate\\\":33,\\\"./zlib/messages\\\":38,\\\"./zlib/zstream\\\":40}],27:[function(a,b,c){\\\"use strict\\\";function d(a){if(!(this instanceof d))return new d(a);this.options=h.assign({chunkSize:16384,windowBits:0,to:\\\"\\\"},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg=\\\"\\\",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var c=g.inflateInit2(this.strm,b.windowBits);if(c!==j.Z_OK)throw new Error(k[c]);this.header=new m,g.inflateGetHeader(this.strm,this.header)}function e(a,b){var c=new d(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function f(a,b){return b=b||{},b.raw=!0,e(a,b)}var g=a(\\\"./zlib/inflate\\\"),h=a(\\\"./utils/common\\\"),i=a(\\\"./utils/strings\\\"),j=a(\\\"./zlib/constants\\\"),k=a(\\\"./zlib/messages\\\"),l=a(\\\"./zlib/zstream\\\"),m=a(\\\"./zlib/gzheader\\\"),n=Object.prototype.toString;d.prototype.push=function(a,b){var c,d,e,f,k,l,m=this.strm,o=this.options.chunkSize,p=this.options.dictionary,q=!1;if(this.ended)return!1;d=b===~~b?b:b===!0?j.Z_FINISH:j.Z_NO_FLUSH,\\\"string\\\"==typeof a?m.input=i.binstring2buf(a):\\\"[object ArrayBuffer]\\\"===n.call(a)?m.input=new Uint8Array(a):m.input=a,m.next_in=0,m.avail_in=m.input.length;do{if(0===m.avail_out&&(m.output=new h.Buf8(o),m.next_out=0,m.avail_out=o),c=g.inflate(m,j.Z_NO_FLUSH),c===j.Z_NEED_DICT&&p&&(l=\\\"string\\\"==typeof p?i.string2buf(p):\\\"[object ArrayBuffer]\\\"===n.call(p)?new Uint8Array(p):p,c=g.inflateSetDictionary(this.strm,l)),c===j.Z_BUF_ERROR&&q===!0&&(c=j.Z_OK,q=!1),c!==j.Z_STREAM_END&&c!==j.Z_OK)return this.onEnd(c),this.ended=!0,!1;m.next_out&&(0!==m.avail_out&&c!==j.Z_STREAM_END&&(0!==m.avail_in||d!==j.Z_FINISH&&d!==j.Z_SYNC_FLUSH)||(\\\"string\\\"===this.options.to?(e=i.utf8border(m.output,m.next_out),f=m.next_out-e,k=i.buf2string(m.output,e),m.next_out=f,m.avail_out=o-f,f&&h.arraySet(m.output,m.output,e,f,0),this.onData(k)):this.onData(h.shrinkBuf(m.output,m.next_out)))),0===m.avail_in&&0===m.avail_out&&(q=!0)}while((m.avail_in>0||0===m.avail_out)&&c!==j.Z_STREAM_END);return c===j.Z_STREAM_END&&(d=j.Z_FINISH),d===j.Z_FINISH?(c=g.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===j.Z_OK):d!==j.Z_SYNC_FLUSH||(this.onEnd(j.Z_OK),m.avail_out=0,!0)},d.prototype.onData=function(a){this.chunks.push(a)},d.prototype.onEnd=function(a){a===j.Z_OK&&(\\\"string\\\"===this.options.to?this.result=this.chunks.join(\\\"\\\"):this.result=h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=d,c.inflate=e,c.inflateRaw=f,c.ungzip=e},{\\\"./utils/common\\\":28,\\\"./utils/strings\\\":29,\\\"./zlib/constants\\\":31,\\\"./zlib/gzheader\\\":34,\\\"./zlib/inflate\\\":36,\\\"./zlib/messages\\\":38,\\\"./zlib/zstream\\\":40}],28:[function(a,b,c){\\\"use strict\\\";var d=\\\"undefined\\\"!=typeof Uint8Array&&\\\"undefined\\\"!=typeof Uint16Array&&\\\"undefined\\\"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if(\\\"object\\\"!=typeof c)throw new TypeError(c+\\\"must be non-object\\\");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;f<d;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;b<c;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;b<c;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;f<d;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],29:[function(a,b,c){\\\"use strict\\\";function d(a,b){if(b<65537&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c=\\\"\\\",d=0;d<b;d++)c+=String.fromCharCode(a[d]);return c}var e=a(\\\"./common\\\"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;j<256;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;f<h;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=c<128?1:c<2048?2:c<65536?3:4;for(b=new e.Buf8(i),g=0,f=0;g<i;f++)c=a.charCodeAt(f),55296===(64512&c)&&f+1<h&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),c<128?b[g++]=c:c<2048?(b[g++]=192|c>>>6,b[g++]=128|63&c):c<65536?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;c<d;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;c<h;)if(f=a[c++],f<128)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&c<h;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:f<65536?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return c<0?b:0===c?b:c+i[a[c]]>b?c:b}},{\\\"./common\\\":28}],30:[function(a,b,c){\\\"use strict\\\";function d(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=d},{}],31:[function(a,b,c){\\\"use strict\\\";b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],32:[function(a,b,c){\\\"use strict\\\";function d(){for(var a,b=[],c=0;c<256;c++){a=c;for(var d=0;d<8;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function e(a,b,c,d){var e=f,g=d+c;a^=-1;for(var h=d;h<g;h++)a=a>>>8^e[255&(a^b[h])];return a^-1}var f=d();b.exports=e},{}],33:[function(a,b,c){\\\"use strict\\\";function d(a,b){return a.msg=I[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(E.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){F._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,E.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=G(a.adler,b,e,c):2===a.state.wrap&&(a.adler=H(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-la?a.strstart-(a.w_size-la):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ka,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&f<m);if(d=ka-(m-f),f=m-ka,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-la)){E.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=ja)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+1])&a.hash_mask;a.insert&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+ja-1])&a.hash_mask,a.prev[f&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=f,f++,a.insert--,!(a.lookahead+a.insert<ja)););}while(a.lookahead<la&&0!==a.strm.avail_in)}function n(a,b){var c=65535;for(c>a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===J)return ua;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return ua;if(a.strstart-a.block_start>=a.w_size-la&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?ua:ua}function o(a,b){for(var c,d;;){if(a.lookahead<la){if(m(a),a.lookahead<la&&b===J)return ua;if(0===a.lookahead)break}if(c=0,a.lookahead>=ja&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),0!==c&&a.strstart-c<=a.w_size-la&&(a.match_length=l(a,c)),a.match_length>=ja)if(d=F._tr_tally(a,a.strstart-a.match_start,a.match_length-ja),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=ja){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart;while(0!==--a.match_length);a.strstart++}else a.strstart+=a.match_length,a.match_length=0,a.ins_h=a.window[a.strstart],a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+1])&a.hash_mask;else d=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++;if(d&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=a.strstart<ja-1?a.strstart:ja-1,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function p(a,b){for(var c,d,e;;){if(a.lookahead<la){if(m(a),a.lookahead<la&&b===J)return ua;if(0===a.lookahead)break}if(c=0,a.lookahead>=ja&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),a.prev_length=a.match_length,a.prev_match=a.match_start,a.match_length=ja-1,0!==c&&a.prev_length<a.max_lazy_match&&a.strstart-c<=a.w_size-la&&(a.match_length=l(a,c),a.match_length<=5&&(a.strategy===U||a.match_length===ja&&a.strstart-a.match_start>4096)&&(a.match_length=ja-1)),a.prev_length>=ja&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-ja,d=F._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-ja),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+ja-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart);while(0!==--a.prev_length);if(a.match_available=0,a.match_length=ja-1,a.strstart++,d&&(h(a,!1),0===a.strm.avail_out))return ua}else if(a.match_available){if(d=F._tr_tally(a,0,a.window[a.strstart-1]),d&&h(a,!1),a.strstart++,a.lookahead--,0===a.strm.avail_out)return ua}else a.match_available=1,a.strstart++,a.lookahead--}return a.match_available&&(d=F._tr_tally(a,0,a.window[a.strstart-1]),a.match_available=0),a.insert=a.strstart<ja-1?a.strstart:ja-1,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function q(a,b){for(var c,d,e,f,g=a.window;;){if(a.lookahead<=ka){if(m(a),a.lookahead<=ka&&b===J)return ua;if(0===a.lookahead)break}if(a.match_length=0,a.lookahead>=ja&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ka;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&e<f);a.match_length=ka-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=ja?(c=F._tr_tally(a,1,a.match_length-ja),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===J)return ua;break}if(a.match_length=0,c=F._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return ua}return a.insert=0,b===M?(h(a,!0),0===a.strm.avail_out?wa:xa):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?ua:va}function s(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e}function t(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=D[a.level].max_lazy,a.good_match=D[a.level].good_length,a.nice_match=D[a.level].nice_length,a.max_chain_length=D[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=ja-1,a.match_available=0,a.ins_h=0}function u(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new E.Buf16(2*ha),this.dyn_dtree=new E.Buf16(2*(2*fa+1)),this.bl_tree=new E.Buf16(2*(2*ga+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new E.Buf16(ia+1),this.heap=new E.Buf16(2*ea+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new E.Buf16(2*ea+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=Z,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?na:sa,a.adler=2===b.wrap?0:1,b.last_flush=J,F._tr_init(b),O):d(a,Q)}function w(a){var b=v(a);return b===O&&t(a.state),b}function x(a,b){return a&&a.state?2!==a.state.wrap?Q:(a.state.gzhead=b,O):Q}function y(a,b,c,e,f,g){if(!a)return Q;var h=1;if(b===T&&(b=6),e<0?(h=0,e=-e):e>15&&(h=2,e-=16),f<1||f>_||c!==$||e<8||e>15||b<0||b>9||g<0||g>X)return d(a,Q);8===e&&(e=9);var i=new u;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<<i.w_bits,i.w_mask=i.w_size-1,i.hash_bits=f+7,i.hash_size=1<<i.hash_bits,i.hash_mask=i.hash_size-1,i.hash_shift=~~((i.hash_bits+ja-1)/ja),i.window=new E.Buf8(2*i.w_size),i.head=new E.Buf16(i.hash_size),i.prev=new E.Buf16(i.w_size),i.lit_bufsize=1<<f+6,i.pending_buf_size=4*i.lit_bufsize,i.pending_buf=new E.Buf8(i.pending_buf_size),i.d_buf=1*i.lit_bufsize,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,w(a)}function z(a,b){return y(a,b,$,aa,ba,Y)}function A(a,b){var c,h,k,l;if(!a||!a.state||b>N||b<0)return a?d(a,Q):Q;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===ta&&b!==M)return d(a,0===a.avail_out?S:Q);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===na)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=H(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=oa):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=V||h.level<2?4:0),i(h,ya),h.status=sa);else{var m=$+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=V||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ma),m+=31-m%31,h.status=sa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===oa)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pa)}else h.status=pa;if(h.status===pa)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.name.length?255&h.gzhead.name.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=qa)}else h.status=qa;if(h.status===qa)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.comment.length?255&h.gzhead.comment.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=H(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=ra)}else h.status=ra;if(h.status===ra&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=sa)):h.status=sa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,O}else if(0===a.avail_in&&e(b)<=e(c)&&b!==M)return d(a,S);if(h.status===ta&&0!==a.avail_in)return d(a,S);if(0!==a.avail_in||0!==h.lookahead||b!==J&&h.status!==ta){var o=h.strategy===V?r(h,b):h.strategy===W?q(h,b):D[h.level].func(h,b);if(o!==wa&&o!==xa||(h.status=ta),o===ua||o===wa)return 0===a.avail_out&&(h.last_flush=-1),O;if(o===va&&(b===K?F._tr_align(h):b!==N&&(F._tr_stored_block(h,0,0,!1),b===L&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,O}return b!==M?O:h.wrap<=0?P:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?O:P)}function B(a){var b;return a&&a.state?(b=a.state.status,b!==na&&b!==oa&&b!==pa&&b!==qa&&b!==ra&&b!==sa&&b!==ta?d(a,Q):(a.state=null,b===sa?d(a,R):O)):Q}function C(a,b){var c,d,e,g,h,i,j,k,l=b.length;if(!a||!a.state)return Q;if(c=a.state,g=c.wrap,2===g||1===g&&c.status!==na||c.lookahead)return Q;for(1===g&&(a.adler=G(a.adler,b,l,0)),c.wrap=0,l>=c.w_size&&(0===g&&(f(c.head),c.strstart=0,c.block_start=0,c.insert=0),k=new E.Buf8(c.w_size),E.arraySet(k,b,l-c.w_size,c.w_size,0),b=k,l=c.w_size),h=a.avail_in,i=a.next_in,j=a.input,a.avail_in=l,a.next_in=0,a.input=b,m(c);c.lookahead>=ja;){d=c.strstart,e=c.lookahead-(ja-1);do c.ins_h=(c.ins_h<<c.hash_shift^c.window[d+ja-1])&c.hash_mask,c.prev[d&c.w_mask]=c.head[c.ins_h],c.head[c.ins_h]=d,d++;while(--e);c.strstart=d,c.lookahead=ja-1,m(c)}return c.strstart+=c.lookahead,c.block_start=c.strstart,c.insert=c.lookahead,c.lookahead=0,c.match_length=c.prev_length=ja-1,c.match_available=0,a.next_in=i,a.input=j,a.avail_in=h,c.wrap=g,O}var D,E=a(\\\"../utils/common\\\"),F=a(\\\"./trees\\\"),G=a(\\\"./adler32\\\"),H=a(\\\"./crc32\\\"),I=a(\\\"./messages\\\"),J=0,K=1,L=3,M=4,N=5,O=0,P=1,Q=-2,R=-3,S=-5,T=-1,U=1,V=2,W=3,X=4,Y=0,Z=2,$=8,_=9,aa=15,ba=8,ca=29,da=256,ea=da+1+ca,fa=30,ga=19,ha=2*ea+1,ia=15,ja=3,ka=258,la=ka+ja+1,ma=32,na=42,oa=69,pa=73,qa=91,ra=103,sa=113,ta=666,ua=1,va=2,wa=3,xa=4,ya=3;D=[new s(0,0,0,0,n),new s(4,4,8,4,o),new s(4,5,16,8,o),new s(4,6,32,32,o),new s(4,4,16,16,p),new s(8,16,32,32,p),new s(8,16,128,128,p),new s(8,32,128,256,p),new s(32,128,258,1024,p),new s(32,258,258,4096,p)],c.deflateInit=z,c.deflateInit2=y,c.deflateReset=w,c.deflateResetKeep=v,c.deflateSetHeader=x,c.deflate=A,c.deflateEnd=B,c.deflateSetDictionary=C,c.deflateInfo=\\\"pako deflate (from Nodeca project)\\\"},{\\\"../utils/common\\\":28,\\\"./adler32\\\":30,\\\"./crc32\\\":32,\\\"./messages\\\":38,\\\"./trees\\\":39}],34:[function(a,b,c){\\\"use strict\\\";function d(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\\\"\\\",this.comment=\\\"\\\",this.hcrc=0,this.done=!1}b.exports=d},{}],35:[function(a,b,c){\\\"use strict\\\";var d=30,e=12;b.exports=function(a,b){var c,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;c=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=c.dmax,l=c.wsize,m=c.whave,n=c.wnext,o=c.window,p=c.hold,q=c.bits,r=c.lencode,s=c.distcode,t=(1<<c.lenbits)-1,u=(1<<c.distbits)-1;a:do{q<15&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=r[p&t];b:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<<w)-1)];continue b}if(32&w){c.mode=e;break a}a.msg=\\\"invalid literal/length code\\\",c.mode=d;break a}x=65535&v,w&=15,w&&(q<w&&(p+=B[f++]<<q,q+=8),x+=p&(1<<w)-1,p>>>=w,q-=w),q<15&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=s[p&u];c:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<<w)-1)];continue c}a.msg=\\\"invalid distance code\\\",c.mode=d;break a}if(y=65535&v,w&=15,q<w&&(p+=B[f++]<<q,q+=8,q<w&&(p+=B[f++]<<q,q+=8)),y+=p&(1<<w)-1,y>k){a.msg=\\\"invalid distance too far back\\\",c.mode=d;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&c.sane){a.msg=\\\"invalid distance too far back\\\",c.mode=d;break a}if(z=0,A=o,0===n){if(z+=l-w,w<x){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(n<w){if(z+=l+n-w,w-=n,w<x){x-=w;do C[h++]=o[z++];while(--w);if(z=0,n<x){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,w<x){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(f<g&&h<j);x=q>>3,f-=x,q-=x<<3,p&=(1<<q)-1,a.next_in=f,a.next_out=h,a.avail_in=f<g?5+(g-f):5-(f-g),a.avail_out=h<j?257+(j-h):257-(h-j),c.hold=p,c.bits=q}},{}],36:[function(a,b,c){\\\"use strict\\\";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg=\\\"\\\",b.wrap&&(a.adler=1&b.wrap),b.mode=L,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new s.Buf32(pa),b.distcode=b.distdyn=new s.Buf32(qa),b.sane=1,b.back=-1,D):G}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):G}function h(a,b){var c,d;return a&&a.state?(d=a.state,b<0?(c=0,b=-b):(c=(b>>4)+1,b<48&&(b&=15)),b&&(b<8||b>15)?G:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):G}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==D&&(a.state=null),c):G}function j(a){return i(a,sa)}function k(a){if(ta){var b;for(q=new s.Buf32(512),r=new s.Buf32(32),b=0;b<144;)a.lens[b++]=8;for(;b<256;)a.lens[b++]=9;for(;b<280;)a.lens[b++]=7;for(;b<288;)a.lens[b++]=8;for(w(y,a.lens,0,288,q,0,a.work,{bits:9}),b=0;b<32;)a.lens[b++]=5;w(z,a.lens,0,32,r,0,a.work,{bits:5}),ta=!1}a.lencode=q,a.lenbits=9,a.distcode=r,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<<f.wbits,f.wnext=0,f.whave=0,f.window=new s.Buf8(f.wsize)),d>=f.wsize?(s.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),s.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(s.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave<f.wsize&&(f.whave+=e))),0}function m(a,b){var c,e,f,g,h,i,j,m,n,o,p,q,r,pa,qa,ra,sa,ta,ua,va,wa,xa,ya,za,Aa=0,Ba=new s.Buf8(4),Ca=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!a||!a.state||!a.output||!a.input&&0!==a.avail_in)return G;c=a.state,c.mode===W&&(c.mode=X),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,o=i,p=j,xa=D;a:for(;;)switch(c.mode){case L:if(0===c.wrap){c.mode=X;break}for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(2&c.wrap&&35615===m){c.check=0,Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0),m=0,n=0,c.mode=M;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg=\\\"incorrect header check\\\",c.mode=ma;break}if((15&m)!==K){a.msg=\\\"unknown compression method\\\",c.mode=ma;break}if(m>>>=4,n-=4,wa=(15&m)+8,0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg=\\\"invalid window size\\\",c.mode=ma;break}c.dmax=1<<wa,a.adler=c.check=1,c.mode=512&m?U:W,m=0,n=0;break;case M:for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.flags=m,(255&c.flags)!==K){a.msg=\\\"unknown compression method\\\",c.mode=ma;break}if(57344&c.flags){a.msg=\\\"unknown header flags set\\\",c.mode=ma;break}c.head&&(c.head.text=m>>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=N;case N:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.time=m),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=u(c.check,Ba,4,0)),m=0,n=0,c.mode=O;case O:for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,\\nn+=8}c.head&&(c.head.xflags=255&m,c.head.os=m>>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0,c.mode=P;case P:if(1024&c.flags){for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length=m,c.head&&(c.head.extra_len=m),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=u(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=Q;case Q:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),s.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=R;case R:if(2048&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa));while(wa&&q<i);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=S;case S:if(4096&c.flags){if(0===i)break a;q=0;do wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa));while(wa&&q<i);if(512&c.flags&&(c.check=u(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=T;case T:if(512&c.flags){for(;n<16;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(65535&c.check)){a.msg=\\\"header crc mismatch\\\",c.mode=ma;break}m=0,n=0}c.head&&(c.head.hcrc=c.flags>>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=W;break;case U:for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}a.adler=c.check=d(m),m=0,n=0,c.mode=V;case V:if(0===c.havedict)return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,F;a.adler=c.check=1,c.mode=W;case W:if(b===B||b===C)break a;case X:if(c.last){m>>>=7&n,n-=7&n,c.mode=ja;break}for(;n<3;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}switch(c.last=1&m,m>>>=1,n-=1,3&m){case 0:c.mode=Y;break;case 1:if(k(c),c.mode=ca,b===C){m>>>=2,n-=2;break a}break;case 2:c.mode=_;break;case 3:a.msg=\\\"invalid block type\\\",c.mode=ma}m>>>=2,n-=2;break;case Y:for(m>>>=7&n,n-=7&n;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if((65535&m)!==(m>>>16^65535)){a.msg=\\\"invalid stored block lengths\\\",c.mode=ma;break}if(c.length=65535&m,m=0,n=0,c.mode=Z,b===C)break a;case Z:c.mode=$;case $:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;s.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=W;break;case _:for(;n<14;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.nlen=(31&m)+257,m>>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg=\\\"too many length or distance symbols\\\",c.mode=ma;break}c.have=0,c.mode=aa;case aa:for(;c.have<c.ncode;){for(;n<3;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.lens[Ca[c.have++]]=7&m,m>>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=w(x,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg=\\\"invalid code lengths set\\\",c.mode=ma;break}c.have=0,c.mode=ba;case ba:for(;c.have<c.nlen+c.ndist;){for(;Aa=c.lencode[m&(1<<c.lenbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(sa<16)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m>>>=qa,n-=qa,0===c.have){a.msg=\\\"invalid bit length repeat\\\",c.mode=ma;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg=\\\"invalid bit length repeat\\\",c.mode=ma;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===ma)break;if(0===c.lens[256]){a.msg=\\\"invalid code -- missing end-of-block\\\",c.mode=ma;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=w(y,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg=\\\"invalid literal/lengths set\\\",c.mode=ma;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=w(z,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg=\\\"invalid distances set\\\",c.mode=ma;break}if(c.mode=ca,b===C)break a;case ca:c.mode=da;case da:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,v(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===W&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<<c.lenbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(ra&&0===(240&ra)){for(ta=qa,ua=ra,va=sa;Aa=c.lencode[va+((m&(1<<ta+ua)-1)>>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ia;break}if(32&ra){c.back=-1,c.mode=W;break}if(64&ra){a.msg=\\\"invalid literal/length code\\\",c.mode=ma;break}c.extra=15&ra,c.mode=ea;case ea:if(c.extra){for(za=c.extra;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=fa;case fa:for(;Aa=c.distcode[m&(1<<c.distbits)-1],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(0===(240&ra)){for(ta=qa,ua=ra,va=sa;Aa=c.distcode[va+((m&(1<<ta+ua)-1)>>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(ta+qa<=n);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg=\\\"invalid distance code\\\",c.mode=ma;break}c.offset=sa,c.extra=15&ra,c.mode=ga;case ga:if(c.extra){for(za=c.extra;n<za;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.offset+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg=\\\"invalid distance too far back\\\",c.mode=ma;break}c.mode=ha;case ha:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg=\\\"invalid distance too far back\\\",c.mode=ma;break}q>c.wnext?(q-=c.wnext,r=c.wsize-q):r=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,r=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pa[r++];while(--q);0===c.length&&(c.mode=da);break;case ia:if(0===j)break a;f[h++]=c.length,j--,c.mode=da;break;case ja:if(c.wrap){for(;n<32;){if(0===i)break a;i--,m|=e[g++]<<n,n+=8}if(p-=j,a.total_out+=p,c.total+=p,p&&(a.adler=c.check=c.flags?u(c.check,f,p,h-p):t(c.check,f,p,h-p)),p=j,(c.flags?m:d(m))!==c.check){a.msg=\\\"incorrect data check\\\",c.mode=ma;break}m=0,n=0}c.mode=ka;case ka:if(c.wrap&&c.flags){for(;n<32;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(4294967295&c.total)){a.msg=\\\"incorrect length check\\\",c.mode=ma;break}m=0,n=0}c.mode=la;case la:xa=E;break a;case ma:xa=H;break a;case na:return I;case oa:default:return G}return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,(c.wsize||p!==a.avail_out&&c.mode<ma&&(c.mode<ja||b!==A))&&l(a,a.output,a.next_out,p-a.avail_out)?(c.mode=na,I):(o-=a.avail_in,p-=a.avail_out,a.total_in+=o,a.total_out+=p,c.total+=p,c.wrap&&p&&(a.adler=c.check=c.flags?u(c.check,f,p,a.next_out-p):t(c.check,f,p,a.next_out-p)),a.data_type=c.bits+(c.last?64:0)+(c.mode===W?128:0)+(c.mode===ca||c.mode===Z?256:0),(0===o&&0===p||b===A)&&xa===D&&(xa=J),xa)}function n(a){if(!a||!a.state)return G;var b=a.state;return b.window&&(b.window=null),a.state=null,D}function o(a,b){var c;return a&&a.state?(c=a.state,0===(2&c.wrap)?G:(c.head=b,b.done=!1,D)):G}function p(a,b){var c,d,e,f=b.length;return a&&a.state?(c=a.state,0!==c.wrap&&c.mode!==V?G:c.mode===V&&(d=1,d=t(d,b,f,0),d!==c.check)?H:(e=l(a,b,f,f))?(c.mode=na,I):(c.havedict=1,D)):G}var q,r,s=a(\\\"../utils/common\\\"),t=a(\\\"./adler32\\\"),u=a(\\\"./crc32\\\"),v=a(\\\"./inffast\\\"),w=a(\\\"./inftrees\\\"),x=0,y=1,z=2,A=4,B=5,C=6,D=0,E=1,F=2,G=-2,H=-3,I=-4,J=-5,K=8,L=1,M=2,N=3,O=4,P=5,Q=6,R=7,S=8,T=9,U=10,V=11,W=12,X=13,Y=14,Z=15,$=16,_=17,aa=18,ba=19,ca=20,da=21,ea=22,fa=23,ga=24,ha=25,ia=26,ja=27,ka=28,la=29,ma=30,na=31,oa=32,pa=852,qa=592,ra=15,sa=ra,ta=!0;c.inflateReset=g,c.inflateReset2=h,c.inflateResetKeep=f,c.inflateInit=j,c.inflateInit2=i,c.inflate=m,c.inflateEnd=n,c.inflateGetHeader=o,c.inflateSetDictionary=p,c.inflateInfo=\\\"pako inflate (from Nodeca project)\\\"},{\\\"../utils/common\\\":28,\\\"./adler32\\\":30,\\\"./crc32\\\":32,\\\"./inffast\\\":35,\\\"./inftrees\\\":37}],37:[function(a,b,c){\\\"use strict\\\";var d=a(\\\"../utils/common\\\"),e=15,f=852,g=592,h=0,i=1,j=2,k=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],l=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],m=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],n=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];b.exports=function(a,b,c,o,p,q,r,s){var t,u,v,w,x,y,z,A,B,C=s.bits,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=null,O=0,P=new d.Buf16(e+1),Q=new d.Buf16(e+1),R=null,S=0;for(D=0;D<=e;D++)P[D]=0;for(E=0;E<o;E++)P[b[c+E]]++;for(H=C,G=e;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;F<G&&0===P[F];F++);for(H<F&&(H=F),K=1,D=1;D<=e;D++)if(K<<=1,K-=P[D],K<0)return-1;if(K>0&&(a===h||1!==G))return-1;for(Q[1]=0,D=1;D<e;D++)Q[D+1]=Q[D]+P[D];for(E=0;E<o;E++)0!==b[c+E]&&(r[Q[b[c+E]]++]=E);if(a===h?(N=R=r,y=19):a===i?(N=k,O-=257,R=l,S-=257,y=256):(N=m,R=n,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<<H,w=L-1,a===i&&L>f||a===j&&L>g)return 1;for(var T=0;;){T++,z=D-J,r[E]<y?(A=0,B=r[E]):r[E]>y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<<D-J,u=1<<I,F=u;do u-=t,p[x+(M>>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<<D-1;M&t;)t>>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[c+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<<I;I+J<G&&(K-=P[I+J],!(K<=0));)I++,K<<=1;if(L+=1<<I,a===i&&L>f||a===j&&L>g)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{\\\"../utils/common\\\":28}],38:[function(a,b,c){\\\"use strict\\\";b.exports={2:\\\"need dictionary\\\",1:\\\"stream end\\\",0:\\\"\\\",\\\"-1\\\":\\\"file error\\\",\\\"-2\\\":\\\"stream error\\\",\\\"-3\\\":\\\"data error\\\",\\\"-4\\\":\\\"insufficient memory\\\",\\\"-5\\\":\\\"buffer error\\\",\\\"-6\\\":\\\"incompatible version\\\"}},{}],39:[function(a,b,c){\\\"use strict\\\";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length}function f(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b}function g(a){return a<256?ia[a]:ia[256+(a>>>7)]}function h(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function i(a,b,c){a.bi_valid>X-c?(a.bi_buf|=b<<a.bi_valid&65535,h(a,a.bi_buf),a.bi_buf=b>>X-a.bi_valid,a.bi_valid+=c-X):(a.bi_buf|=b<<a.bi_valid&65535,a.bi_valid+=c)}function j(a,b,c){i(a,c[2*b],c[2*b+1])}function k(a,b){var c=0;do c|=1&a,a>>>=1,c<<=1;while(--b>0);return c>>>1}function l(a){16===a.bi_valid?(h(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function m(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;f<=W;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;c<V;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function n(a,b,c){var d,e,f=new Array(W+1),g=0;for(d=1;d<=W;d++)f[d]=g=g+c[d-1]<<1;for(e=0;e<=b;e++){var h=a[2*e+1];0!==h&&(a[2*e]=k(f[h]++,h))}}function o(){var a,b,c,d,f,g=new Array(W+1);for(c=0,d=0;d<Q-1;d++)for(ka[d]=c,a=0;a<1<<ba[d];a++)ja[c++]=d;for(ja[c-1]=d,f=0,d=0;d<16;d++)for(la[d]=f,a=0;a<1<<ca[d];a++)ia[f++]=d;for(f>>=7;d<T;d++)for(la[d]=f<<7,a=0;a<1<<ca[d]-7;a++)ia[256+f++]=d;for(b=0;b<=W;b++)g[b]=0;for(a=0;a<=143;)ga[2*a+1]=8,a++,g[8]++;for(;a<=255;)ga[2*a+1]=9,a++,g[9]++;for(;a<=279;)ga[2*a+1]=7,a++,g[7]++;for(;a<=287;)ga[2*a+1]=8,a++,g[8]++;for(n(ga,S+1,g),a=0;a<T;a++)ha[2*a+1]=5,ha[2*a]=k(a,5);ma=new e(ga,ba,R+1,S,W),na=new e(ha,ca,0,T,W),oa=new e(new Array(0),da,0,U,Y)}function p(a){var b;for(b=0;b<S;b++)a.dyn_ltree[2*b]=0;for(b=0;b<T;b++)a.dyn_dtree[2*b]=0;for(b=0;b<U;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*Z]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function q(a){a.bi_valid>8?h(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function r(a,b,c,d){q(a),d&&(h(a,c),h(a,~c)),G.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function s(a,b,c,d){var e=2*b,f=2*c;return a[e]<a[f]||a[e]===a[f]&&d[b]<=d[c]}function t(a,b,c){for(var d=a.heap[c],e=c<<1;e<=a.heap_len&&(e<a.heap_len&&s(b,a.heap[e+1],a.heap[e],a.depth)&&e++,!s(b,d,a.heap[e],a.depth));)a.heap[c]=a.heap[e],c=e,e<<=1;a.heap[c]=d}function u(a,b,c){var d,e,f,h,k=0;if(0!==a.last_lit)do d=a.pending_buf[a.d_buf+2*k]<<8|a.pending_buf[a.d_buf+2*k+1],e=a.pending_buf[a.l_buf+k],k++,0===d?j(a,e,b):(f=ja[e],j(a,f+R+1,b),h=ba[f],0!==h&&(e-=ka[f],i(a,e,h)),d--,f=g(d),j(a,f,c),h=ca[f],0!==h&&(d-=la[f],i(a,d,h)));while(k<a.last_lit);j(a,Z,b)}function v(a,b){var c,d,e,f=b.dyn_tree,g=b.stat_desc.static_tree,h=b.stat_desc.has_stree,i=b.stat_desc.elems,j=-1;for(a.heap_len=0,a.heap_max=V,c=0;c<i;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=j<2?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)t(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],t(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,t(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],m(a,b),n(f,j,a.bl_count)}function w(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;d<=c;d++)e=g,g=b[2*(d+1)+1],++h<i&&e===g||(h<j?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*$]++):h<=10?a.bl_tree[2*_]++:a.bl_tree[2*aa]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function x(a,b,c){var d,e,f=-1,g=b[1],h=0,k=7,l=4;for(0===g&&(k=138,l=3),d=0;d<=c;d++)if(e=g,g=b[2*(d+1)+1],!(++h<k&&e===g)){if(h<l){do j(a,e,a.bl_tree);while(0!==--h)}else 0!==e?(e!==f&&(j(a,e,a.bl_tree),h--),j(a,$,a.bl_tree),i(a,h-3,2)):h<=10?(j(a,_,a.bl_tree),i(a,h-3,3)):(j(a,aa,a.bl_tree),i(a,h-11,7));h=0,f=e,0===g?(k=138,l=3):e===g?(k=6,l=3):(k=7,l=4)}}function y(a){var b;for(w(a,a.dyn_ltree,a.l_desc.max_code),w(a,a.dyn_dtree,a.d_desc.max_code),v(a,a.bl_desc),b=U-1;b>=3&&0===a.bl_tree[2*ea[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function z(a,b,c,d){var e;for(i(a,b-257,5),i(a,c-1,5),i(a,d-4,4),e=0;e<d;e++)i(a,a.bl_tree[2*ea[e]+1],3);x(a,a.dyn_ltree,b-1),x(a,a.dyn_dtree,c-1)}function A(a){var b,c=4093624447;for(b=0;b<=31;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return I;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return J;for(b=32;b<R;b++)if(0!==a.dyn_ltree[2*b])return J;return I}function B(a){pa||(o(),pa=!0),a.l_desc=new f(a.dyn_ltree,ma),a.d_desc=new f(a.dyn_dtree,na),a.bl_desc=new f(a.bl_tree,oa),a.bi_buf=0,a.bi_valid=0,p(a)}function C(a,b,c,d){i(a,(L<<1)+(d?1:0),3),r(a,b,c,!0)}function D(a){i(a,M<<1,3),j(a,Z,ga),l(a)}function E(a,b,c,d){var e,f,g=0;a.level>0?(a.strm.data_type===K&&(a.strm.data_type=A(a)),v(a,a.l_desc),v(a,a.d_desc),g=y(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,f<=e&&(e=f)):e=f=c+5,c+4<=e&&b!==-1?C(a,b,c,d):a.strategy===H||f===e?(i(a,(M<<1)+(d?1:0),3),u(a,ga,ha)):(i(a,(N<<1)+(d?1:0),3),z(a,a.l_desc.max_code+1,a.d_desc.max_code+1,g+1),u(a,a.dyn_ltree,a.dyn_dtree)),p(a),d&&q(a)}function F(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ja[c]+R+1)]++,a.dyn_dtree[2*g(b)]++),a.last_lit===a.lit_bufsize-1}var G=a(\\\"../utils/common\\\"),H=4,I=0,J=1,K=2,L=0,M=1,N=2,O=3,P=258,Q=29,R=256,S=R+1+Q,T=30,U=19,V=2*S+1,W=15,X=16,Y=7,Z=256,$=16,_=17,aa=18,ba=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ca=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],da=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],ea=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],fa=512,ga=new Array(2*(S+2));d(ga);var ha=new Array(2*T);d(ha);var ia=new Array(fa);d(ia);var ja=new Array(P-O+1);d(ja);var ka=new Array(Q);d(ka);var la=new Array(T);d(la);var ma,na,oa,pa=!1;c._tr_init=B,c._tr_stored_block=C,c._tr_flush_block=E,c._tr_tally=F,c._tr_align=D},{\\\"../utils/common\\\":28}],40:[function(a,b,c){\\\"use strict\\\";function d(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\\\"\\\",this.state=null,this.data_type=2,this.adler=0}b.exports=d},{}]},{},[10])(10)});\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/jszip/jszip.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/jszip/license\": {\n \"text\": \"JSZip is dual licensed. You may use it under the MIT license *or* the GPLv3\\nlicense.\\n\\nThe MIT License\\n===============\\n\\nCopyright (c) 2009-2014 Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\"Software\\\"), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is\\nfurnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in\\nall copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\\nTHE SOFTWARE.\\n\\n\\nGPL version 3\\n=============\\n\\n GNU GENERAL PUBLIC LICENSE\\n Version 3, 29 June 2007\\n\\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\\n Everyone is permitted to copy and distribute verbatim copies\\n of this license document, but changing it is not allowed.\\n\\n Preamble\\n\\n The GNU General Public License is a free, copyleft license for\\nsoftware and other kinds of works.\\n\\n The licenses for most software and other practical works are designed\\nto take away your freedom to share and change the works. By contrast,\\nthe GNU General Public License is intended to guarantee your freedom to\\nshare and change all versions of a program--to make sure it remains free\\nsoftware for all its users. We, the Free Software Foundation, use the\\nGNU General Public License for most of our software; it applies also to\\nany other work released this way by its authors. You can apply it to\\nyour programs, too.\\n\\n When we speak of free software, we are referring to freedom, not\\nprice. Our General Public Licenses are designed to make sure that you\\nhave the freedom to distribute copies of free software (and charge for\\nthem if you wish), that you receive source code or can get it if you\\nwant it, that you can change the software or use pieces of it in new\\nfree programs, and that you know you can do these things.\\n\\n To protect your rights, we need to prevent others from denying you\\nthese rights or asking you to surrender the rights. Therefore, you have\\ncertain responsibilities if you distribute copies of the software, or if\\nyou modify it: responsibilities to respect the freedom of others.\\n\\n For example, if you distribute copies of such a program, whether\\ngratis or for a fee, you must pass on to the recipients the same\\nfreedoms that you received. You must make sure that they, too, receive\\nor can get the source code. And you must show them these terms so they\\nknow their rights.\\n\\n Developers that use the GNU GPL protect your rights with two steps:\\n(1) assert copyright on the software, and (2) offer you this License\\ngiving you legal permission to copy, distribute and/or modify it.\\n\\n For the developers' and authors' protection, the GPL clearly explains\\nthat there is no warranty for this free software. For both users' and\\nauthors' sake, the GPL requires that modified versions be marked as\\nchanged, so that their problems will not be attributed erroneously to\\nauthors of previous versions.\\n\\n Some devices are designed to deny users access to install or run\\nmodified versions of the software inside them, although the manufacturer\\ncan do so. This is fundamentally incompatible with the aim of\\nprotecting users' freedom to change the software. The systematic\\npattern of such abuse occurs in the area of products for individuals to\\nuse, which is precisely where it is most unacceptable. Therefore, we\\nhave designed this version of the GPL to prohibit the practice for those\\nproducts. If such problems arise substantially in other domains, we\\nstand ready to extend this provision to those domains in future versions\\nof the GPL, as needed to protect the freedom of users.\\n\\n Finally, every program is threatened constantly by software patents.\\nStates should not allow patents to restrict development and use of\\nsoftware on general-purpose computers, but in those that do, we wish to\\navoid the special danger that patents applied to a free program could\\nmake it effectively proprietary. To prevent this, the GPL assures that\\npatents cannot be used to render the program non-free.\\n\\n The precise terms and conditions for copying, distribution and\\nmodification follow.\\n\\n TERMS AND CONDITIONS\\n\\n 0. Definitions.\\n\\n \\\"This License\\\" refers to version 3 of the GNU General Public License.\\n\\n \\\"Copyright\\\" also means copyright-like laws that apply to other kinds of\\nworks, such as semiconductor masks.\\n\\n \\\"The Program\\\" refers to any copyrightable work licensed under this\\nLicense. Each licensee is addressed as \\\"you\\\". \\\"Licensees\\\" and\\n\\\"recipients\\\" may be individuals or organizations.\\n\\n To \\\"modify\\\" a work means to copy from or adapt all or part of the work\\nin a fashion requiring copyright permission, other than the making of an\\nexact copy. The resulting work is called a \\\"modified version\\\" of the\\nearlier work or a work \\\"based on\\\" the earlier work.\\n\\n A \\\"covered work\\\" means either the unmodified Program or a work based\\non the Program.\\n\\n To \\\"propagate\\\" a work means to do anything with it that, without\\npermission, would make you directly or secondarily liable for\\ninfringement under applicable copyright law, except executing it on a\\ncomputer or modifying a private copy. Propagation includes copying,\\ndistribution (with or without modification), making available to the\\npublic, and in some countries other activities as well.\\n\\n To \\\"convey\\\" a work means any kind of propagation that enables other\\nparties to make or receive copies. Mere interaction with a user through\\na computer network, with no transfer of a copy, is not conveying.\\n\\n An interactive user interface displays \\\"Appropriate Legal Notices\\\"\\nto the extent that it includes a convenient and prominently visible\\nfeature that (1) displays an appropriate copyright notice, and (2)\\ntells the user that there is no warranty for the work (except to the\\nextent that warranties are provided), that licensees may convey the\\nwork under this License, and how to view a copy of this License. If\\nthe interface presents a list of user commands or options, such as a\\nmenu, a prominent item in the list meets this criterion.\\n\\n 1. Source Code.\\n\\n The \\\"source code\\\" for a work means the preferred form of the work\\nfor making modifications to it. \\\"Object code\\\" means any non-source\\nform of a work.\\n\\n A \\\"Standard Interface\\\" means an interface that either is an official\\nstandard defined by a recognized standards body, or, in the case of\\ninterfaces specified for a particular programming language, one that\\nis widely used among developers working in that language.\\n\\n The \\\"System Libraries\\\" of an executable work include anything, other\\nthan the work as a whole, that (a) is included in the normal form of\\npackaging a Major Component, but which is not part of that Major\\nComponent, and (b) serves only to enable use of the work with that\\nMajor Component, or to implement a Standard Interface for which an\\nimplementation is available to the public in source code form. A\\n\\\"Major Component\\\", in this context, means a major essential component\\n(kernel, window system, and so on) of the specific operating system\\n(if any) on which the executable work runs, or a compiler used to\\nproduce the work, or an object code interpreter used to run it.\\n\\n The \\\"Corresponding Source\\\" for a work in object code form means all\\nthe source code needed to generate, install, and (for an executable\\nwork) run the object code and to modify the work, including scripts to\\ncontrol those activities. However, it does not include the work's\\nSystem Libraries, or general-purpose tools or generally available free\\nprograms which are used unmodified in performing those activities but\\nwhich are not part of the work. For example, Corresponding Source\\nincludes interface definition files associated with source files for\\nthe work, and the source code for shared libraries and dynamically\\nlinked subprograms that the work is specifically designed to require,\\nsuch as by intimate data communication or control flow between those\\nsubprograms and other parts of the work.\\n\\n The Corresponding Source need not include anything that users\\ncan regenerate automatically from other parts of the Corresponding\\nSource.\\n\\n The Corresponding Source for a work in source code form is that\\nsame work.\\n\\n 2. Basic Permissions.\\n\\n All rights granted under this License are granted for the term of\\ncopyright on the Program, and are irrevocable provided the stated\\nconditions are met. This License explicitly affirms your unlimited\\npermission to run the unmodified Program. The output from running a\\ncovered work is covered by this License only if the output, given its\\ncontent, constitutes a covered work. This License acknowledges your\\nrights of fair use or other equivalent, as provided by copyright law.\\n\\n You may make, run and propagate covered works that you do not\\nconvey, without conditions so long as your license otherwise remains\\nin force. You may convey covered works to others for the sole purpose\\nof having them make modifications exclusively for you, or provide you\\nwith facilities for running those works, provided that you comply with\\nthe terms of this License in conveying all material for which you do\\nnot control copyright. Those thus making or running the covered works\\nfor you must do so exclusively on your behalf, under your direction\\nand control, on terms that prohibit them from making any copies of\\nyour copyrighted material outside their relationship with you.\\n\\n Conveying under any other circumstances is permitted solely under\\nthe conditions stated below. Sublicensing is not allowed; section 10\\nmakes it unnecessary.\\n\\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\\n\\n No covered work shall be deemed part of an effective technological\\nmeasure under any applicable law fulfilling obligations under article\\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\\nsimilar laws prohibiting or restricting circumvention of such\\nmeasures.\\n\\n When you convey a covered work, you waive any legal power to forbid\\ncircumvention of technological measures to the extent such circumvention\\nis effected by exercising rights under this License with respect to\\nthe covered work, and you disclaim any intention to limit operation or\\nmodification of the work as a means of enforcing, against the work's\\nusers, your or third parties' legal rights to forbid circumvention of\\ntechnological measures.\\n\\n 4. Conveying Verbatim Copies.\\n\\n You may convey verbatim copies of the Program's source code as you\\nreceive it, in any medium, provided that you conspicuously and\\nappropriately publish on each copy an appropriate copyright notice;\\nkeep intact all notices stating that this License and any\\nnon-permissive terms added in accord with section 7 apply to the code;\\nkeep intact all notices of the absence of any warranty; and give all\\nrecipients a copy of this License along with the Program.\\n\\n You may charge any price or no price for each copy that you convey,\\nand you may offer support or warranty protection for a fee.\\n\\n 5. Conveying Modified Source Versions.\\n\\n You may convey a work based on the Program, or the modifications to\\nproduce it from the Program, in the form of source code under the\\nterms of section 4, provided that you also meet all of these conditions:\\n\\n a) The work must carry prominent notices stating that you modified\\n it, and giving a relevant date.\\n\\n b) The work must carry prominent notices stating that it is\\n released under this License and any conditions added under section\\n 7. This requirement modifies the requirement in section 4 to\\n \\\"keep intact all notices\\\".\\n\\n c) You must license the entire work, as a whole, under this\\n License to anyone who comes into possession of a copy. This\\n License will therefore apply, along with any applicable section 7\\n additional terms, to the whole of the work, and all its parts,\\n regardless of how they are packaged. This License gives no\\n permission to license the work in any other way, but it does not\\n invalidate such permission if you have separately received it.\\n\\n d) If the work has interactive user interfaces, each must display\\n Appropriate Legal Notices; however, if the Program has interactive\\n interfaces that do not display Appropriate Legal Notices, your\\n work need not make them do so.\\n\\n A compilation of a covered work with other separate and independent\\nworks, which are not by their nature extensions of the covered work,\\nand which are not combined with it such as to form a larger program,\\nin or on a volume of a storage or distribution medium, is called an\\n\\\"aggregate\\\" if the compilation and its resulting copyright are not\\nused to limit the access or legal rights of the compilation's users\\nbeyond what the individual works permit. Inclusion of a covered work\\nin an aggregate does not cause this License to apply to the other\\nparts of the aggregate.\\n\\n 6. Conveying Non-Source Forms.\\n\\n You may convey a covered work in object code form under the terms\\nof sections 4 and 5, provided that you also convey the\\nmachine-readable Corresponding Source under the terms of this License,\\nin one of these ways:\\n\\n a) Convey the object code in, or embodied in, a physical product\\n (including a physical distribution medium), accompanied by the\\n Corresponding Source fixed on a durable physical medium\\n customarily used for software interchange.\\n\\n b) Convey the object code in, or embodied in, a physical product\\n (including a physical distribution medium), accompanied by a\\n written offer, valid for at least three years and valid for as\\n long as you offer spare parts or customer support for that product\\n model, to give anyone who possesses the object code either (1) a\\n copy of the Corresponding Source for all the software in the\\n product that is covered by this License, on a durable physical\\n medium customarily used for software interchange, for a price no\\n more than your reasonable cost of physically performing this\\n conveying of source, or (2) access to copy the\\n Corresponding Source from a network server at no charge.\\n\\n c) Convey individual copies of the object code with a copy of the\\n written offer to provide the Corresponding Source. This\\n alternative is allowed only occasionally and noncommercially, and\\n only if you received the object code with such an offer, in accord\\n with subsection 6b.\\n\\n d) Convey the object code by offering access from a designated\\n place (gratis or for a charge), and offer equivalent access to the\\n Corresponding Source in the same way through the same place at no\\n further charge. You need not require recipients to copy the\\n Corresponding Source along with the object code. If the place to\\n copy the object code is a network server, the Corresponding Source\\n may be on a different server (operated by you or a third party)\\n that supports equivalent copying facilities, provided you maintain\\n clear directions next to the object code saying where to find the\\n Corresponding Source. Regardless of what server hosts the\\n Corresponding Source, you remain obligated to ensure that it is\\n available for as long as needed to satisfy these requirements.\\n\\n e) Convey the object code using peer-to-peer transmission, provided\\n you inform other peers where the object code and Corresponding\\n Source of the work are being offered to the general public at no\\n charge under subsection 6d.\\n\\n A separable portion of the object code, whose source code is excluded\\nfrom the Corresponding Source as a System Library, need not be\\nincluded in conveying the object code work.\\n\\n A \\\"User Product\\\" is either (1) a \\\"consumer product\\\", which means any\\ntangible personal property which is normally used for personal, family,\\nor household purposes, or (2) anything designed or sold for incorporation\\ninto a dwelling. In determining whether a product is a consumer product,\\ndoubtful cases shall be resolved in favor of coverage. For a particular\\nproduct received by a particular user, \\\"normally used\\\" refers to a\\ntypical or common use of that class of product, regardless of the status\\nof the particular user or of the way in which the particular user\\nactually uses, or expects or is expected to use, the product. A product\\nis a consumer product regardless of whether the product has substantial\\ncommercial, industrial or non-consumer uses, unless such uses represent\\nthe only significant mode of use of the product.\\n\\n \\\"Installation Information\\\" for a User Product means any methods,\\nprocedures, authorization keys, or other information required to install\\nand execute modified versions of a covered work in that User Product from\\na modified version of its Corresponding Source. The information must\\nsuffice to ensure that the continued functioning of the modified object\\ncode is in no case prevented or interfered with solely because\\nmodification has been made.\\n\\n If you convey an object code work under this section in, or with, or\\nspecifically for use in, a User Product, and the conveying occurs as\\npart of a transaction in which the right of possession and use of the\\nUser Product is transferred to the recipient in perpetuity or for a\\nfixed term (regardless of how the transaction is characterized), the\\nCorresponding Source conveyed under this section must be accompanied\\nby the Installation Information. But this requirement does not apply\\nif neither you nor any third party retains the ability to install\\nmodified object code on the User Product (for example, the work has\\nbeen installed in ROM).\\n\\n The requirement to provide Installation Information does not include a\\nrequirement to continue to provide support service, warranty, or updates\\nfor a work that has been modified or installed by the recipient, or for\\nthe User Product in which it has been modified or installed. Access to a\\nnetwork may be denied when the modification itself materially and\\nadversely affects the operation of the network or violates the rules and\\nprotocols for communication across the network.\\n\\n Corresponding Source conveyed, and Installation Information provided,\\nin accord with this section must be in a format that is publicly\\ndocumented (and with an implementation available to the public in\\nsource code form), and must require no special password or key for\\nunpacking, reading or copying.\\n\\n 7. Additional Terms.\\n\\n \\\"Additional permissions\\\" are terms that supplement the terms of this\\nLicense by making exceptions from one or more of its conditions.\\nAdditional permissions that are applicable to the entire Program shall\\nbe treated as though they were included in this License, to the extent\\nthat they are valid under applicable law. If additional permissions\\napply only to part of the Program, that part may be used separately\\nunder those permissions, but the entire Program remains governed by\\nthis License without regard to the additional permissions.\\n\\n When you convey a copy of a covered work, you may at your option\\nremove any additional permissions from that copy, or from any part of\\nit. (Additional permissions may be written to require their own\\nremoval in certain cases when you modify the work.) You may place\\nadditional permissions on material, added by you to a covered work,\\nfor which you have or can give appropriate copyright permission.\\n\\n Notwithstanding any other provision of this License, for material you\\nadd to a covered work, you may (if authorized by the copyright holders of\\nthat material) supplement the terms of this License with terms:\\n\\n a) Disclaiming warranty or limiting liability differently from the\\n terms of sections 15 and 16 of this License; or\\n\\n b) Requiring preservation of specified reasonable legal notices or\\n author attributions in that material or in the Appropriate Legal\\n Notices displayed by works containing it; or\\n\\n c) Prohibiting misrepresentation of the origin of that material, or\\n requiring that modified versions of such material be marked in\\n reasonable ways as different from the original version; or\\n\\n d) Limiting the use for publicity purposes of names of licensors or\\n authors of the material; or\\n\\n e) Declining to grant rights under trademark law for use of some\\n trade names, trademarks, or service marks; or\\n\\n f) Requiring indemnification of licensors and authors of that\\n material by anyone who conveys the material (or modified versions of\\n it) with contractual assumptions of liability to the recipient, for\\n any liability that these contractual assumptions directly impose on\\n those licensors and authors.\\n\\n All other non-permissive additional terms are considered \\\"further\\nrestrictions\\\" within the meaning of section 10. If the Program as you\\nreceived it, or any part of it, contains a notice stating that it is\\ngoverned by this License along with a term that is a further\\nrestriction, you may remove that term. If a license document contains\\na further restriction but permits relicensing or conveying under this\\nLicense, you may add to a covered work material governed by the terms\\nof that license document, provided that the further restriction does\\nnot survive such relicensing or conveying.\\n\\n If you add terms to a covered work in accord with this section, you\\nmust place, in the relevant source files, a statement of the\\nadditional terms that apply to those files, or a notice indicating\\nwhere to find the applicable terms.\\n\\n Additional terms, permissive or non-permissive, may be stated in the\\nform of a separately written license, or stated as exceptions;\\nthe above requirements apply either way.\\n\\n 8. Termination.\\n\\n You may not propagate or modify a covered work except as expressly\\nprovided under this License. Any attempt otherwise to propagate or\\nmodify it is void, and will automatically terminate your rights under\\nthis License (including any patent licenses granted under the third\\nparagraph of section 11).\\n\\n However, if you cease all violation of this License, then your\\nlicense from a particular copyright holder is reinstated (a)\\nprovisionally, unless and until the copyright holder explicitly and\\nfinally terminates your license, and (b) permanently, if the copyright\\nholder fails to notify you of the violation by some reasonable means\\nprior to 60 days after the cessation.\\n\\n Moreover, your license from a particular copyright holder is\\nreinstated permanently if the copyright holder notifies you of the\\nviolation by some reasonable means, this is the first time you have\\nreceived notice of violation of this License (for any work) from that\\ncopyright holder, and you cure the violation prior to 30 days after\\nyour receipt of the notice.\\n\\n Termination of your rights under this section does not terminate the\\nlicenses of parties who have received copies or rights from you under\\nthis License. If your rights have been terminated and not permanently\\nreinstated, you do not qualify to receive new licenses for the same\\nmaterial under section 10.\\n\\n 9. Acceptance Not Required for Having Copies.\\n\\n You are not required to accept this License in order to receive or\\nrun a copy of the Program. Ancillary propagation of a covered work\\noccurring solely as a consequence of using peer-to-peer transmission\\nto receive a copy likewise does not require acceptance. However,\\nnothing other than this License grants you permission to propagate or\\nmodify any covered work. These actions infringe copyright if you do\\nnot accept this License. Therefore, by modifying or propagating a\\ncovered work, you indicate your acceptance of this License to do so.\\n\\n 10. Automatic Licensing of Downstream Recipients.\\n\\n Each time you convey a covered work, the recipient automatically\\nreceives a license from the original licensors, to run, modify and\\npropagate that work, subject to this License. You are not responsible\\nfor enforcing compliance by third parties with this License.\\n\\n An \\\"entity transaction\\\" is a transaction transferring control of an\\norganization, or substantially all assets of one, or subdividing an\\norganization, or merging organizations. If propagation of a covered\\nwork results from an entity transaction, each party to that\\ntransaction who receives a copy of the work also receives whatever\\nlicenses to the work the party's predecessor in interest had or could\\ngive under the previous paragraph, plus a right to possession of the\\nCorresponding Source of the work from the predecessor in interest, if\\nthe predecessor has it or can get it with reasonable efforts.\\n\\n You may not impose any further restrictions on the exercise of the\\nrights granted or affirmed under this License. For example, you may\\nnot impose a license fee, royalty, or other charge for exercise of\\nrights granted under this License, and you may not initiate litigation\\n(including a cross-claim or counterclaim in a lawsuit) alleging that\\nany patent claim is infringed by making, using, selling, offering for\\nsale, or importing the Program or any portion of it.\\n\\n 11. Patents.\\n\\n A \\\"contributor\\\" is a copyright holder who authorizes use under this\\nLicense of the Program or a work on which the Program is based. The\\nwork thus licensed is called the contributor's \\\"contributor version\\\".\\n\\n A contributor's \\\"essential patent claims\\\" are all patent claims\\nowned or controlled by the contributor, whether already acquired or\\nhereafter acquired, that would be infringed by some manner, permitted\\nby this License, of making, using, or selling its contributor version,\\nbut do not include claims that would be infringed only as a\\nconsequence of further modification of the contributor version. For\\npurposes of this definition, \\\"control\\\" includes the right to grant\\npatent sublicenses in a manner consistent with the requirements of\\nthis License.\\n\\n Each contributor grants you a non-exclusive, worldwide, royalty-free\\npatent license under the contributor's essential patent claims, to\\nmake, use, sell, offer for sale, import and otherwise run, modify and\\npropagate the contents of its contributor version.\\n\\n In the following three paragraphs, a \\\"patent license\\\" is any express\\nagreement or commitment, however denominated, not to enforce a patent\\n(such as an express permission to practice a patent or covenant not to\\nsue for patent infringement). To \\\"grant\\\" such a patent license to a\\nparty means to make such an agreement or commitment not to enforce a\\npatent against the party.\\n\\n If you convey a covered work, knowingly relying on a patent license,\\nand the Corresponding Source of the work is not available for anyone\\nto copy, free of charge and under the terms of this License, through a\\npublicly available network server or other readily accessible means,\\nthen you must either (1) cause the Corresponding Source to be so\\navailable, or (2) arrange to deprive yourself of the benefit of the\\npatent license for this particular work, or (3) arrange, in a manner\\nconsistent with the requirements of this License, to extend the patent\\nlicense to downstream recipients. \\\"Knowingly relying\\\" means you have\\nactual knowledge that, but for the patent license, your conveying the\\ncovered work in a country, or your recipient's use of the covered work\\nin a country, would infringe one or more identifiable patents in that\\ncountry that you have reason to believe are valid.\\n\\n If, pursuant to or in connection with a single transaction or\\narrangement, you convey, or propagate by procuring conveyance of, a\\ncovered work, and grant a patent license to some of the parties\\nreceiving the covered work authorizing them to use, propagate, modify\\nor convey a specific copy of the covered work, then the patent license\\nyou grant is automatically extended to all recipients of the covered\\nwork and works based on it.\\n\\n A patent license is \\\"discriminatory\\\" if it does not include within\\nthe scope of its coverage, prohibits the exercise of, or is\\nconditioned on the non-exercise of one or more of the rights that are\\nspecifically granted under this License. You may not convey a covered\\nwork if you are a party to an arrangement with a third party that is\\nin the business of distributing software, under which you make payment\\nto the third party based on the extent of your activity of conveying\\nthe work, and under which the third party grants, to any of the\\nparties who would receive the covered work from you, a discriminatory\\npatent license (a) in connection with copies of the covered work\\nconveyed by you (or copies made from those copies), or (b) primarily\\nfor and in connection with specific products or compilations that\\ncontain the covered work, unless you entered into that arrangement,\\nor that patent license was granted, prior to 28 March 2007.\\n\\n Nothing in this License shall be construed as excluding or limiting\\nany implied license or other defenses to infringement that may\\notherwise be available to you under applicable patent law.\\n\\n 12. No Surrender of Others' Freedom.\\n\\n If conditions are imposed on you (whether by court order, agreement or\\notherwise) that contradict the conditions of this License, they do not\\nexcuse you from the conditions of this License. If you cannot convey a\\ncovered work so as to satisfy simultaneously your obligations under this\\nLicense and any other pertinent obligations, then as a consequence you may\\nnot convey it at all. For example, if you agree to terms that obligate you\\nto collect a royalty for further conveying from those to whom you convey\\nthe Program, the only way you could satisfy both those terms and this\\nLicense would be to refrain entirely from conveying the Program.\\n\\n 13. Use with the GNU Affero General Public License.\\n\\n Notwithstanding any other provision of this License, you have\\npermission to link or combine any covered work with a work licensed\\nunder version 3 of the GNU Affero General Public License into a single\\ncombined work, and to convey the resulting work. The terms of this\\nLicense will continue to apply to the part which is the covered work,\\nbut the special requirements of the GNU Affero General Public License,\\nsection 13, concerning interaction through a network will apply to the\\ncombination as such.\\n\\n 14. Revised Versions of this License.\\n\\n The Free Software Foundation may publish revised and/or new versions of\\nthe GNU General Public License from time to time. Such new versions will\\nbe similar in spirit to the present version, but may differ in detail to\\naddress new problems or concerns.\\n\\n Each version is given a distinguishing version number. If the\\nProgram specifies that a certain numbered version of the GNU General\\nPublic License \\\"or any later version\\\" applies to it, you have the\\noption of following the terms and conditions either of that numbered\\nversion or of any later version published by the Free Software\\nFoundation. If the Program does not specify a version number of the\\nGNU General Public License, you may choose any version ever published\\nby the Free Software Foundation.\\n\\n If the Program specifies that a proxy can decide which future\\nversions of the GNU General Public License can be used, that proxy's\\npublic statement of acceptance of a version permanently authorizes you\\nto choose that version for the Program.\\n\\n Later license versions may give you additional or different\\npermissions. However, no additional obligations are imposed on any\\nauthor or copyright holder as a result of your choosing to follow a\\nlater version.\\n\\n 15. Disclaimer of Warranty.\\n\\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \\\"AS IS\\\" WITHOUT WARRANTY\\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\\n\\n 16. Limitation of Liability.\\n\\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\\nSUCH DAMAGES.\\n\\n 17. Interpretation of Sections 15 and 16.\\n\\n If the disclaimer of warranty and limitation of liability provided\\nabove cannot be given local legal effect according to their terms,\\nreviewing courts shall apply local law that most closely approximates\\nan absolute waiver of all civil liability in connection with the\\nProgram, unless a warranty or assumption of liability accompanies a\\ncopy of the Program in return for a fee.\\n\\n END OF TERMS AND CONDITIONS\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/jszip/license\"\n },\n \"$:/plugins/tiddlywiki/jszip/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/jszip/readme\",\n \"text\": \"This plugin provides primitives for working with Zip files. It also makes the [[JSZip|https://stuk.github.io/jszip/]] library available for use by other plugins.\\n\"\n },\n \"$:/plugins/tiddlywiki/jszip/startup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/jszip/startup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/jszip/startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nSetup the root widget event handlers\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar JSZip = require(\\\"$:/plugins/tiddlywiki/jszip/jszip.js\\\");\\n\\n// Export name and synchronous status\\nexports.name = \\\"jszip\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.after = [\\\"startup\\\"];\\nexports.synchronous = true;\\n\\n// Install the root widget event handlers\\nexports.startup = function() {\\n\\t$tw.rootWidget.addEventListener(\\\"tm-zip-create\\\",function(event) {\\n\\t\\tif(event.param) {\\n\\t\\t\\tvar zip = new JSZip();\\n\\t\\t\\tsaveZipTiddler(event.param,zip);\\n\\t\\t}\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\"tm-zip-add-text-file\\\",function(event) {\\n\\t\\tvar paramObject = event.paramObject || {};\\n\\t\\tif(event.param && paramObject.filename && paramObject.text) {\\n\\t\\t\\tvar zip = loadZipTiddler(event.param);\\n\\t\\t\\tzip.file(paramObject.filename,paramObject.text);\\n\\t\\t\\tsaveZipTiddler(event.param,zip);\\n\\t\\t}\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\"tm-zip-render-file\\\",function(event) {\\n\\t\\tvar paramObject = event.paramObject || {};\\n\\t\\tif(event.param && paramObject.filename && paramObject.template) {\\n\\t\\t\\tvar zip = loadZipTiddler(event.param),\\n\\t\\t\\t\\toutputType = paramObject.output || \\\"text/plain\\\",\\n\\t\\t\\t\\ttemplateTitle = paramObject.template,\\n\\t\\t\\t\\ttext = $tw.wiki.renderTiddler(outputType,templateTitle,{\\n\\t\\t\\t\\t\\tparseAsInline: paramObject.mode === \\\"inline\\\",\\n\\t\\t\\t\\t\\tparentWidget: event.widget,\\n\\t\\t\\t\\t\\tvariables: {\\n\\t\\t\\t\\t\\t\\tcurrentTiddler: paramObject.tiddler\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\tzip.file(paramObject.filename,text);\\n\\t\\t\\tsaveZipTiddler(event.param,zip);\\n\\t\\t}\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\"tm-zip-download\\\",function(event) {\\n\\t\\tvar paramObject = event.paramObject || {};\\n\\t\\tif(event.param) {\\n\\t\\t\\tdownloadZipFile(event.param,paramObject.filename || \\\"file.zip\\\");\\n\\t\\t}\\n\\t});\\n};\\n\\nfunction loadZipTiddler(title) {\\n\\treturn $tw.wiki.getGlobalCache(\\\"jszip\\\",function() {\\n\\t\\tvar zip = new JSZip(),\\n\\t\\t\\ttiddler = $tw.wiki.getTiddler(title);\\n\\t\\tif(tiddler && tiddler.fields.type === \\\"application/zip\\\") {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tzip.load(tiddler.fields.text,{\\n\\t\\t\\t\\t\\tbase64: true\\n\\t\\t\\t\\t});\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\tconsole.log(\\\"JSZip error: \\\" + e)\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn zip;\\t\\t\\n\\t});\\n}\\n\\nfunction saveZipTiddler(title,zip) {\\n\\tvar data = zip.generate({\\n\\t\\t\\ttype: \\\"base64\\\"\\n\\t\\t});\\n\\t$tw.wiki.addTiddler({\\n\\t\\ttitle: title,\\n\\t\\ttype: \\\"application/zip\\\",\\n\\t\\ttext: data\\n\\t});\\n}\\n\\nfunction downloadZipFile(title,filename) {\\n\\tvar tiddler = $tw.wiki.getTiddler(title);\\n\\tif(tiddler && tiddler.fields.text && tiddler.fields.type === \\\"application/zip\\\") {\\n\\t\\tvar link = document.createElement(\\\"a\\\");\\n\\t\\tlink.setAttribute(\\\"href\\\",\\\"data:application/zip;base64,\\\" + encodeURIComponent(tiddler.fields.text));\\n\\t\\tlink.setAttribute(\\\"download\\\",filename);\\n\\t\\tdocument.body.appendChild(link);\\n\\t\\tlink.click();\\n\\t\\tdocument.body.removeChild(link);\\n\\t}\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n }\n }\n}"},"$:/plugins/tiddlywiki/katex":{"title":"$:/plugins/tiddlywiki/katex","name":"KaTeX","description":"KaTeX library for mathematical typography","list":"readme usage","library-version":"v0.10.2","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/katex/katex.min.css\": {\n \"text\": \".katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important}.katex .katex-version:after{content:\\\"0.10.2\\\"}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathdefault{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-weight:700;font-style:italic}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;vertical-align:bottom;position:relative}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;vertical-align:bottom;font-size:1px;width:2px;min-width:2px}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{display:inline-block;border:0 solid;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline{display:inline-block;width:100%;border-bottom-style:dashed}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .op-limits>.vlist-t{text-align:center}.katex .accent>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;margin:0 -.025em;border-right:.05em solid;min-width:1px}.katex .mtable .vs-dashed{border-right:.05em dashed}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;position:absolute;width:100%;height:inherit;fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex svg path{stroke:none}.katex img{border-style:none;min-width:0;min-height:0;max-width:none;max-height:none}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:after,.katex .stretchy:before{content:\\\"\\\"}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{position:absolute;left:0;width:50.2%;overflow:hidden}.katex .halfarrow-right{position:absolute;right:0;width:50.2%;overflow:hidden}.katex .brace-left{position:absolute;left:0;width:25.1%;overflow:hidden}.katex .brace-center{position:absolute;left:25%;width:50%;overflow:hidden}.katex .brace-right{position:absolute;right:0;width:25.1%;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left}\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/katex/katex.min.css\"\n },\n \"$:/plugins/tiddlywiki/katex/katex.min.js\": {\n \"text\": \"(function(document) {\\n!function(t,e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?module.exports=e():\\\"function\\\"==typeof define&&define.amd?define([],e):\\\"object\\\"==typeof exports?exports.katex=e():t.katex=e()}(\\\"undefined\\\"!=typeof self?self:this,function(){return function(t){var e={};function r(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=t,r.c=e,r.d=function(t,e,a){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},r.r=function(t){\\\"undefined\\\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\\\"Module\\\"}),Object.defineProperty(t,\\\"__esModule\\\",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&\\\"object\\\"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,\\\"default\\\",{enumerable:!0,value:t}),2&e&&\\\"string\\\"!=typeof t)for(var n in t)r.d(a,n,function(e){return t[e]}.bind(null,n));return a},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,\\\"a\\\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\\\"\\\",r(r.s=1)}([function(t,e,r){},function(t,e,r){\\\"use strict\\\";r.r(e);r(0);var a=function(){function t(t,e,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=t,this.start=e,this.end=r}return t.range=function(e,r){return r?e&&e.loc&&r.loc&&e.loc.lexer===r.loc.lexer?new t(e.loc.lexer,e.loc.start,r.loc.end):null:e&&e.loc},t}(),n=function(){function t(t,e){this.text=void 0,this.loc=void 0,this.text=t,this.loc=e}return t.prototype.range=function(e,r){return new t(r,a.range(this,e))},t}(),o=function t(e,r){this.position=void 0;var a,n=\\\"KaTeX parse error: \\\"+e,o=r&&r.loc;if(o&&o.start<=o.end){var i=o.lexer.input;a=o.start;var s=o.end;a===i.length?n+=\\\" at end of input: \\\":n+=\\\" at position \\\"+(a+1)+\\\": \\\";var h=i.slice(a,s).replace(/[^]/g,\\\"$&\\\\u0332\\\");n+=(a>15?\\\"\\\\u2026\\\"+i.slice(a-15,a):i.slice(0,a))+h+(s+15<i.length?i.slice(s,s+15)+\\\"\\\\u2026\\\":i.slice(s))}var l=new Error(n);return l.name=\\\"ParseError\\\",l.__proto__=t.prototype,l.position=a,l};o.prototype.__proto__=Error.prototype;var i=o,s=/([A-Z])/g,h={\\\"&\\\":\\\"&\\\",\\\">\\\":\\\">\\\",\\\"<\\\":\\\"<\\\",'\\\"':\\\""\\\",\\\"'\\\":\\\"'\\\"},l=/[&><\\\"']/g;var m=function t(e){return\\\"ordgroup\\\"===e.type?1===e.body.length?t(e.body[0]):e:\\\"color\\\"===e.type?1===e.body.length?t(e.body[0]):e:\\\"font\\\"===e.type?t(e.body):e},c={contains:function(t,e){return-1!==t.indexOf(e)},deflt:function(t,e){return void 0===t?e:t},escape:function(t){return String(t).replace(l,function(t){return h[t]})},hyphenate:function(t){return t.replace(s,\\\"-$1\\\").toLowerCase()},getBaseElem:m,isCharacterBox:function(t){var e=m(t);return\\\"mathord\\\"===e.type||\\\"textord\\\"===e.type||\\\"atom\\\"===e.type}},u=function(){function t(t){this.displayMode=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.allowedProtocols=void 0,t=t||{},this.displayMode=c.deflt(t.displayMode,!1),this.leqno=c.deflt(t.leqno,!1),this.fleqn=c.deflt(t.fleqn,!1),this.throwOnError=c.deflt(t.throwOnError,!0),this.errorColor=c.deflt(t.errorColor,\\\"#cc0000\\\"),this.macros=t.macros||{},this.colorIsTextColor=c.deflt(t.colorIsTextColor,!1),this.strict=c.deflt(t.strict,\\\"warn\\\"),this.maxSize=Math.max(0,c.deflt(t.maxSize,1/0)),this.maxExpand=Math.max(0,c.deflt(t.maxExpand,1e3)),this.allowedProtocols=c.deflt(t.allowedProtocols,[\\\"http\\\",\\\"https\\\",\\\"mailto\\\",\\\"_relative\\\"])}var e=t.prototype;return e.reportNonstrict=function(t,e,r){var a=this.strict;if(\\\"function\\\"==typeof a&&(a=a(t,e,r)),a&&\\\"ignore\\\"!==a){if(!0===a||\\\"error\\\"===a)throw new i(\\\"LaTeX-incompatible input and strict mode is set to 'error': \\\"+e+\\\" [\\\"+t+\\\"]\\\",r);\\\"warn\\\"===a?\\\"undefined\\\"!=typeof console&&console.warn(\\\"LaTeX-incompatible input and strict mode is set to 'warn': \\\"+e+\\\" [\\\"+t+\\\"]\\\"):\\\"undefined\\\"!=typeof console&&console.warn(\\\"LaTeX-incompatible input and strict mode is set to unrecognized '\\\"+a+\\\"': \\\"+e+\\\" [\\\"+t+\\\"]\\\")}},e.useStrictBehavior=function(t,e,r){var a=this.strict;if(\\\"function\\\"==typeof a)try{a=a(t,e,r)}catch(t){a=\\\"error\\\"}return!(!a||\\\"ignore\\\"===a)&&(!0===a||\\\"error\\\"===a||(\\\"warn\\\"===a?(\\\"undefined\\\"!=typeof console&&console.warn(\\\"LaTeX-incompatible input and strict mode is set to 'warn': \\\"+e+\\\" [\\\"+t+\\\"]\\\"),!1):(\\\"undefined\\\"!=typeof console&&console.warn(\\\"LaTeX-incompatible input and strict mode is set to unrecognized '\\\"+a+\\\"': \\\"+e+\\\" [\\\"+t+\\\"]\\\"),!1)))},t}(),d=function(){function t(t,e,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=e,this.cramped=r}var e=t.prototype;return e.sup=function(){return p[f[this.id]]},e.sub=function(){return p[g[this.id]]},e.fracNum=function(){return p[x[this.id]]},e.fracDen=function(){return p[v[this.id]]},e.cramp=function(){return p[b[this.id]]},e.text=function(){return p[y[this.id]]},e.isTight=function(){return this.size>=2},t}(),p=[new d(0,0,!1),new d(1,0,!0),new d(2,1,!1),new d(3,1,!0),new d(4,2,!1),new d(5,2,!0),new d(6,3,!1),new d(7,3,!0)],f=[4,5,4,5,6,7,6,7],g=[5,5,5,5,7,7,7,7],x=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],w={DISPLAY:p[0],TEXT:p[2],SCRIPT:p[4],SCRIPTSCRIPT:p[6]},k=[{name:\\\"latin\\\",blocks:[[256,591],[768,879]]},{name:\\\"cyrillic\\\",blocks:[[1024,1279]]},{name:\\\"brahmic\\\",blocks:[[2304,4255]]},{name:\\\"georgian\\\",blocks:[[4256,4351]]},{name:\\\"cjk\\\",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:\\\"hangul\\\",blocks:[[44032,55215]]}];var S=[];function z(t){for(var e=0;e<S.length;e+=2)if(t>=S[e]&&t<=S[e+1])return!0;return!1}k.forEach(function(t){return t.blocks.forEach(function(t){return S.push.apply(S,t)})});var M={path:{sqrtMain:\\\"M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,\\\\n-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,\\\\n-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,\\\\n35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,\\\\n-221c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467\\\\ns-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422\\\\ns-65,47,-65,47z M834 80H400000v40H845z\\\",sqrtSize1:\\\"M263,681c0.7,0,18,39.7,52,119c34,79.3,68.167,\\\\n158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120c340,-704.7,510.7,-1060.3,512,-1067\\\\nc4.7,-7.3,11,-11,19,-11H40000v40H1012.3s-271.3,567,-271.3,567c-38.7,80.7,-84,\\\\n175,-136,283c-52,108,-89.167,185.3,-111.5,232c-22.3,46.7,-33.8,70.3,-34.5,71\\\\nc-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1s-109,-253,-109,-253c-72.7,-168,-109.3,\\\\n-252,-110,-252c-10.7,8,-22,16.7,-34,26c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26\\\\ns76,-59,76,-59s76,-60,76,-60z M1001 80H40000v40H1012z\\\",sqrtSize2:\\\"M1001,80H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,\\\\n572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,\\\\n-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39\\\\nc-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60\\\\ns208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,\\\\n-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5c4,-6.7,10,-10,18,-10z\\\\nM1001 80H400000v40H1013z\\\",sqrtSize3:\\\"M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,\\\\n-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,\\\\n25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,\\\\n-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079\\\\nc169.3,-717.3,254.7,-1077.7,256,-1081c4,-6.7,10,-10,18,-10H400000v40H1014.6\\\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9\\\\nc-8,0,-12,-0.7,-12,-2z M1001 80H400000v40H1014z\\\",sqrtSize4:\\\"M473,2793c339.3,-1799.3,509.3,-2700,510,-2702\\\\nc3.3,-7.3,9.3,-11,18,-11H400000v40H1017.7s-90.5,478,-276.2,1466c-185.7,988,\\\\n-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,\\\\n-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200c0,-1.3,-5.3,8.7,-16,30c-10.7,\\\\n21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26s76,-153,76,-153s77,-151,\\\\n77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,606z\\\\nM1001 80H400000v40H1017z\\\",doubleleftarrow:\\\"M262 157\\\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\\\",doublerightarrow:\\\"M399738 392l\\\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\\\",leftarrow:\\\"M400000 241H110l3-3c68.7-52.7 113.7-120\\\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\\\n l-3-3h399890zM100 241v40h399900v-40z\\\",leftbrace:\\\"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\\\",leftbraceunder:\\\"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\\\",leftgroup:\\\"M400000 80\\\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\\\n 435 0h399565z\\\",leftgroupunder:\\\"M400000 262\\\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\\\n 435 219h399565z\\\",leftharpoon:\\\"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\\\",leftharpoonplus:\\\"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\\\nm0 0v40h400000v-40z\\\",leftharpoondown:\\\"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\\\",leftharpoondownplus:\\\"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\\\",lefthook:\\\"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\\\n 71.5 23h399859zM103 281v-40h399897v40z\\\",leftlinesegment:\\\"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\\\",leftmapsto:\\\"M40 281 V448H0V74H40V241H400000v40z\\\\nM40 281 V448H0V74H40V241H400000v40z\\\",leftToFrom:\\\"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\\\",longequal:\\\"M0 50 h400000 v40H0z m0 194h40000v40H0z\\\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\\\",midbrace:\\\"M200428 334\\\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\\\",midbraceunder:\\\"M199572 214\\\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\\\",oiintSize1:\\\"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\\\",oiintSize2:\\\"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\\\nc0 110 84 276 504 276s502.4-166 502.4-276z\\\",oiiintSize1:\\\"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\\\",oiiintSize2:\\\"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\\\",rightarrow:\\\"M0 241v40h399891c-47.3 35.3-84 78-110 128\\\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\\\n 151.7 139 205zm0 0v40h399900v-40z\\\",rightbrace:\\\"M400000 542l\\\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\\\",rightbraceunder:\\\"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\\\",rightgroup:\\\"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\\\",rightgroupunder:\\\"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\\\",rightharpoon:\\\"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\\\n 69.2 92 94.5zm0 0v40h399900v-40z\\\",rightharpoonplus:\\\"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\\\",rightharpoondown:\\\"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\\\",rightharpoondownplus:\\\"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\\\",righthook:\\\"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\\\",rightlinesegment:\\\"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\\",rightToFrom:\\\"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\\\",twoheadleftarrow:\\\"M0 167c68 40\\\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\\\",twoheadrightarrow:\\\"M400000 167\\\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\\\",tilde1:\\\"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\\\n-68.267.847-113-73.952-191-73.952z\\\",tilde2:\\\"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\\\",tilde3:\\\"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\\\n -338 0-409-156.573-744-156.573z\\\",tilde4:\\\"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\\\n -175.236-744-175.236z\\\",vec:\\\"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\\\nc-16-25.333-24-45-24-59z\\\",widehat1:\\\"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\\\",widehat2:\\\"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\\\",widehat3:\\\"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\\\",widehat4:\\\"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\\\",widecheck1:\\\"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\\\",widecheck2:\\\"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\\\",widecheck3:\\\"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\\\",widecheck4:\\\"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\\\",baraboveleftarrow:\\\"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\\\",rightarrowabovebar:\\\"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\\\",baraboveshortleftharpoon:\\\"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\\\",rightharpoonaboveshortbar:\\\"M0,241 l0,40c399126,0,399993,0,399993,0\\\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\\\",shortbaraboveleftharpoon:\\\"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\\\",shortrightharpoonabovebar:\\\"M53,241l0,40c398570,0,399437,0,399437,0\\\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\\\"}},T=function(){function t(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){for(var t=document.createDocumentFragment(),e=0;e<this.children.length;e++)t.appendChild(this.children[e].toNode());return t},e.toMarkup=function(){for(var t=\\\"\\\",e=0;e<this.children.length;e++)t+=this.children[e].toMarkup();return t},e.toText=function(){var t=function(t){return t.toText()};return this.children.map(t).join(\\\"\\\")},t}(),A=function(t){return t.filter(function(t){return t}).join(\\\" \\\")},B=function(t,e,r){if(this.classes=t||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},e){e.style.isTight()&&this.classes.push(\\\"mtight\\\");var a=e.getColor();a&&(this.style.color=a)}},q=function(t){var e=document.createElement(t);for(var r in e.className=A(this.classes),this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&e.setAttribute(a,this.attributes[a]);for(var n=0;n<this.children.length;n++)e.appendChild(this.children[n].toNode());return e},C=function(t){var e=\\\"<\\\"+t;this.classes.length&&(e+=' class=\\\"'+c.escape(A(this.classes))+'\\\"');var r=\\\"\\\";for(var a in this.style)this.style.hasOwnProperty(a)&&(r+=c.hyphenate(a)+\\\":\\\"+this.style[a]+\\\";\\\");for(var n in r&&(e+=' style=\\\"'+c.escape(r)+'\\\"'),this.attributes)this.attributes.hasOwnProperty(n)&&(e+=\\\" \\\"+n+'=\\\"'+c.escape(this.attributes[n])+'\\\"');e+=\\\">\\\";for(var o=0;o<this.children.length;o++)e+=this.children[o].toMarkup();return e+=\\\"</\\\"+t+\\\">\\\"},N=function(){function t(t,e,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,B.call(this,t,r,a),this.children=e||[]}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){return q.call(this,\\\"span\\\")},e.toMarkup=function(){return C.call(this,\\\"span\\\")},t}(),I=function(){function t(t,e,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,B.call(this,e,a),this.children=r||[],this.setAttribute(\\\"href\\\",t)}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){return q.call(this,\\\"a\\\")},e.toMarkup=function(){return C.call(this,\\\"a\\\")},t}(),O={\\\"\\\\xee\\\":\\\"\\\\u0131\\\\u0302\\\",\\\"\\\\xef\\\":\\\"\\\\u0131\\\\u0308\\\",\\\"\\\\xed\\\":\\\"\\\\u0131\\\\u0301\\\",\\\"\\\\xec\\\":\\\"\\\\u0131\\\\u0300\\\"},E=function(){function t(t,e,r,a,n,o,i,s){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=t,this.height=e||0,this.depth=r||0,this.italic=a||0,this.skew=n||0,this.width=o||0,this.classes=i||[],this.style=s||{},this.maxFontSize=0;var h=function(t){for(var e=0;e<k.length;e++)for(var r=k[e],a=0;a<r.blocks.length;a++){var n=r.blocks[a];if(t>=n[0]&&t<=n[1])return r.name}return null}(this.text.charCodeAt(0));h&&this.classes.push(h+\\\"_fallback\\\"),/[\\\\xee\\\\xef\\\\xed\\\\xec]/.test(this.text)&&(this.text=O[this.text])}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){var t=document.createTextNode(this.text),e=null;for(var r in this.italic>0&&((e=document.createElement(\\\"span\\\")).style.marginRight=this.italic+\\\"em\\\"),this.classes.length>0&&((e=e||document.createElement(\\\"span\\\")).className=A(this.classes)),this.style)this.style.hasOwnProperty(r)&&((e=e||document.createElement(\\\"span\\\")).style[r]=this.style[r]);return e?(e.appendChild(t),e):t},e.toMarkup=function(){var t=!1,e=\\\"<span\\\";this.classes.length&&(t=!0,e+=' class=\\\"',e+=c.escape(A(this.classes)),e+='\\\"');var r=\\\"\\\";for(var a in this.italic>0&&(r+=\\\"margin-right:\\\"+this.italic+\\\"em;\\\"),this.style)this.style.hasOwnProperty(a)&&(r+=c.hyphenate(a)+\\\":\\\"+this.style[a]+\\\";\\\");r&&(t=!0,e+=' style=\\\"'+c.escape(r)+'\\\"');var n=c.escape(this.text);return t?(e+=\\\">\\\",e+=n,e+=\\\"</span>\\\"):n},t}(),R=function(){function t(t,e){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=e||{}}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"svg\\\");for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var r=0;r<this.children.length;r++)t.appendChild(this.children[r].toNode());return t},e.toMarkup=function(){var t=\\\"<svg\\\";for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=\\\" \\\"+e+\\\"='\\\"+this.attributes[e]+\\\"'\\\");t+=\\\">\\\";for(var r=0;r<this.children.length;r++)t+=this.children[r].toMarkup();return t+=\\\"</svg>\\\"},t}(),L=function(){function t(t,e){this.pathName=void 0,this.alternate=void 0,this.pathName=t,this.alternate=e}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"path\\\");return this.alternate?t.setAttribute(\\\"d\\\",this.alternate):t.setAttribute(\\\"d\\\",M.path[this.pathName]),t},e.toMarkup=function(){return this.alternate?\\\"<path d='\\\"+this.alternate+\\\"'/>\\\":\\\"<path d='\\\"+M.path[this.pathName]+\\\"'/>\\\"},t}(),H=function(){function t(t){this.attributes=void 0,this.attributes=t||{}}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"line\\\");for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);return t},e.toMarkup=function(){var t=\\\"<line\\\";for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=\\\" \\\"+e+\\\"='\\\"+this.attributes[e]+\\\"'\\\");return t+=\\\"/>\\\"},t}();var P={\\\"AMS-Regular\\\":{65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},\\\"Caligraphic-Regular\\\":{48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473]},\\\"Fraktur-Regular\\\":{33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},\\\"Main-Bold\\\":{33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},\\\"Main-BoldItalic\\\":{33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],163:[0,.69444,0,0,.86853],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},\\\"Main-Italic\\\":{33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],163:[0,.69444,0,0,.76909],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],305:[0,.43056,0,.02778,.32246],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],567:[.19444,.43056,0,.08334,.38403],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},\\\"Main-Regular\\\":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.12,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,1],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.67,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.9,0,0,.278],8943:[-.19,.31,0,0,1.172],8945:[-.1,.82,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.744,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.744,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},\\\"Math-BoldItalic\\\":{65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333]},\\\"Math-Italic\\\":{65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059]},\\\"Math-Regular\\\":{65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059]},\\\"SansSerif-Bold\\\":{33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},\\\"SansSerif-Italic\\\":{33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},\\\"SansSerif-Regular\\\":{33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},\\\"Script-Regular\\\":{65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212]},\\\"Size1-Regular\\\":{40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},\\\"Size2-Regular\\\":{40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},\\\"Size3-Regular\\\":{40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},\\\"Size4-Regular\\\":{40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},\\\"Typewriter-Regular\\\":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},D={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2]},F={\\\"\\\\xc5\\\":\\\"A\\\",\\\"\\\\xc7\\\":\\\"C\\\",\\\"\\\\xd0\\\":\\\"D\\\",\\\"\\\\xde\\\":\\\"o\\\",\\\"\\\\xe5\\\":\\\"a\\\",\\\"\\\\xe7\\\":\\\"c\\\",\\\"\\\\xf0\\\":\\\"d\\\",\\\"\\\\xfe\\\":\\\"o\\\",\\\"\\\\u0410\\\":\\\"A\\\",\\\"\\\\u0411\\\":\\\"B\\\",\\\"\\\\u0412\\\":\\\"B\\\",\\\"\\\\u0413\\\":\\\"F\\\",\\\"\\\\u0414\\\":\\\"A\\\",\\\"\\\\u0415\\\":\\\"E\\\",\\\"\\\\u0416\\\":\\\"K\\\",\\\"\\\\u0417\\\":\\\"3\\\",\\\"\\\\u0418\\\":\\\"N\\\",\\\"\\\\u0419\\\":\\\"N\\\",\\\"\\\\u041a\\\":\\\"K\\\",\\\"\\\\u041b\\\":\\\"N\\\",\\\"\\\\u041c\\\":\\\"M\\\",\\\"\\\\u041d\\\":\\\"H\\\",\\\"\\\\u041e\\\":\\\"O\\\",\\\"\\\\u041f\\\":\\\"N\\\",\\\"\\\\u0420\\\":\\\"P\\\",\\\"\\\\u0421\\\":\\\"C\\\",\\\"\\\\u0422\\\":\\\"T\\\",\\\"\\\\u0423\\\":\\\"y\\\",\\\"\\\\u0424\\\":\\\"O\\\",\\\"\\\\u0425\\\":\\\"X\\\",\\\"\\\\u0426\\\":\\\"U\\\",\\\"\\\\u0427\\\":\\\"h\\\",\\\"\\\\u0428\\\":\\\"W\\\",\\\"\\\\u0429\\\":\\\"W\\\",\\\"\\\\u042a\\\":\\\"B\\\",\\\"\\\\u042b\\\":\\\"X\\\",\\\"\\\\u042c\\\":\\\"B\\\",\\\"\\\\u042d\\\":\\\"3\\\",\\\"\\\\u042e\\\":\\\"X\\\",\\\"\\\\u042f\\\":\\\"R\\\",\\\"\\\\u0430\\\":\\\"a\\\",\\\"\\\\u0431\\\":\\\"b\\\",\\\"\\\\u0432\\\":\\\"a\\\",\\\"\\\\u0433\\\":\\\"r\\\",\\\"\\\\u0434\\\":\\\"y\\\",\\\"\\\\u0435\\\":\\\"e\\\",\\\"\\\\u0436\\\":\\\"m\\\",\\\"\\\\u0437\\\":\\\"e\\\",\\\"\\\\u0438\\\":\\\"n\\\",\\\"\\\\u0439\\\":\\\"n\\\",\\\"\\\\u043a\\\":\\\"n\\\",\\\"\\\\u043b\\\":\\\"n\\\",\\\"\\\\u043c\\\":\\\"m\\\",\\\"\\\\u043d\\\":\\\"n\\\",\\\"\\\\u043e\\\":\\\"o\\\",\\\"\\\\u043f\\\":\\\"n\\\",\\\"\\\\u0440\\\":\\\"p\\\",\\\"\\\\u0441\\\":\\\"c\\\",\\\"\\\\u0442\\\":\\\"o\\\",\\\"\\\\u0443\\\":\\\"y\\\",\\\"\\\\u0444\\\":\\\"b\\\",\\\"\\\\u0445\\\":\\\"x\\\",\\\"\\\\u0446\\\":\\\"n\\\",\\\"\\\\u0447\\\":\\\"n\\\",\\\"\\\\u0448\\\":\\\"w\\\",\\\"\\\\u0449\\\":\\\"w\\\",\\\"\\\\u044a\\\":\\\"a\\\",\\\"\\\\u044b\\\":\\\"m\\\",\\\"\\\\u044c\\\":\\\"a\\\",\\\"\\\\u044d\\\":\\\"e\\\",\\\"\\\\u044e\\\":\\\"m\\\",\\\"\\\\u044f\\\":\\\"r\\\"};function V(t,e,r){if(!P[e])throw new Error(\\\"Font metrics not found for font: \\\"+e+\\\".\\\");var a=t.charCodeAt(0),n=P[e][a];if(!n&&t[0]in F&&(a=F[t[0]].charCodeAt(0),n=P[e][a]),n||\\\"text\\\"!==r||z(a)&&(n=P[e][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var U={};var G={bin:1,close:1,inner:1,open:1,punct:1,rel:1},X={\\\"accent-token\\\":1,mathord:1,\\\"op-token\\\":1,spacing:1,textord:1},Y={math:{},text:{}},_=Y;function W(t,e,r,a,n,o){Y[t][n]={font:e,group:r,replace:a},o&&a&&(Y[t][a]=Y[t][n])}var j=\\\"main\\\",$=\\\"ams\\\",Z=\\\"bin\\\",K=\\\"mathord\\\",J=\\\"op-token\\\",Q=\\\"rel\\\";W(\\\"math\\\",j,Q,\\\"\\\\u2261\\\",\\\"\\\\\\\\equiv\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u227a\\\",\\\"\\\\\\\\prec\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u227b\\\",\\\"\\\\\\\\succ\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u223c\\\",\\\"\\\\\\\\sim\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u22a5\\\",\\\"\\\\\\\\perp\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2aaf\\\",\\\"\\\\\\\\preceq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2ab0\\\",\\\"\\\\\\\\succeq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2243\\\",\\\"\\\\\\\\simeq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2223\\\",\\\"\\\\\\\\mid\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u226a\\\",\\\"\\\\\\\\ll\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u226b\\\",\\\"\\\\\\\\gg\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u224d\\\",\\\"\\\\\\\\asymp\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2225\\\",\\\"\\\\\\\\parallel\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u22c8\\\",\\\"\\\\\\\\bowtie\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2323\\\",\\\"\\\\\\\\smile\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2291\\\",\\\"\\\\\\\\sqsubseteq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2292\\\",\\\"\\\\\\\\sqsupseteq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2250\\\",\\\"\\\\\\\\doteq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2322\\\",\\\"\\\\\\\\frown\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u220b\\\",\\\"\\\\\\\\ni\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u221d\\\",\\\"\\\\\\\\propto\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u22a2\\\",\\\"\\\\\\\\vdash\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u22a3\\\",\\\"\\\\\\\\dashv\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u220b\\\",\\\"\\\\\\\\owns\\\"),W(\\\"math\\\",j,\\\"punct\\\",\\\".\\\",\\\"\\\\\\\\ldotp\\\"),W(\\\"math\\\",j,\\\"punct\\\",\\\"\\\\u22c5\\\",\\\"\\\\\\\\cdotp\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"#\\\",\\\"\\\\\\\\#\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"#\\\",\\\"\\\\\\\\#\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"&\\\",\\\"\\\\\\\\&\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"&\\\",\\\"\\\\\\\\&\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2135\\\",\\\"\\\\\\\\aleph\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2200\\\",\\\"\\\\\\\\forall\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u210f\\\",\\\"\\\\\\\\hbar\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2203\\\",\\\"\\\\\\\\exists\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2207\\\",\\\"\\\\\\\\nabla\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u266d\\\",\\\"\\\\\\\\flat\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2113\\\",\\\"\\\\\\\\ell\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u266e\\\",\\\"\\\\\\\\natural\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2663\\\",\\\"\\\\\\\\clubsuit\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2118\\\",\\\"\\\\\\\\wp\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u266f\\\",\\\"\\\\\\\\sharp\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2662\\\",\\\"\\\\\\\\diamondsuit\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u211c\\\",\\\"\\\\\\\\Re\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2661\\\",\\\"\\\\\\\\heartsuit\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2111\\\",\\\"\\\\\\\\Im\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2660\\\",\\\"\\\\\\\\spadesuit\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xa7\\\",\\\"\\\\\\\\S\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xb6\\\",\\\"\\\\\\\\P\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2020\\\",\\\"\\\\\\\\dag\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2020\\\",\\\"\\\\\\\\dag\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2020\\\",\\\"\\\\\\\\textdagger\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2021\\\",\\\"\\\\\\\\ddag\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2021\\\",\\\"\\\\\\\\ddag\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2021\\\",\\\"\\\\\\\\textdaggerdbl\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"\\\\u23b1\\\",\\\"\\\\\\\\rmoustache\\\",!0),W(\\\"math\\\",j,\\\"open\\\",\\\"\\\\u23b0\\\",\\\"\\\\\\\\lmoustache\\\",!0),W(\\\"math\\\",j,\\\"close\\\",\\\"\\\\u27ef\\\",\\\"\\\\\\\\rgroup\\\",!0),W(\\\"math\\\",j,\\\"open\\\",\\\"\\\\u27ee\\\",\\\"\\\\\\\\lgroup\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2213\\\",\\\"\\\\\\\\mp\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2296\\\",\\\"\\\\\\\\ominus\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u228e\\\",\\\"\\\\\\\\uplus\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2293\\\",\\\"\\\\\\\\sqcap\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2217\\\",\\\"\\\\\\\\ast\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2294\\\",\\\"\\\\\\\\sqcup\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u25ef\\\",\\\"\\\\\\\\bigcirc\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2219\\\",\\\"\\\\\\\\bullet\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2021\\\",\\\"\\\\\\\\ddagger\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2240\\\",\\\"\\\\\\\\wr\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2a3f\\\",\\\"\\\\\\\\amalg\\\"),W(\\\"math\\\",j,Z,\\\"&\\\",\\\"\\\\\\\\And\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u27f5\\\",\\\"\\\\\\\\longleftarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21d0\\\",\\\"\\\\\\\\Leftarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u27f8\\\",\\\"\\\\\\\\Longleftarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u27f6\\\",\\\"\\\\\\\\longrightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21d2\\\",\\\"\\\\\\\\Rightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u27f9\\\",\\\"\\\\\\\\Longrightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2194\\\",\\\"\\\\\\\\leftrightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u27f7\\\",\\\"\\\\\\\\longleftrightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21d4\\\",\\\"\\\\\\\\Leftrightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u27fa\\\",\\\"\\\\\\\\Longleftrightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21a6\\\",\\\"\\\\\\\\mapsto\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u27fc\\\",\\\"\\\\\\\\longmapsto\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2197\\\",\\\"\\\\\\\\nearrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21a9\\\",\\\"\\\\\\\\hookleftarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21aa\\\",\\\"\\\\\\\\hookrightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2198\\\",\\\"\\\\\\\\searrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21bc\\\",\\\"\\\\\\\\leftharpoonup\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21c0\\\",\\\"\\\\\\\\rightharpoonup\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2199\\\",\\\"\\\\\\\\swarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21bd\\\",\\\"\\\\\\\\leftharpoondown\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21c1\\\",\\\"\\\\\\\\rightharpoondown\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2196\\\",\\\"\\\\\\\\nwarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21cc\\\",\\\"\\\\\\\\rightleftharpoons\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u226e\\\",\\\"\\\\\\\\nless\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue010\\\",\\\"\\\\\\\\@nleqslant\\\"),W(\\\"math\\\",$,Q,\\\"\\\\ue011\\\",\\\"\\\\\\\\@nleqq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2a87\\\",\\\"\\\\\\\\lneq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2268\\\",\\\"\\\\\\\\lneqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue00c\\\",\\\"\\\\\\\\@lvertneqq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22e6\\\",\\\"\\\\\\\\lnsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a89\\\",\\\"\\\\\\\\lnapprox\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2280\\\",\\\"\\\\\\\\nprec\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22e0\\\",\\\"\\\\\\\\npreceq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22e8\\\",\\\"\\\\\\\\precnsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2ab9\\\",\\\"\\\\\\\\precnapprox\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2241\\\",\\\"\\\\\\\\nsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue006\\\",\\\"\\\\\\\\@nshortmid\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2224\\\",\\\"\\\\\\\\nmid\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22ac\\\",\\\"\\\\\\\\nvdash\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22ad\\\",\\\"\\\\\\\\nvDash\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22ea\\\",\\\"\\\\\\\\ntriangleleft\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22ec\\\",\\\"\\\\\\\\ntrianglelefteq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u228a\\\",\\\"\\\\\\\\subsetneq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue01a\\\",\\\"\\\\\\\\@varsubsetneq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2acb\\\",\\\"\\\\\\\\subsetneqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue017\\\",\\\"\\\\\\\\@varsubsetneqq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u226f\\\",\\\"\\\\\\\\ngtr\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue00f\\\",\\\"\\\\\\\\@ngeqslant\\\"),W(\\\"math\\\",$,Q,\\\"\\\\ue00e\\\",\\\"\\\\\\\\@ngeqq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2a88\\\",\\\"\\\\\\\\gneq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2269\\\",\\\"\\\\\\\\gneqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue00d\\\",\\\"\\\\\\\\@gvertneqq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22e7\\\",\\\"\\\\\\\\gnsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a8a\\\",\\\"\\\\\\\\gnapprox\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2281\\\",\\\"\\\\\\\\nsucc\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22e1\\\",\\\"\\\\\\\\nsucceq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22e9\\\",\\\"\\\\\\\\succnsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2aba\\\",\\\"\\\\\\\\succnapprox\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2246\\\",\\\"\\\\\\\\ncong\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue007\\\",\\\"\\\\\\\\@nshortparallel\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2226\\\",\\\"\\\\\\\\nparallel\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22af\\\",\\\"\\\\\\\\nVDash\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22eb\\\",\\\"\\\\\\\\ntriangleright\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22ed\\\",\\\"\\\\\\\\ntrianglerighteq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue018\\\",\\\"\\\\\\\\@nsupseteqq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u228b\\\",\\\"\\\\\\\\supsetneq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue01b\\\",\\\"\\\\\\\\@varsupsetneq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2acc\\\",\\\"\\\\\\\\supsetneqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue019\\\",\\\"\\\\\\\\@varsupsetneqq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22ae\\\",\\\"\\\\\\\\nVdash\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2ab5\\\",\\\"\\\\\\\\precneqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2ab6\\\",\\\"\\\\\\\\succneqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\ue016\\\",\\\"\\\\\\\\@nsubseteqq\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22b4\\\",\\\"\\\\\\\\unlhd\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22b5\\\",\\\"\\\\\\\\unrhd\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u219a\\\",\\\"\\\\\\\\nleftarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u219b\\\",\\\"\\\\\\\\nrightarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21cd\\\",\\\"\\\\\\\\nLeftarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21cf\\\",\\\"\\\\\\\\nRightarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21ae\\\",\\\"\\\\\\\\nleftrightarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21ce\\\",\\\"\\\\\\\\nLeftrightarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u25b3\\\",\\\"\\\\\\\\vartriangle\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u210f\\\",\\\"\\\\\\\\hslash\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u25bd\\\",\\\"\\\\\\\\triangledown\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u25ca\\\",\\\"\\\\\\\\lozenge\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u24c8\\\",\\\"\\\\\\\\circledS\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\xae\\\",\\\"\\\\\\\\circledR\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"\\\\xae\\\",\\\"\\\\\\\\circledR\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2221\\\",\\\"\\\\\\\\measuredangle\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2204\\\",\\\"\\\\\\\\nexists\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2127\\\",\\\"\\\\\\\\mho\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2132\\\",\\\"\\\\\\\\Finv\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2141\\\",\\\"\\\\\\\\Game\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2035\\\",\\\"\\\\\\\\backprime\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u25b2\\\",\\\"\\\\\\\\blacktriangle\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u25bc\\\",\\\"\\\\\\\\blacktriangledown\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u25a0\\\",\\\"\\\\\\\\blacksquare\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u29eb\\\",\\\"\\\\\\\\blacklozenge\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2605\\\",\\\"\\\\\\\\bigstar\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2222\\\",\\\"\\\\\\\\sphericalangle\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2201\\\",\\\"\\\\\\\\complement\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\xf0\\\",\\\"\\\\\\\\eth\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2571\\\",\\\"\\\\\\\\diagup\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2572\\\",\\\"\\\\\\\\diagdown\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u25a1\\\",\\\"\\\\\\\\square\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u25a1\\\",\\\"\\\\\\\\Box\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u25ca\\\",\\\"\\\\\\\\Diamond\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\xa5\\\",\\\"\\\\\\\\yen\\\",!0),W(\\\"text\\\",$,\\\"textord\\\",\\\"\\\\xa5\\\",\\\"\\\\\\\\yen\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2713\\\",\\\"\\\\\\\\checkmark\\\",!0),W(\\\"text\\\",$,\\\"textord\\\",\\\"\\\\u2713\\\",\\\"\\\\\\\\checkmark\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2136\\\",\\\"\\\\\\\\beth\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2138\\\",\\\"\\\\\\\\daleth\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2137\\\",\\\"\\\\\\\\gimel\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u03dd\\\",\\\"\\\\\\\\digamma\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u03f0\\\",\\\"\\\\\\\\varkappa\\\"),W(\\\"math\\\",$,\\\"open\\\",\\\"\\\\u250c\\\",\\\"\\\\\\\\ulcorner\\\",!0),W(\\\"math\\\",$,\\\"close\\\",\\\"\\\\u2510\\\",\\\"\\\\\\\\urcorner\\\",!0),W(\\\"math\\\",$,\\\"open\\\",\\\"\\\\u2514\\\",\\\"\\\\\\\\llcorner\\\",!0),W(\\\"math\\\",$,\\\"close\\\",\\\"\\\\u2518\\\",\\\"\\\\\\\\lrcorner\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2266\\\",\\\"\\\\\\\\leqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a7d\\\",\\\"\\\\\\\\leqslant\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a95\\\",\\\"\\\\\\\\eqslantless\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2272\\\",\\\"\\\\\\\\lesssim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a85\\\",\\\"\\\\\\\\lessapprox\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u224a\\\",\\\"\\\\\\\\approxeq\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22d6\\\",\\\"\\\\\\\\lessdot\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22d8\\\",\\\"\\\\\\\\lll\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2276\\\",\\\"\\\\\\\\lessgtr\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22da\\\",\\\"\\\\\\\\lesseqgtr\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a8b\\\",\\\"\\\\\\\\lesseqqgtr\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2251\\\",\\\"\\\\\\\\doteqdot\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2253\\\",\\\"\\\\\\\\risingdotseq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2252\\\",\\\"\\\\\\\\fallingdotseq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u223d\\\",\\\"\\\\\\\\backsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22cd\\\",\\\"\\\\\\\\backsimeq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2ac5\\\",\\\"\\\\\\\\subseteqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22d0\\\",\\\"\\\\\\\\Subset\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u228f\\\",\\\"\\\\\\\\sqsubset\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u227c\\\",\\\"\\\\\\\\preccurlyeq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22de\\\",\\\"\\\\\\\\curlyeqprec\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u227e\\\",\\\"\\\\\\\\precsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2ab7\\\",\\\"\\\\\\\\precapprox\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22b2\\\",\\\"\\\\\\\\vartriangleleft\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22b4\\\",\\\"\\\\\\\\trianglelefteq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22a8\\\",\\\"\\\\\\\\vDash\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22aa\\\",\\\"\\\\\\\\Vvdash\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2323\\\",\\\"\\\\\\\\smallsmile\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2322\\\",\\\"\\\\\\\\smallfrown\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u224f\\\",\\\"\\\\\\\\bumpeq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u224e\\\",\\\"\\\\\\\\Bumpeq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2267\\\",\\\"\\\\\\\\geqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a7e\\\",\\\"\\\\\\\\geqslant\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a96\\\",\\\"\\\\\\\\eqslantgtr\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2273\\\",\\\"\\\\\\\\gtrsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a86\\\",\\\"\\\\\\\\gtrapprox\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22d7\\\",\\\"\\\\\\\\gtrdot\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22d9\\\",\\\"\\\\\\\\ggg\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2277\\\",\\\"\\\\\\\\gtrless\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22db\\\",\\\"\\\\\\\\gtreqless\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2a8c\\\",\\\"\\\\\\\\gtreqqless\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2256\\\",\\\"\\\\\\\\eqcirc\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2257\\\",\\\"\\\\\\\\circeq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u225c\\\",\\\"\\\\\\\\triangleq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u223c\\\",\\\"\\\\\\\\thicksim\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2248\\\",\\\"\\\\\\\\thickapprox\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2ac6\\\",\\\"\\\\\\\\supseteqq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22d1\\\",\\\"\\\\\\\\Supset\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2290\\\",\\\"\\\\\\\\sqsupset\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u227d\\\",\\\"\\\\\\\\succcurlyeq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22df\\\",\\\"\\\\\\\\curlyeqsucc\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u227f\\\",\\\"\\\\\\\\succsim\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2ab8\\\",\\\"\\\\\\\\succapprox\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22b3\\\",\\\"\\\\\\\\vartriangleright\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22b5\\\",\\\"\\\\\\\\trianglerighteq\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22a9\\\",\\\"\\\\\\\\Vdash\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2223\\\",\\\"\\\\\\\\shortmid\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2225\\\",\\\"\\\\\\\\shortparallel\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u226c\\\",\\\"\\\\\\\\between\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22d4\\\",\\\"\\\\\\\\pitchfork\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u221d\\\",\\\"\\\\\\\\varpropto\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u25c0\\\",\\\"\\\\\\\\blacktriangleleft\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2234\\\",\\\"\\\\\\\\therefore\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u220d\\\",\\\"\\\\\\\\backepsilon\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u25b6\\\",\\\"\\\\\\\\blacktriangleright\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2235\\\",\\\"\\\\\\\\because\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22d8\\\",\\\"\\\\\\\\llless\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u22d9\\\",\\\"\\\\\\\\gggtr\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22b2\\\",\\\"\\\\\\\\lhd\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22b3\\\",\\\"\\\\\\\\rhd\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2242\\\",\\\"\\\\\\\\eqsim\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u22c8\\\",\\\"\\\\\\\\Join\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2251\\\",\\\"\\\\\\\\Doteq\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u2214\\\",\\\"\\\\\\\\dotplus\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u2216\\\",\\\"\\\\\\\\smallsetminus\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22d2\\\",\\\"\\\\\\\\Cap\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22d3\\\",\\\"\\\\\\\\Cup\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u2a5e\\\",\\\"\\\\\\\\doublebarwedge\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u229f\\\",\\\"\\\\\\\\boxminus\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u229e\\\",\\\"\\\\\\\\boxplus\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22c7\\\",\\\"\\\\\\\\divideontimes\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22c9\\\",\\\"\\\\\\\\ltimes\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22ca\\\",\\\"\\\\\\\\rtimes\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22cb\\\",\\\"\\\\\\\\leftthreetimes\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22cc\\\",\\\"\\\\\\\\rightthreetimes\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22cf\\\",\\\"\\\\\\\\curlywedge\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22ce\\\",\\\"\\\\\\\\curlyvee\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u229d\\\",\\\"\\\\\\\\circleddash\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u229b\\\",\\\"\\\\\\\\circledast\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22c5\\\",\\\"\\\\\\\\centerdot\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22ba\\\",\\\"\\\\\\\\intercal\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22d2\\\",\\\"\\\\\\\\doublecap\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22d3\\\",\\\"\\\\\\\\doublecup\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22a0\\\",\\\"\\\\\\\\boxtimes\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21e2\\\",\\\"\\\\\\\\dashrightarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21e0\\\",\\\"\\\\\\\\dashleftarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21c7\\\",\\\"\\\\\\\\leftleftarrows\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21c6\\\",\\\"\\\\\\\\leftrightarrows\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21da\\\",\\\"\\\\\\\\Lleftarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u219e\\\",\\\"\\\\\\\\twoheadleftarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21a2\\\",\\\"\\\\\\\\leftarrowtail\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21ab\\\",\\\"\\\\\\\\looparrowleft\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21cb\\\",\\\"\\\\\\\\leftrightharpoons\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21b6\\\",\\\"\\\\\\\\curvearrowleft\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21ba\\\",\\\"\\\\\\\\circlearrowleft\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21b0\\\",\\\"\\\\\\\\Lsh\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21c8\\\",\\\"\\\\\\\\upuparrows\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21bf\\\",\\\"\\\\\\\\upharpoonleft\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21c3\\\",\\\"\\\\\\\\downharpoonleft\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u22b8\\\",\\\"\\\\\\\\multimap\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21ad\\\",\\\"\\\\\\\\leftrightsquigarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21c9\\\",\\\"\\\\\\\\rightrightarrows\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21c4\\\",\\\"\\\\\\\\rightleftarrows\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21a0\\\",\\\"\\\\\\\\twoheadrightarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21a3\\\",\\\"\\\\\\\\rightarrowtail\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21ac\\\",\\\"\\\\\\\\looparrowright\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21b7\\\",\\\"\\\\\\\\curvearrowright\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21bb\\\",\\\"\\\\\\\\circlearrowright\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21b1\\\",\\\"\\\\\\\\Rsh\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21ca\\\",\\\"\\\\\\\\downdownarrows\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21be\\\",\\\"\\\\\\\\upharpoonright\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21c2\\\",\\\"\\\\\\\\downharpoonright\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21dd\\\",\\\"\\\\\\\\rightsquigarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21dd\\\",\\\"\\\\\\\\leadsto\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u21db\\\",\\\"\\\\\\\\Rrightarrow\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u21be\\\",\\\"\\\\\\\\restriction\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2018\\\",\\\"`\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"$\\\",\\\"\\\\\\\\$\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"$\\\",\\\"\\\\\\\\$\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"$\\\",\\\"\\\\\\\\textdollar\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"%\\\",\\\"\\\\\\\\%\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"%\\\",\\\"\\\\\\\\%\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"_\\\",\\\"\\\\\\\\_\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"_\\\",\\\"\\\\\\\\_\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"_\\\",\\\"\\\\\\\\textunderscore\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2220\\\",\\\"\\\\\\\\angle\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u221e\\\",\\\"\\\\\\\\infty\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2032\\\",\\\"\\\\\\\\prime\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u25b3\\\",\\\"\\\\\\\\triangle\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u0393\\\",\\\"\\\\\\\\Gamma\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u0394\\\",\\\"\\\\\\\\Delta\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u0398\\\",\\\"\\\\\\\\Theta\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u039b\\\",\\\"\\\\\\\\Lambda\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u039e\\\",\\\"\\\\\\\\Xi\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u03a0\\\",\\\"\\\\\\\\Pi\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u03a3\\\",\\\"\\\\\\\\Sigma\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u03a5\\\",\\\"\\\\\\\\Upsilon\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u03a6\\\",\\\"\\\\\\\\Phi\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u03a8\\\",\\\"\\\\\\\\Psi\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u03a9\\\",\\\"\\\\\\\\Omega\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"A\\\",\\\"\\\\u0391\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"B\\\",\\\"\\\\u0392\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"E\\\",\\\"\\\\u0395\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"Z\\\",\\\"\\\\u0396\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"H\\\",\\\"\\\\u0397\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"I\\\",\\\"\\\\u0399\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"K\\\",\\\"\\\\u039a\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"M\\\",\\\"\\\\u039c\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"N\\\",\\\"\\\\u039d\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"O\\\",\\\"\\\\u039f\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"P\\\",\\\"\\\\u03a1\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"T\\\",\\\"\\\\u03a4\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"X\\\",\\\"\\\\u03a7\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\xac\\\",\\\"\\\\\\\\neg\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\xac\\\",\\\"\\\\\\\\lnot\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u22a4\\\",\\\"\\\\\\\\top\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u22a5\\\",\\\"\\\\\\\\bot\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2205\\\",\\\"\\\\\\\\emptyset\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2205\\\",\\\"\\\\\\\\varnothing\\\"),W(\\\"math\\\",j,K,\\\"\\\\u03b1\\\",\\\"\\\\\\\\alpha\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03b2\\\",\\\"\\\\\\\\beta\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03b3\\\",\\\"\\\\\\\\gamma\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03b4\\\",\\\"\\\\\\\\delta\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03f5\\\",\\\"\\\\\\\\epsilon\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03b6\\\",\\\"\\\\\\\\zeta\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03b7\\\",\\\"\\\\\\\\eta\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03b8\\\",\\\"\\\\\\\\theta\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03b9\\\",\\\"\\\\\\\\iota\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03ba\\\",\\\"\\\\\\\\kappa\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03bb\\\",\\\"\\\\\\\\lambda\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03bc\\\",\\\"\\\\\\\\mu\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03bd\\\",\\\"\\\\\\\\nu\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03be\\\",\\\"\\\\\\\\xi\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03bf\\\",\\\"\\\\\\\\omicron\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c0\\\",\\\"\\\\\\\\pi\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c1\\\",\\\"\\\\\\\\rho\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c3\\\",\\\"\\\\\\\\sigma\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c4\\\",\\\"\\\\\\\\tau\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c5\\\",\\\"\\\\\\\\upsilon\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03d5\\\",\\\"\\\\\\\\phi\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c7\\\",\\\"\\\\\\\\chi\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c8\\\",\\\"\\\\\\\\psi\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c9\\\",\\\"\\\\\\\\omega\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03b5\\\",\\\"\\\\\\\\varepsilon\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03d1\\\",\\\"\\\\\\\\vartheta\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03d6\\\",\\\"\\\\\\\\varpi\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03f1\\\",\\\"\\\\\\\\varrho\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c2\\\",\\\"\\\\\\\\varsigma\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u03c6\\\",\\\"\\\\\\\\varphi\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2217\\\",\\\"*\\\"),W(\\\"math\\\",j,Z,\\\"+\\\",\\\"+\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2212\\\",\\\"-\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u22c5\\\",\\\"\\\\\\\\cdot\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2218\\\",\\\"\\\\\\\\circ\\\"),W(\\\"math\\\",j,Z,\\\"\\\\xf7\\\",\\\"\\\\\\\\div\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\xb1\\\",\\\"\\\\\\\\pm\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\xd7\\\",\\\"\\\\\\\\times\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2229\\\",\\\"\\\\\\\\cap\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u222a\\\",\\\"\\\\\\\\cup\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2216\\\",\\\"\\\\\\\\setminus\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2227\\\",\\\"\\\\\\\\land\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2228\\\",\\\"\\\\\\\\lor\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2227\\\",\\\"\\\\\\\\wedge\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2228\\\",\\\"\\\\\\\\vee\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u221a\\\",\\\"\\\\\\\\surd\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"(\\\",\\\"(\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"[\\\",\\\"[\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"\\\\u27e8\\\",\\\"\\\\\\\\langle\\\",!0),W(\\\"math\\\",j,\\\"open\\\",\\\"\\\\u2223\\\",\\\"\\\\\\\\lvert\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"\\\\u2225\\\",\\\"\\\\\\\\lVert\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\")\\\",\\\")\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"]\\\",\\\"]\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"?\\\",\\\"?\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"!\\\",\\\"!\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"\\\\u27e9\\\",\\\"\\\\\\\\rangle\\\",!0),W(\\\"math\\\",j,\\\"close\\\",\\\"\\\\u2223\\\",\\\"\\\\\\\\rvert\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"\\\\u2225\\\",\\\"\\\\\\\\rVert\\\"),W(\\\"math\\\",j,Q,\\\"=\\\",\\\"=\\\"),W(\\\"math\\\",j,Q,\\\"<\\\",\\\"<\\\"),W(\\\"math\\\",j,Q,\\\">\\\",\\\">\\\"),W(\\\"math\\\",j,Q,\\\":\\\",\\\":\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2248\\\",\\\"\\\\\\\\approx\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2245\\\",\\\"\\\\\\\\cong\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2265\\\",\\\"\\\\\\\\ge\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2265\\\",\\\"\\\\\\\\geq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2190\\\",\\\"\\\\\\\\gets\\\"),W(\\\"math\\\",j,Q,\\\">\\\",\\\"\\\\\\\\gt\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2208\\\",\\\"\\\\\\\\in\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\ue020\\\",\\\"\\\\\\\\@not\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2282\\\",\\\"\\\\\\\\subset\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2283\\\",\\\"\\\\\\\\supset\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2286\\\",\\\"\\\\\\\\subseteq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2287\\\",\\\"\\\\\\\\supseteq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2288\\\",\\\"\\\\\\\\nsubseteq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2289\\\",\\\"\\\\\\\\nsupseteq\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u22a8\\\",\\\"\\\\\\\\models\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2190\\\",\\\"\\\\\\\\leftarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2264\\\",\\\"\\\\\\\\le\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2264\\\",\\\"\\\\\\\\leq\\\",!0),W(\\\"math\\\",j,Q,\\\"<\\\",\\\"\\\\\\\\lt\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2192\\\",\\\"\\\\\\\\rightarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2192\\\",\\\"\\\\\\\\to\\\"),W(\\\"math\\\",$,Q,\\\"\\\\u2271\\\",\\\"\\\\\\\\ngeq\\\",!0),W(\\\"math\\\",$,Q,\\\"\\\\u2270\\\",\\\"\\\\\\\\nleq\\\",!0),W(\\\"math\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"\\\\\\\\ \\\"),W(\\\"math\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"~\\\"),W(\\\"math\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"\\\\\\\\space\\\"),W(\\\"math\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"\\\\\\\\nobreakspace\\\"),W(\\\"text\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"\\\\\\\\ \\\"),W(\\\"text\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"~\\\"),W(\\\"text\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"\\\\\\\\space\\\"),W(\\\"text\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"\\\\\\\\nobreakspace\\\"),W(\\\"math\\\",j,\\\"spacing\\\",null,\\\"\\\\\\\\nobreak\\\"),W(\\\"math\\\",j,\\\"spacing\\\",null,\\\"\\\\\\\\allowbreak\\\"),W(\\\"math\\\",j,\\\"punct\\\",\\\",\\\",\\\",\\\"),W(\\\"math\\\",j,\\\"punct\\\",\\\";\\\",\\\";\\\"),W(\\\"math\\\",$,Z,\\\"\\\\u22bc\\\",\\\"\\\\\\\\barwedge\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22bb\\\",\\\"\\\\\\\\veebar\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2299\\\",\\\"\\\\\\\\odot\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2295\\\",\\\"\\\\\\\\oplus\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2297\\\",\\\"\\\\\\\\otimes\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2202\\\",\\\"\\\\\\\\partial\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u2298\\\",\\\"\\\\\\\\oslash\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u229a\\\",\\\"\\\\\\\\circledcirc\\\",!0),W(\\\"math\\\",$,Z,\\\"\\\\u22a1\\\",\\\"\\\\\\\\boxdot\\\",!0),W(\\\"math\\\",j,Z,\\\"\\\\u25b3\\\",\\\"\\\\\\\\bigtriangleup\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u25bd\\\",\\\"\\\\\\\\bigtriangledown\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u2020\\\",\\\"\\\\\\\\dagger\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u22c4\\\",\\\"\\\\\\\\diamond\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u22c6\\\",\\\"\\\\\\\\star\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u25c3\\\",\\\"\\\\\\\\triangleleft\\\"),W(\\\"math\\\",j,Z,\\\"\\\\u25b9\\\",\\\"\\\\\\\\triangleright\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"{\\\",\\\"\\\\\\\\{\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"{\\\",\\\"\\\\\\\\{\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"{\\\",\\\"\\\\\\\\textbraceleft\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"}\\\",\\\"\\\\\\\\}\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"}\\\",\\\"\\\\\\\\}\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"}\\\",\\\"\\\\\\\\textbraceright\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"{\\\",\\\"\\\\\\\\lbrace\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"}\\\",\\\"\\\\\\\\rbrace\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"[\\\",\\\"\\\\\\\\lbrack\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"[\\\",\\\"\\\\\\\\lbrack\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\"]\\\",\\\"\\\\\\\\rbrack\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"]\\\",\\\"\\\\\\\\rbrack\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"(\\\",\\\"\\\\\\\\lparen\\\"),W(\\\"math\\\",j,\\\"close\\\",\\\")\\\",\\\"\\\\\\\\rparen\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"<\\\",\\\"\\\\\\\\textless\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\">\\\",\\\"\\\\\\\\textgreater\\\"),W(\\\"math\\\",j,\\\"open\\\",\\\"\\\\u230a\\\",\\\"\\\\\\\\lfloor\\\",!0),W(\\\"math\\\",j,\\\"close\\\",\\\"\\\\u230b\\\",\\\"\\\\\\\\rfloor\\\",!0),W(\\\"math\\\",j,\\\"open\\\",\\\"\\\\u2308\\\",\\\"\\\\\\\\lceil\\\",!0),W(\\\"math\\\",j,\\\"close\\\",\\\"\\\\u2309\\\",\\\"\\\\\\\\rceil\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\\\\\\\\",\\\"\\\\\\\\backslash\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2223\\\",\\\"|\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2223\\\",\\\"\\\\\\\\vert\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"|\\\",\\\"\\\\\\\\textbar\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2225\\\",\\\"\\\\\\\\|\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u2225\\\",\\\"\\\\\\\\Vert\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2225\\\",\\\"\\\\\\\\textbardbl\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"~\\\",\\\"\\\\\\\\textasciitilde\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\\\\\\\\",\\\"\\\\\\\\textbackslash\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"^\\\",\\\"\\\\\\\\textasciicircum\\\"),W(\\\"math\\\",j,Q,\\\"\\\\u2191\\\",\\\"\\\\\\\\uparrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21d1\\\",\\\"\\\\\\\\Uparrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2193\\\",\\\"\\\\\\\\downarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21d3\\\",\\\"\\\\\\\\Downarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u2195\\\",\\\"\\\\\\\\updownarrow\\\",!0),W(\\\"math\\\",j,Q,\\\"\\\\u21d5\\\",\\\"\\\\\\\\Updownarrow\\\",!0),W(\\\"math\\\",j,J,\\\"\\\\u2210\\\",\\\"\\\\\\\\coprod\\\"),W(\\\"math\\\",j,J,\\\"\\\\u22c1\\\",\\\"\\\\\\\\bigvee\\\"),W(\\\"math\\\",j,J,\\\"\\\\u22c0\\\",\\\"\\\\\\\\bigwedge\\\"),W(\\\"math\\\",j,J,\\\"\\\\u2a04\\\",\\\"\\\\\\\\biguplus\\\"),W(\\\"math\\\",j,J,\\\"\\\\u22c2\\\",\\\"\\\\\\\\bigcap\\\"),W(\\\"math\\\",j,J,\\\"\\\\u22c3\\\",\\\"\\\\\\\\bigcup\\\"),W(\\\"math\\\",j,J,\\\"\\\\u222b\\\",\\\"\\\\\\\\int\\\"),W(\\\"math\\\",j,J,\\\"\\\\u222b\\\",\\\"\\\\\\\\intop\\\"),W(\\\"math\\\",j,J,\\\"\\\\u222c\\\",\\\"\\\\\\\\iint\\\"),W(\\\"math\\\",j,J,\\\"\\\\u222d\\\",\\\"\\\\\\\\iiint\\\"),W(\\\"math\\\",j,J,\\\"\\\\u220f\\\",\\\"\\\\\\\\prod\\\"),W(\\\"math\\\",j,J,\\\"\\\\u2211\\\",\\\"\\\\\\\\sum\\\"),W(\\\"math\\\",j,J,\\\"\\\\u2a02\\\",\\\"\\\\\\\\bigotimes\\\"),W(\\\"math\\\",j,J,\\\"\\\\u2a01\\\",\\\"\\\\\\\\bigoplus\\\"),W(\\\"math\\\",j,J,\\\"\\\\u2a00\\\",\\\"\\\\\\\\bigodot\\\"),W(\\\"math\\\",j,J,\\\"\\\\u222e\\\",\\\"\\\\\\\\oint\\\"),W(\\\"math\\\",j,J,\\\"\\\\u222f\\\",\\\"\\\\\\\\oiint\\\"),W(\\\"math\\\",j,J,\\\"\\\\u2230\\\",\\\"\\\\\\\\oiiint\\\"),W(\\\"math\\\",j,J,\\\"\\\\u2a06\\\",\\\"\\\\\\\\bigsqcup\\\"),W(\\\"math\\\",j,J,\\\"\\\\u222b\\\",\\\"\\\\\\\\smallint\\\"),W(\\\"text\\\",j,\\\"inner\\\",\\\"\\\\u2026\\\",\\\"\\\\\\\\textellipsis\\\"),W(\\\"math\\\",j,\\\"inner\\\",\\\"\\\\u2026\\\",\\\"\\\\\\\\mathellipsis\\\"),W(\\\"text\\\",j,\\\"inner\\\",\\\"\\\\u2026\\\",\\\"\\\\\\\\ldots\\\",!0),W(\\\"math\\\",j,\\\"inner\\\",\\\"\\\\u2026\\\",\\\"\\\\\\\\ldots\\\",!0),W(\\\"math\\\",j,\\\"inner\\\",\\\"\\\\u22ef\\\",\\\"\\\\\\\\@cdots\\\",!0),W(\\\"math\\\",j,\\\"inner\\\",\\\"\\\\u22f1\\\",\\\"\\\\\\\\ddots\\\",!0),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\u22ee\\\",\\\"\\\\\\\\varvdots\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\u02ca\\\",\\\"\\\\\\\\acute\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\u02cb\\\",\\\"\\\\\\\\grave\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\xa8\\\",\\\"\\\\\\\\ddot\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"~\\\",\\\"\\\\\\\\tilde\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\u02c9\\\",\\\"\\\\\\\\bar\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\u02d8\\\",\\\"\\\\\\\\breve\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\u02c7\\\",\\\"\\\\\\\\check\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"^\\\",\\\"\\\\\\\\hat\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\u20d7\\\",\\\"\\\\\\\\vec\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\u02d9\\\",\\\"\\\\\\\\dot\\\"),W(\\\"math\\\",j,\\\"accent-token\\\",\\\"\\\\u02da\\\",\\\"\\\\\\\\mathring\\\"),W(\\\"math\\\",j,K,\\\"\\\\u0131\\\",\\\"\\\\\\\\imath\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\u0237\\\",\\\"\\\\\\\\jmath\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u0131\\\",\\\"\\\\\\\\i\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u0237\\\",\\\"\\\\\\\\j\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xdf\\\",\\\"\\\\\\\\ss\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xe6\\\",\\\"\\\\\\\\ae\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xe6\\\",\\\"\\\\\\\\ae\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u0153\\\",\\\"\\\\\\\\oe\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xf8\\\",\\\"\\\\\\\\o\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xc6\\\",\\\"\\\\\\\\AE\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u0152\\\",\\\"\\\\\\\\OE\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xd8\\\",\\\"\\\\\\\\O\\\",!0),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02ca\\\",\\\"\\\\\\\\'\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02cb\\\",\\\"\\\\\\\\`\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02c6\\\",\\\"\\\\\\\\^\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02dc\\\",\\\"\\\\\\\\~\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02c9\\\",\\\"\\\\\\\\=\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02d8\\\",\\\"\\\\\\\\u\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02d9\\\",\\\"\\\\\\\\.\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02da\\\",\\\"\\\\\\\\r\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02c7\\\",\\\"\\\\\\\\v\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\xa8\\\",'\\\\\\\\\\\"'),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u02dd\\\",\\\"\\\\\\\\H\\\"),W(\\\"text\\\",j,\\\"accent-token\\\",\\\"\\\\u25ef\\\",\\\"\\\\\\\\textcircled\\\");var tt={\\\"--\\\":!0,\\\"---\\\":!0,\\\"``\\\":!0,\\\"''\\\":!0};W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2013\\\",\\\"--\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2013\\\",\\\"\\\\\\\\textendash\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2014\\\",\\\"---\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2014\\\",\\\"\\\\\\\\textemdash\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2018\\\",\\\"`\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2018\\\",\\\"\\\\\\\\textquoteleft\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2019\\\",\\\"'\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2019\\\",\\\"\\\\\\\\textquoteright\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u201c\\\",\\\"``\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u201c\\\",\\\"\\\\\\\\textquotedblleft\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u201d\\\",\\\"''\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u201d\\\",\\\"\\\\\\\\textquotedblright\\\"),W(\\\"math\\\",j,\\\"textord\\\",\\\"\\\\xb0\\\",\\\"\\\\\\\\degree\\\",!0),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xb0\\\",\\\"\\\\\\\\degree\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xb0\\\",\\\"\\\\\\\\textdegree\\\",!0),W(\\\"math\\\",j,K,\\\"\\\\xa3\\\",\\\"\\\\\\\\pounds\\\"),W(\\\"math\\\",j,K,\\\"\\\\xa3\\\",\\\"\\\\\\\\mathsterling\\\",!0),W(\\\"text\\\",j,K,\\\"\\\\xa3\\\",\\\"\\\\\\\\pounds\\\"),W(\\\"text\\\",j,K,\\\"\\\\xa3\\\",\\\"\\\\\\\\textsterling\\\",!0),W(\\\"math\\\",$,\\\"textord\\\",\\\"\\\\u2720\\\",\\\"\\\\\\\\maltese\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"\\\\u2720\\\",\\\"\\\\\\\\maltese\\\"),W(\\\"text\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"\\\\\\\\ \\\"),W(\\\"text\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\" \\\"),W(\\\"text\\\",j,\\\"spacing\\\",\\\"\\\\xa0\\\",\\\"~\\\");for(var et=0;et<'0123456789/@.\\\"'.length;et++){var rt='0123456789/@.\\\"'.charAt(et);W(\\\"math\\\",j,\\\"textord\\\",rt,rt)}for(var at=0;at<'0123456789!@*()-=+[]<>|\\\";:?/.,'.length;at++){var nt='0123456789!@*()-=+[]<>|\\\";:?/.,'.charAt(at);W(\\\"text\\\",j,\\\"textord\\\",nt,nt)}for(var ot=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\\\",it=0;it<ot.length;it++){var st=ot.charAt(it);W(\\\"math\\\",j,K,st,st),W(\\\"text\\\",j,\\\"textord\\\",st,st)}W(\\\"math\\\",$,\\\"textord\\\",\\\"C\\\",\\\"\\\\u2102\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"C\\\",\\\"\\\\u2102\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"H\\\",\\\"\\\\u210d\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"H\\\",\\\"\\\\u210d\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"N\\\",\\\"\\\\u2115\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"N\\\",\\\"\\\\u2115\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"P\\\",\\\"\\\\u2119\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"P\\\",\\\"\\\\u2119\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"Q\\\",\\\"\\\\u211a\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"Q\\\",\\\"\\\\u211a\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"R\\\",\\\"\\\\u211d\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"R\\\",\\\"\\\\u211d\\\"),W(\\\"math\\\",$,\\\"textord\\\",\\\"Z\\\",\\\"\\\\u2124\\\"),W(\\\"text\\\",$,\\\"textord\\\",\\\"Z\\\",\\\"\\\\u2124\\\"),W(\\\"math\\\",j,K,\\\"h\\\",\\\"\\\\u210e\\\"),W(\\\"text\\\",j,K,\\\"h\\\",\\\"\\\\u210e\\\");for(var ht=\\\"\\\",lt=0;lt<ot.length;lt++){var mt=ot.charAt(lt);W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56320+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56372+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56424+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56580+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56736+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56788+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56840+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56944+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),lt<26&&(W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56632+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht),W(\\\"math\\\",j,K,mt,ht=String.fromCharCode(55349,56476+lt)),W(\\\"text\\\",j,\\\"textord\\\",mt,ht))}W(\\\"math\\\",j,K,\\\"k\\\",ht=String.fromCharCode(55349,56668)),W(\\\"text\\\",j,\\\"textord\\\",\\\"k\\\",ht);for(var ct=0;ct<10;ct++){var ut=ct.toString();W(\\\"math\\\",j,K,ut,ht=String.fromCharCode(55349,57294+ct)),W(\\\"text\\\",j,\\\"textord\\\",ut,ht),W(\\\"math\\\",j,K,ut,ht=String.fromCharCode(55349,57314+ct)),W(\\\"text\\\",j,\\\"textord\\\",ut,ht),W(\\\"math\\\",j,K,ut,ht=String.fromCharCode(55349,57324+ct)),W(\\\"text\\\",j,\\\"textord\\\",ut,ht),W(\\\"math\\\",j,K,ut,ht=String.fromCharCode(55349,57334+ct)),W(\\\"text\\\",j,\\\"textord\\\",ut,ht)}for(var dt=0;dt<\\\"\\\\xc7\\\\xd0\\\\xde\\\\xe7\\\\xfe\\\".length;dt++){var pt=\\\"\\\\xc7\\\\xd0\\\\xde\\\\xe7\\\\xfe\\\".charAt(dt);W(\\\"math\\\",j,K,pt,pt),W(\\\"text\\\",j,\\\"textord\\\",pt,pt)}W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\xf0\\\",\\\"\\\\xf0\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2013\\\",\\\"\\\\u2013\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2014\\\",\\\"\\\\u2014\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2018\\\",\\\"\\\\u2018\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u2019\\\",\\\"\\\\u2019\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u201c\\\",\\\"\\\\u201c\\\"),W(\\\"text\\\",j,\\\"textord\\\",\\\"\\\\u201d\\\",\\\"\\\\u201d\\\");var ft=[[\\\"mathbf\\\",\\\"textbf\\\",\\\"Main-Bold\\\"],[\\\"mathbf\\\",\\\"textbf\\\",\\\"Main-Bold\\\"],[\\\"mathdefault\\\",\\\"textit\\\",\\\"Math-Italic\\\"],[\\\"mathdefault\\\",\\\"textit\\\",\\\"Math-Italic\\\"],[\\\"boldsymbol\\\",\\\"boldsymbol\\\",\\\"Main-BoldItalic\\\"],[\\\"boldsymbol\\\",\\\"boldsymbol\\\",\\\"Main-BoldItalic\\\"],[\\\"mathscr\\\",\\\"textscr\\\",\\\"Script-Regular\\\"],[\\\"\\\",\\\"\\\",\\\"\\\"],[\\\"\\\",\\\"\\\",\\\"\\\"],[\\\"\\\",\\\"\\\",\\\"\\\"],[\\\"mathfrak\\\",\\\"textfrak\\\",\\\"Fraktur-Regular\\\"],[\\\"mathfrak\\\",\\\"textfrak\\\",\\\"Fraktur-Regular\\\"],[\\\"mathbb\\\",\\\"textbb\\\",\\\"AMS-Regular\\\"],[\\\"mathbb\\\",\\\"textbb\\\",\\\"AMS-Regular\\\"],[\\\"\\\",\\\"\\\",\\\"\\\"],[\\\"\\\",\\\"\\\",\\\"\\\"],[\\\"mathsf\\\",\\\"textsf\\\",\\\"SansSerif-Regular\\\"],[\\\"mathsf\\\",\\\"textsf\\\",\\\"SansSerif-Regular\\\"],[\\\"mathboldsf\\\",\\\"textboldsf\\\",\\\"SansSerif-Bold\\\"],[\\\"mathboldsf\\\",\\\"textboldsf\\\",\\\"SansSerif-Bold\\\"],[\\\"mathitsf\\\",\\\"textitsf\\\",\\\"SansSerif-Italic\\\"],[\\\"mathitsf\\\",\\\"textitsf\\\",\\\"SansSerif-Italic\\\"],[\\\"\\\",\\\"\\\",\\\"\\\"],[\\\"\\\",\\\"\\\",\\\"\\\"],[\\\"mathtt\\\",\\\"texttt\\\",\\\"Typewriter-Regular\\\"],[\\\"mathtt\\\",\\\"texttt\\\",\\\"Typewriter-Regular\\\"]],gt=[[\\\"mathbf\\\",\\\"textbf\\\",\\\"Main-Bold\\\"],[\\\"\\\",\\\"\\\",\\\"\\\"],[\\\"mathsf\\\",\\\"textsf\\\",\\\"SansSerif-Regular\\\"],[\\\"mathboldsf\\\",\\\"textboldsf\\\",\\\"SansSerif-Bold\\\"],[\\\"mathtt\\\",\\\"texttt\\\",\\\"Typewriter-Regular\\\"]],xt=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],vt=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],bt=function(t,e){return e.size<2?t:xt[t-1][e.size-1]},yt=function(){function t(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||\\\"\\\",this.fontFamily=e.fontFamily||\\\"\\\",this.fontWeight=e.fontWeight||\\\"\\\",this.fontShape=e.fontShape||\\\"\\\",this.sizeMultiplier=vt[this.size-1],this.maxSize=e.maxSize,this._fontMetrics=void 0}var e=t.prototype;return e.extend=function(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize};for(var a in e)e.hasOwnProperty(a)&&(r[a]=e[a]);return new t(r)},e.havingStyle=function(t){return this.style===t?this:this.extend({style:t,size:bt(this.textSize,t)})},e.havingCrampedStyle=function(){return this.havingStyle(this.style.cramp())},e.havingSize=function(t){return this.size===t&&this.textSize===t?this:this.extend({style:this.style.text(),size:t,textSize:t,sizeMultiplier:vt[t-1]})},e.havingBaseStyle=function(e){e=e||this.style.text();var r=bt(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})},e.havingBaseSizing=function(){var t;switch(this.style.id){case 4:case 5:t=3;break;case 6:case 7:t=1;break;default:t=6}return this.extend({style:this.style.text(),size:t})},e.withColor=function(t){return this.extend({color:t})},e.withPhantom=function(){return this.extend({phantom:!0})},e.withFont=function(t){return this.extend({font:t})},e.withTextFontFamily=function(t){return this.extend({fontFamily:t,font:\\\"\\\"})},e.withTextFontWeight=function(t){return this.extend({fontWeight:t,font:\\\"\\\"})},e.withTextFontShape=function(t){return this.extend({fontShape:t,font:\\\"\\\"})},e.sizingClasses=function(t){return t.size!==this.size?[\\\"sizing\\\",\\\"reset-size\\\"+t.size,\\\"size\\\"+this.size]:[]},e.baseSizingClasses=function(){return this.size!==t.BASESIZE?[\\\"sizing\\\",\\\"reset-size\\\"+this.size,\\\"size\\\"+t.BASESIZE]:[]},e.fontMetrics=function(){return this._fontMetrics||(this._fontMetrics=function(t){var e;if(!U[e=t>=5?0:t>=3?1:2]){var r=U[e]={cssEmPerMu:D.quad[e]/18};for(var a in D)D.hasOwnProperty(a)&&(r[a]=D[a][e])}return U[e]}(this.size)),this._fontMetrics},e.getColor=function(){return this.phantom?\\\"transparent\\\":this.color},t}();yt.BASESIZE=6;var wt=yt,kt={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},St={ex:!0,em:!0,mu:!0},zt=function(t,e){var r;if(t.unit in kt)r=kt[t.unit]/e.fontMetrics().ptPerEm/e.sizeMultiplier;else if(\\\"mu\\\"===t.unit)r=e.fontMetrics().cssEmPerMu;else{var a;if(a=e.style.isTight()?e.havingStyle(e.style.text()):e,\\\"ex\\\"===t.unit)r=a.fontMetrics().xHeight;else{if(\\\"em\\\"!==t.unit)throw new i(\\\"Invalid unit: '\\\"+t.unit+\\\"'\\\");r=a.fontMetrics().quad}a!==e&&(r*=a.sizeMultiplier/e.sizeMultiplier)}return Math.min(t.number*r,e.maxSize)},Mt=[\\\"\\\\\\\\imath\\\",\\\"\\\\u0131\\\",\\\"\\\\\\\\jmath\\\",\\\"\\\\u0237\\\",\\\"\\\\\\\\pounds\\\",\\\"\\\\\\\\mathsterling\\\",\\\"\\\\\\\\textsterling\\\",\\\"\\\\xa3\\\"],Tt=function(t,e,r){return _[r][t]&&_[r][t].replace&&(t=_[r][t].replace),{value:t,metrics:V(t,e,r)}},At=function(t,e,r,a,n){var o,i=Tt(t,e,r),s=i.metrics;if(t=i.value,s){var h=s.italic;(\\\"text\\\"===r||a&&\\\"mathit\\\"===a.font)&&(h=0),o=new E(t,s.height,s.depth,h,s.skew,s.width,n)}else\\\"undefined\\\"!=typeof console&&console.warn(\\\"No character metrics for '\\\"+t+\\\"' in style '\\\"+e+\\\"'\\\"),o=new E(t,0,0,0,0,0,n);if(a){o.maxFontSize=a.sizeMultiplier,a.style.isTight()&&o.classes.push(\\\"mtight\\\");var l=a.getColor();l&&(o.style.color=l)}return o},Bt=function(t,e){if(A(t.classes)!==A(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;for(var r in t.style)if(t.style.hasOwnProperty(r)&&t.style[r]!==e.style[r])return!1;for(var a in e.style)if(e.style.hasOwnProperty(a)&&t.style[a]!==e.style[a])return!1;return!0},qt=function(t){for(var e=0,r=0,a=0,n=0;n<t.children.length;n++){var o=t.children[n];o.height>e&&(e=o.height),o.depth>r&&(r=o.depth),o.maxFontSize>a&&(a=o.maxFontSize)}t.height=e,t.depth=r,t.maxFontSize=a},Ct=function(t,e,r,a){var n=new N(t,e,r,a);return qt(n),n},Nt=function(t,e,r,a){return new N(t,e,r,a)},It=function(t){var e=new T(t);return qt(e),e},Ot=function(t,e,r){var a=\\\"\\\";switch(t){case\\\"amsrm\\\":a=\\\"AMS\\\";break;case\\\"textrm\\\":a=\\\"Main\\\";break;case\\\"textsf\\\":a=\\\"SansSerif\\\";break;case\\\"texttt\\\":a=\\\"Typewriter\\\";break;default:a=t}return a+\\\"-\\\"+(\\\"textbf\\\"===e&&\\\"textit\\\"===r?\\\"BoldItalic\\\":\\\"textbf\\\"===e?\\\"Bold\\\":\\\"textit\\\"===e?\\\"Italic\\\":\\\"Regular\\\")},Et={mathbf:{variant:\\\"bold\\\",fontName:\\\"Main-Bold\\\"},mathrm:{variant:\\\"normal\\\",fontName:\\\"Main-Regular\\\"},textit:{variant:\\\"italic\\\",fontName:\\\"Main-Italic\\\"},mathit:{variant:\\\"italic\\\",fontName:\\\"Main-Italic\\\"},mathbb:{variant:\\\"double-struck\\\",fontName:\\\"AMS-Regular\\\"},mathcal:{variant:\\\"script\\\",fontName:\\\"Caligraphic-Regular\\\"},mathfrak:{variant:\\\"fraktur\\\",fontName:\\\"Fraktur-Regular\\\"},mathscr:{variant:\\\"script\\\",fontName:\\\"Script-Regular\\\"},mathsf:{variant:\\\"sans-serif\\\",fontName:\\\"SansSerif-Regular\\\"},mathtt:{variant:\\\"monospace\\\",fontName:\\\"Typewriter-Regular\\\"}},Rt={vec:[\\\"vec\\\",.471,.714],oiintSize1:[\\\"oiintSize1\\\",.957,.499],oiintSize2:[\\\"oiintSize2\\\",1.472,.659],oiiintSize1:[\\\"oiiintSize1\\\",1.304,.499],oiiintSize2:[\\\"oiiintSize2\\\",1.98,.659]},Lt={fontMap:Et,makeSymbol:At,mathsym:function(t,e,r,a){return void 0===a&&(a=[]),r&&r.font&&\\\"boldsymbol\\\"===r.font&&Tt(t,\\\"Main-Bold\\\",e).metrics?At(t,\\\"Main-Bold\\\",e,r,a.concat([\\\"mathbf\\\"])):\\\"\\\\\\\\\\\"===t||\\\"main\\\"===_[e][t].font?At(t,\\\"Main-Regular\\\",e,r,a):At(t,\\\"AMS-Regular\\\",e,r,a.concat([\\\"amsrm\\\"]))},makeSpan:Ct,makeSvgSpan:Nt,makeLineSpan:function(t,e,r){var a=Ct([t],[],e);return a.height=r||e.fontMetrics().defaultRuleThickness,a.style.borderBottomWidth=a.height+\\\"em\\\",a.maxFontSize=1,a},makeAnchor:function(t,e,r,a){var n=new I(t,e,r,a);return qt(n),n},makeFragment:It,wrapFragment:function(t,e){return t instanceof T?Ct([],[t],e):t},makeVList:function(t,e){for(var r=function(t){if(\\\"individualShift\\\"===t.positionType){for(var e=t.children,r=[e[0]],a=-e[0].shift-e[0].elem.depth,n=a,o=1;o<e.length;o++){var i=-e[o].shift-n-e[o].elem.depth,s=i-(e[o-1].elem.height+e[o-1].elem.depth);n+=i,r.push({type:\\\"kern\\\",size:s}),r.push(e[o])}return{children:r,depth:a}}var h;if(\\\"top\\\"===t.positionType){for(var l=t.positionData,m=0;m<t.children.length;m++){var c=t.children[m];l-=\\\"kern\\\"===c.type?c.size:c.elem.height+c.elem.depth}h=l}else if(\\\"bottom\\\"===t.positionType)h=-t.positionData;else{var u=t.children[0];if(\\\"elem\\\"!==u.type)throw new Error('First child must have type \\\"elem\\\".');if(\\\"shift\\\"===t.positionType)h=-u.elem.depth-t.positionData;else{if(\\\"firstBaseline\\\"!==t.positionType)throw new Error(\\\"Invalid positionType \\\"+t.positionType+\\\".\\\");h=-u.elem.depth}}return{children:t.children,depth:h}}(t),a=r.children,n=r.depth,o=0,i=0;i<a.length;i++){var s=a[i];if(\\\"elem\\\"===s.type){var h=s.elem;o=Math.max(o,h.maxFontSize,h.height)}}o+=2;var l=Ct([\\\"pstrut\\\"],[]);l.style.height=o+\\\"em\\\";for(var m=[],c=n,u=n,d=n,p=0;p<a.length;p++){var f=a[p];if(\\\"kern\\\"===f.type)d+=f.size;else{var g=f.elem,x=f.wrapperClasses||[],v=f.wrapperStyle||{},b=Ct(x,[l,g],void 0,v);b.style.top=-o-d-g.depth+\\\"em\\\",f.marginLeft&&(b.style.marginLeft=f.marginLeft),f.marginRight&&(b.style.marginRight=f.marginRight),m.push(b),d+=g.height+g.depth}c=Math.min(c,d),u=Math.max(u,d)}var y,w=Ct([\\\"vlist\\\"],m);if(w.style.height=u+\\\"em\\\",c<0){var k=Ct([],[]),S=Ct([\\\"vlist\\\"],[k]);S.style.height=-c+\\\"em\\\";var z=Ct([\\\"vlist-s\\\"],[new E(\\\"\\\\u200b\\\")]);y=[Ct([\\\"vlist-r\\\"],[w,z]),Ct([\\\"vlist-r\\\"],[S])]}else y=[Ct([\\\"vlist-r\\\"],[w])];var M=Ct([\\\"vlist-t\\\"],y);return 2===y.length&&M.classes.push(\\\"vlist-t2\\\"),M.height=u,M.depth=-c,M},makeOrd:function(t,e,r){var a,n=t.mode,o=t.text,s=[\\\"mord\\\"],h=\\\"math\\\"===n||\\\"text\\\"===n&&e.font,l=h?e.font:e.fontFamily;if(55349===o.charCodeAt(0)){var m=function(t,e){var r=1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536,a=\\\"math\\\"===e?0:1;if(119808<=r&&r<120484){var n=Math.floor((r-119808)/26);return[ft[n][2],ft[n][a]]}if(120782<=r&&r<=120831){var o=Math.floor((r-120782)/10);return[gt[o][2],gt[o][a]]}if(120485===r||120486===r)return[ft[0][2],ft[0][a]];if(120486<r&&r<120782)return[\\\"\\\",\\\"\\\"];throw new i(\\\"Unsupported character: \\\"+t)}(o,n),u=m[0],d=m[1];return At(o,u,n,e,s.concat(d))}if(l){var p,f;if(\\\"boldsymbol\\\"===l||\\\"mathnormal\\\"===l){var g=\\\"boldsymbol\\\"===l?function(t,e,r,a){return Tt(t,\\\"Math-BoldItalic\\\",e).metrics?{fontName:\\\"Math-BoldItalic\\\",fontClass:\\\"boldsymbol\\\"}:{fontName:\\\"Main-Bold\\\",fontClass:\\\"mathbf\\\"}}(o,n):(a=o,c.contains(Mt,a)?{fontName:\\\"Main-Italic\\\",fontClass:\\\"mathit\\\"}:/[0-9]/.test(a.charAt(0))?{fontName:\\\"Caligraphic-Regular\\\",fontClass:\\\"mathcal\\\"}:{fontName:\\\"Math-Italic\\\",fontClass:\\\"mathdefault\\\"});p=g.fontName,f=[g.fontClass]}else c.contains(Mt,o)?(p=\\\"Main-Italic\\\",f=[\\\"mathit\\\"]):h?(p=Et[l].fontName,f=[l]):(p=Ot(l,e.fontWeight,e.fontShape),f=[l,e.fontWeight,e.fontShape]);if(Tt(o,p,n).metrics)return At(o,p,n,e,s.concat(f));if(tt.hasOwnProperty(o)&&\\\"Typewriter\\\"===p.substr(0,10)){for(var x=[],v=0;v<o.length;v++)x.push(At(o[v],p,n,e,s.concat(f)));return It(x)}}if(\\\"mathord\\\"===r){var b=function(t,e,r,a){return/[0-9]/.test(t.charAt(0))||c.contains(Mt,t)?{fontName:\\\"Main-Italic\\\",fontClass:\\\"mathit\\\"}:{fontName:\\\"Math-Italic\\\",fontClass:\\\"mathdefault\\\"}}(o);return At(o,b.fontName,n,e,s.concat([b.fontClass]))}if(\\\"textord\\\"===r){var y=_[n][o]&&_[n][o].font;if(\\\"ams\\\"===y){var w=Ot(\\\"amsrm\\\",e.fontWeight,e.fontShape);return At(o,w,n,e,s.concat(\\\"amsrm\\\",e.fontWeight,e.fontShape))}if(\\\"main\\\"!==y&&y){var k=Ot(y,e.fontWeight,e.fontShape);return At(o,k,n,e,s.concat(k,e.fontWeight,e.fontShape))}var S=Ot(\\\"textrm\\\",e.fontWeight,e.fontShape);return At(o,S,n,e,s.concat(e.fontWeight,e.fontShape))}throw new Error(\\\"unexpected type: \\\"+r+\\\" in makeOrd\\\")},makeGlue:function(t,e){var r=Ct([\\\"mspace\\\"],[],e),a=zt(t,e);return r.style.marginRight=a+\\\"em\\\",r},staticSvg:function(t,e){var r=Rt[t],a=r[0],n=r[1],o=r[2],i=new L(a),s=new R([i],{width:n+\\\"em\\\",height:o+\\\"em\\\",style:\\\"width:\\\"+n+\\\"em\\\",viewBox:\\\"0 0 \\\"+1e3*n+\\\" \\\"+1e3*o,preserveAspectRatio:\\\"xMinYMin\\\"}),h=Nt([\\\"overlay\\\"],[s],e);return h.height=o,h.style.height=o+\\\"em\\\",h.style.width=n+\\\"em\\\",h},svgData:Rt,tryCombineChars:function(t){for(var e=0;e<t.length-1;e++){var r=t[e],a=t[e+1];r instanceof E&&a instanceof E&&Bt(r,a)&&(r.text+=a.text,r.height=Math.max(r.height,a.height),r.depth=Math.max(r.depth,a.depth),r.italic=a.italic,t.splice(e+1,1),e--)}return t}};function Ht(t,e){var r=Pt(t,e);if(!r)throw new Error(\\\"Expected node of type \\\"+e+\\\", but got \\\"+(t?\\\"node of type \\\"+t.type:String(t)));return r}function Pt(t,e){return t&&t.type===e?t:null}function Dt(t,e){var r=function(t,e){return t&&\\\"atom\\\"===t.type&&t.family===e?t:null}(t,e);if(!r)throw new Error('Expected node of type \\\"atom\\\" and family \\\"'+e+'\\\", but got '+(t?\\\"atom\\\"===t.type?\\\"atom of family \\\"+t.family:\\\"node of type \\\"+t.type:String(t)));return r}function Ft(t){return t&&(\\\"atom\\\"===t.type||X.hasOwnProperty(t.type))?t:null}var Vt={number:3,unit:\\\"mu\\\"},Ut={number:4,unit:\\\"mu\\\"},Gt={number:5,unit:\\\"mu\\\"},Xt={mord:{mop:Vt,mbin:Ut,mrel:Gt,minner:Vt},mop:{mord:Vt,mop:Vt,mrel:Gt,minner:Vt},mbin:{mord:Ut,mop:Ut,mopen:Ut,minner:Ut},mrel:{mord:Gt,mop:Gt,mopen:Gt,minner:Gt},mopen:{},mclose:{mop:Vt,mbin:Ut,mrel:Gt,minner:Vt},mpunct:{mord:Vt,mop:Vt,mrel:Gt,mopen:Vt,mclose:Vt,mpunct:Vt,minner:Vt},minner:{mord:Vt,mop:Vt,mbin:Ut,mrel:Gt,mopen:Vt,mpunct:Vt,minner:Vt}},Yt={mord:{mop:Vt},mop:{mord:Vt,mop:Vt},mbin:{},mrel:{},mopen:{},mclose:{mop:Vt},mpunct:{},minner:{mop:Vt}},_t={},Wt={},jt={};function $t(t){for(var e=t.type,r=(t.nodeType,t.names),a=t.props,n=t.handler,o=t.htmlBuilder,i=t.mathmlBuilder,s={type:e,numArgs:a.numArgs,argTypes:a.argTypes,greediness:void 0===a.greediness?1:a.greediness,allowedInText:!!a.allowedInText,allowedInMath:void 0===a.allowedInMath||a.allowedInMath,numOptionalArgs:a.numOptionalArgs||0,infix:!!a.infix,consumeMode:a.consumeMode,handler:n},h=0;h<r.length;++h)_t[r[h]]=s;e&&(o&&(Wt[e]=o),i&&(jt[e]=i))}function Zt(t){$t({type:t.type,names:[],props:{numArgs:0},handler:function(){throw new Error(\\\"Should never be called.\\\")},htmlBuilder:t.htmlBuilder,mathmlBuilder:t.mathmlBuilder})}var Kt=function(t){var e=Pt(t,\\\"ordgroup\\\");return e?e.body:[t]},Jt=Lt.makeSpan,Qt=[\\\"leftmost\\\",\\\"mbin\\\",\\\"mopen\\\",\\\"mrel\\\",\\\"mop\\\",\\\"mpunct\\\"],te=[\\\"rightmost\\\",\\\"mrel\\\",\\\"mclose\\\",\\\"mpunct\\\"],ee={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT},re={mord:\\\"mord\\\",mop:\\\"mop\\\",mbin:\\\"mbin\\\",mrel:\\\"mrel\\\",mopen:\\\"mopen\\\",mclose:\\\"mclose\\\",mpunct:\\\"mpunct\\\",minner:\\\"minner\\\"},ae=function(t,e,r,a){void 0===a&&(a=[null,null]);for(var n=[],o=0;o<t.length;o++){var i=he(t[o],e);if(i instanceof T){var s=i.children;n.push.apply(n,s)}else n.push(i)}if(!r)return n;var h=e;if(1===t.length){var l=Pt(t[0],\\\"sizing\\\")||Pt(t[0],\\\"styling\\\");l&&(\\\"sizing\\\"===l.type?h=e.havingSize(l.size):\\\"styling\\\"===l.type&&(h=e.havingStyle(ee[l.style])))}var m=Jt([a[0]||\\\"leftmost\\\"],[],e),u=Jt([a[1]||\\\"rightmost\\\"],[],e);return ne(n,function(t,e){var r=e.classes[0],a=t.classes[0];\\\"mbin\\\"===r&&c.contains(te,a)?e.classes[0]=\\\"mord\\\":\\\"mbin\\\"===a&&c.contains(Qt,r)&&(t.classes[0]=\\\"mord\\\")},{node:m},u),ne(n,function(t,e){var r=ie(e),a=ie(t),n=r&&a?t.hasClass(\\\"mtight\\\")?Yt[r][a]:Xt[r][a]:null;if(n)return Lt.makeGlue(n,h)},{node:m},u),n},ne=function t(e,r,a,n){n&&e.push(n);for(var o=0;o<e.length;o++){var i=e[o],s=oe(i);if(s)t(s.children,r,a);else if(\\\"mspace\\\"!==i.classes[0]){var h=r(i,a.node);h&&(a.insertAfter?a.insertAfter(h):(e.unshift(h),o++)),a.node=i,a.insertAfter=function(t){return function(r){e.splice(t+1,0,r),o++}}(o)}}n&&e.pop()},oe=function(t){return t instanceof T||t instanceof I?t:null},ie=function(t,e){return t?(e&&(t=function t(e,r){var a=oe(e);if(a){var n=a.children;if(n.length){if(\\\"right\\\"===r)return t(n[n.length-1],\\\"right\\\");if(\\\"left\\\"===r)return t(n[0],\\\"left\\\")}}return e}(t,e)),re[t.classes[0]]||null):null},se=function(t,e){var r=[\\\"nulldelimiter\\\"].concat(t.baseSizingClasses());return Jt(e.concat(r))},he=function(t,e,r){if(!t)return Jt();if(Wt[t.type]){var a=Wt[t.type](t,e);if(r&&e.size!==r.size){a=Jt(e.sizingClasses(r),[a],e);var n=e.sizeMultiplier/r.sizeMultiplier;a.height*=n,a.depth*=n}return a}throw new i(\\\"Got group of unknown type: '\\\"+t.type+\\\"'\\\")};function le(t,e){var r=Jt([\\\"base\\\"],t,e),a=Jt([\\\"strut\\\"]);return a.style.height=r.height+r.depth+\\\"em\\\",a.style.verticalAlign=-r.depth+\\\"em\\\",r.children.unshift(a),r}function me(t,e){var r=null;1===t.length&&\\\"tag\\\"===t[0].type&&(r=t[0].tag,t=t[0].body);for(var a,n=ae(t,e,!0),o=[],i=[],s=0;s<n.length;s++)if(i.push(n[s]),n[s].hasClass(\\\"mbin\\\")||n[s].hasClass(\\\"mrel\\\")||n[s].hasClass(\\\"allowbreak\\\")){for(var h=!1;s<n.length-1&&n[s+1].hasClass(\\\"mspace\\\")&&!n[s+1].hasClass(\\\"newline\\\");)s++,i.push(n[s]),n[s].hasClass(\\\"nobreak\\\")&&(h=!0);h||(o.push(le(i,e)),i=[])}else n[s].hasClass(\\\"newline\\\")&&(i.pop(),i.length>0&&(o.push(le(i,e)),i=[]),o.push(n[s]));i.length>0&&o.push(le(i,e)),r&&((a=le(ae(r,e,!0))).classes=[\\\"tag\\\"],o.push(a));var l=Jt([\\\"katex-html\\\"],o);if(l.setAttribute(\\\"aria-hidden\\\",\\\"true\\\"),a){var m=a.children[0];m.style.height=l.height+l.depth+\\\"em\\\",m.style.verticalAlign=-l.depth+\\\"em\\\"}return l}function ce(t){return new T(t)}var ue=function(){function t(t,e){this.type=void 0,this.attributes=void 0,this.children=void 0,this.type=t,this.attributes={},this.children=e||[]}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.getAttribute=function(t){return this.attributes[t]},e.toNode=function(){var t=document.createElementNS(\\\"http://www.w3.org/1998/Math/MathML\\\",this.type);for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var r=0;r<this.children.length;r++)t.appendChild(this.children[r].toNode());return t},e.toMarkup=function(){var t=\\\"<\\\"+this.type;for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&(t+=\\\" \\\"+e+'=\\\"',t+=c.escape(this.attributes[e]),t+='\\\"');t+=\\\">\\\";for(var r=0;r<this.children.length;r++)t+=this.children[r].toMarkup();return t+=\\\"</\\\"+this.type+\\\">\\\"},e.toText=function(){return this.children.map(function(t){return t.toText()}).join(\\\"\\\")},t}(),de=function(){function t(t){this.text=void 0,this.text=t}var e=t.prototype;return e.toNode=function(){return document.createTextNode(this.text)},e.toMarkup=function(){return c.escape(this.toText())},e.toText=function(){return this.text},t}(),pe={MathNode:ue,TextNode:de,SpaceNode:function(){function t(t){this.width=void 0,this.character=void 0,this.width=t,this.character=t>=.05555&&t<=.05556?\\\"\\\\u200a\\\":t>=.1666&&t<=.1667?\\\"\\\\u2009\\\":t>=.2222&&t<=.2223?\\\"\\\\u2005\\\":t>=.2777&&t<=.2778?\\\"\\\\u2005\\\\u200a\\\":t>=-.05556&&t<=-.05555?\\\"\\\\u200a\\\\u2063\\\":t>=-.1667&&t<=-.1666?\\\"\\\\u2009\\\\u2063\\\":t>=-.2223&&t<=-.2222?\\\"\\\\u205f\\\\u2063\\\":t>=-.2778&&t<=-.2777?\\\"\\\\u2005\\\\u2063\\\":null}var e=t.prototype;return e.toNode=function(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS(\\\"http://www.w3.org/1998/Math/MathML\\\",\\\"mspace\\\");return t.setAttribute(\\\"width\\\",this.width+\\\"em\\\"),t},e.toMarkup=function(){return this.character?\\\"<mtext>\\\"+this.character+\\\"</mtext>\\\":'<mspace width=\\\"'+this.width+'em\\\"/>'},e.toText=function(){return this.character?this.character:\\\" \\\"},t}(),newDocumentFragment:ce},fe=function(t,e,r){return!_[e][t]||!_[e][t].replace||55349===t.charCodeAt(0)||tt.hasOwnProperty(t)&&r&&(r.fontFamily&&\\\"tt\\\"===r.fontFamily.substr(4,2)||r.font&&\\\"tt\\\"===r.font.substr(4,2))||(t=_[e][t].replace),new pe.TextNode(t)},ge=function(t){return 1===t.length?t[0]:new pe.MathNode(\\\"mrow\\\",t)},xe=function(t,e){if(\\\"texttt\\\"===e.fontFamily)return\\\"monospace\\\";if(\\\"textsf\\\"===e.fontFamily)return\\\"textit\\\"===e.fontShape&&\\\"textbf\\\"===e.fontWeight?\\\"sans-serif-bold-italic\\\":\\\"textit\\\"===e.fontShape?\\\"sans-serif-italic\\\":\\\"textbf\\\"===e.fontWeight?\\\"bold-sans-serif\\\":\\\"sans-serif\\\";if(\\\"textit\\\"===e.fontShape&&\\\"textbf\\\"===e.fontWeight)return\\\"bold-italic\\\";if(\\\"textit\\\"===e.fontShape)return\\\"italic\\\";if(\\\"textbf\\\"===e.fontWeight)return\\\"bold\\\";var r=e.font;if(!r||\\\"mathnormal\\\"===r)return null;var a=t.mode;if(\\\"mathit\\\"===r)return\\\"italic\\\";if(\\\"boldsymbol\\\"===r)return\\\"bold-italic\\\";var n=t.text;return c.contains([\\\"\\\\\\\\imath\\\",\\\"\\\\\\\\jmath\\\"],n)?null:(_[a][n]&&_[a][n].replace&&(n=_[a][n].replace),V(n,Lt.fontMap[r].fontName,a)?Lt.fontMap[r].variant:null)},ve=function(t,e){for(var r,a=[],n=0;n<t.length;n++){var o=ye(t[n],e);if(o instanceof ue&&r instanceof ue){if(\\\"mtext\\\"===o.type&&\\\"mtext\\\"===r.type&&o.getAttribute(\\\"mathvariant\\\")===r.getAttribute(\\\"mathvariant\\\")){var i;(i=r.children).push.apply(i,o.children);continue}if(\\\"mn\\\"===o.type&&\\\"mn\\\"===r.type){var s;(s=r.children).push.apply(s,o.children);continue}if(\\\"mi\\\"===o.type&&1===o.children.length&&\\\"mn\\\"===r.type){var h=o.children[0];if(h instanceof de&&\\\".\\\"===h.text){var l;(l=r.children).push.apply(l,o.children);continue}}else if(\\\"mi\\\"===r.type&&1===r.children.length){var m=r.children[0];if(m instanceof de&&\\\"\\\\u0338\\\"===m.text&&(\\\"mo\\\"===o.type||\\\"mi\\\"===o.type||\\\"mn\\\"===o.type)){var c=o.children[0];c instanceof de&&c.text.length>0&&(c.text=c.text.slice(0,1)+\\\"\\\\u0338\\\"+c.text.slice(1),a.pop())}}}a.push(o),r=o}return a},be=function(t,e){return ge(ve(t,e))},ye=function(t,e){if(!t)return new pe.MathNode(\\\"mrow\\\");if(jt[t.type])return jt[t.type](t,e);throw new i(\\\"Got group of unknown type: '\\\"+t.type+\\\"'\\\")};var we=function(t){return new wt({style:t.displayMode?w.DISPLAY:w.TEXT,maxSize:t.maxSize})},ke=function(t,e){if(e.displayMode){var r=[\\\"katex-display\\\"];e.leqno&&r.push(\\\"leqno\\\"),e.fleqn&&r.push(\\\"fleqn\\\"),t=Lt.makeSpan(r,[t])}return t},Se=function(t,e,r){var a=we(r),n=function(t,e,r){var a,n=ve(t,r);a=1===n.length&&n[0]instanceof ue&&c.contains([\\\"mrow\\\",\\\"mtable\\\"],n[0].type)?n[0]:new pe.MathNode(\\\"mrow\\\",n);var o=new pe.MathNode(\\\"annotation\\\",[new pe.TextNode(e)]);o.setAttribute(\\\"encoding\\\",\\\"application/x-tex\\\");var i=new pe.MathNode(\\\"semantics\\\",[a,o]),s=new pe.MathNode(\\\"math\\\",[i]);return Lt.makeSpan([\\\"katex-mathml\\\"],[s])}(t,e,a),o=me(t,a),i=Lt.makeSpan([\\\"katex\\\"],[n,o]);return ke(i,r)},ze={widehat:\\\"^\\\",widecheck:\\\"\\\\u02c7\\\",widetilde:\\\"~\\\",utilde:\\\"~\\\",overleftarrow:\\\"\\\\u2190\\\",underleftarrow:\\\"\\\\u2190\\\",xleftarrow:\\\"\\\\u2190\\\",overrightarrow:\\\"\\\\u2192\\\",underrightarrow:\\\"\\\\u2192\\\",xrightarrow:\\\"\\\\u2192\\\",underbrace:\\\"\\\\u23df\\\",overbrace:\\\"\\\\u23de\\\",overgroup:\\\"\\\\u23e0\\\",undergroup:\\\"\\\\u23e1\\\",overleftrightarrow:\\\"\\\\u2194\\\",underleftrightarrow:\\\"\\\\u2194\\\",xleftrightarrow:\\\"\\\\u2194\\\",Overrightarrow:\\\"\\\\u21d2\\\",xRightarrow:\\\"\\\\u21d2\\\",overleftharpoon:\\\"\\\\u21bc\\\",xleftharpoonup:\\\"\\\\u21bc\\\",overrightharpoon:\\\"\\\\u21c0\\\",xrightharpoonup:\\\"\\\\u21c0\\\",xLeftarrow:\\\"\\\\u21d0\\\",xLeftrightarrow:\\\"\\\\u21d4\\\",xhookleftarrow:\\\"\\\\u21a9\\\",xhookrightarrow:\\\"\\\\u21aa\\\",xmapsto:\\\"\\\\u21a6\\\",xrightharpoondown:\\\"\\\\u21c1\\\",xleftharpoondown:\\\"\\\\u21bd\\\",xrightleftharpoons:\\\"\\\\u21cc\\\",xleftrightharpoons:\\\"\\\\u21cb\\\",xtwoheadleftarrow:\\\"\\\\u219e\\\",xtwoheadrightarrow:\\\"\\\\u21a0\\\",xlongequal:\\\"=\\\",xtofrom:\\\"\\\\u21c4\\\",xrightleftarrows:\\\"\\\\u21c4\\\",xrightequilibrium:\\\"\\\\u21cc\\\",xleftequilibrium:\\\"\\\\u21cb\\\"},Me={overrightarrow:[[\\\"rightarrow\\\"],.888,522,\\\"xMaxYMin\\\"],overleftarrow:[[\\\"leftarrow\\\"],.888,522,\\\"xMinYMin\\\"],underrightarrow:[[\\\"rightarrow\\\"],.888,522,\\\"xMaxYMin\\\"],underleftarrow:[[\\\"leftarrow\\\"],.888,522,\\\"xMinYMin\\\"],xrightarrow:[[\\\"rightarrow\\\"],1.469,522,\\\"xMaxYMin\\\"],xleftarrow:[[\\\"leftarrow\\\"],1.469,522,\\\"xMinYMin\\\"],Overrightarrow:[[\\\"doublerightarrow\\\"],.888,560,\\\"xMaxYMin\\\"],xRightarrow:[[\\\"doublerightarrow\\\"],1.526,560,\\\"xMaxYMin\\\"],xLeftarrow:[[\\\"doubleleftarrow\\\"],1.526,560,\\\"xMinYMin\\\"],overleftharpoon:[[\\\"leftharpoon\\\"],.888,522,\\\"xMinYMin\\\"],xleftharpoonup:[[\\\"leftharpoon\\\"],.888,522,\\\"xMinYMin\\\"],xleftharpoondown:[[\\\"leftharpoondown\\\"],.888,522,\\\"xMinYMin\\\"],overrightharpoon:[[\\\"rightharpoon\\\"],.888,522,\\\"xMaxYMin\\\"],xrightharpoonup:[[\\\"rightharpoon\\\"],.888,522,\\\"xMaxYMin\\\"],xrightharpoondown:[[\\\"rightharpoondown\\\"],.888,522,\\\"xMaxYMin\\\"],xlongequal:[[\\\"longequal\\\"],.888,334,\\\"xMinYMin\\\"],xtwoheadleftarrow:[[\\\"twoheadleftarrow\\\"],.888,334,\\\"xMinYMin\\\"],xtwoheadrightarrow:[[\\\"twoheadrightarrow\\\"],.888,334,\\\"xMaxYMin\\\"],overleftrightarrow:[[\\\"leftarrow\\\",\\\"rightarrow\\\"],.888,522],overbrace:[[\\\"leftbrace\\\",\\\"midbrace\\\",\\\"rightbrace\\\"],1.6,548],underbrace:[[\\\"leftbraceunder\\\",\\\"midbraceunder\\\",\\\"rightbraceunder\\\"],1.6,548],underleftrightarrow:[[\\\"leftarrow\\\",\\\"rightarrow\\\"],.888,522],xleftrightarrow:[[\\\"leftarrow\\\",\\\"rightarrow\\\"],1.75,522],xLeftrightarrow:[[\\\"doubleleftarrow\\\",\\\"doublerightarrow\\\"],1.75,560],xrightleftharpoons:[[\\\"leftharpoondownplus\\\",\\\"rightharpoonplus\\\"],1.75,716],xleftrightharpoons:[[\\\"leftharpoonplus\\\",\\\"rightharpoondownplus\\\"],1.75,716],xhookleftarrow:[[\\\"leftarrow\\\",\\\"righthook\\\"],1.08,522],xhookrightarrow:[[\\\"lefthook\\\",\\\"rightarrow\\\"],1.08,522],overlinesegment:[[\\\"leftlinesegment\\\",\\\"rightlinesegment\\\"],.888,522],underlinesegment:[[\\\"leftlinesegment\\\",\\\"rightlinesegment\\\"],.888,522],overgroup:[[\\\"leftgroup\\\",\\\"rightgroup\\\"],.888,342],undergroup:[[\\\"leftgroupunder\\\",\\\"rightgroupunder\\\"],.888,342],xmapsto:[[\\\"leftmapsto\\\",\\\"rightarrow\\\"],1.5,522],xtofrom:[[\\\"leftToFrom\\\",\\\"rightToFrom\\\"],1.75,528],xrightleftarrows:[[\\\"baraboveleftarrow\\\",\\\"rightarrowabovebar\\\"],1.75,901],xrightequilibrium:[[\\\"baraboveshortleftharpoon\\\",\\\"rightharpoonaboveshortbar\\\"],1.75,716],xleftequilibrium:[[\\\"shortbaraboveleftharpoon\\\",\\\"shortrightharpoonabovebar\\\"],1.75,716]},Te=function(t){return\\\"ordgroup\\\"===t.type?t.body.length:1},Ae=function(t,e,r,a){var n,o=t.height+t.depth+2*r;if(/fbox|color/.test(e)){if(n=Lt.makeSpan([\\\"stretchy\\\",e],[],a),\\\"fbox\\\"===e){var i=a.color&&a.getColor();i&&(n.style.borderColor=i)}}else{var s=[];/^[bx]cancel$/.test(e)&&s.push(new H({x1:\\\"0\\\",y1:\\\"0\\\",x2:\\\"100%\\\",y2:\\\"100%\\\",\\\"stroke-width\\\":\\\"0.046em\\\"})),/^x?cancel$/.test(e)&&s.push(new H({x1:\\\"0\\\",y1:\\\"100%\\\",x2:\\\"100%\\\",y2:\\\"0\\\",\\\"stroke-width\\\":\\\"0.046em\\\"}));var h=new R(s,{width:\\\"100%\\\",height:o+\\\"em\\\"});n=Lt.makeSvgSpan([],[h],a)}return n.height=o,n.style.height=o+\\\"em\\\",n},Be=function(t){var e=new pe.MathNode(\\\"mo\\\",[new pe.TextNode(ze[t.substr(1)])]);return e.setAttribute(\\\"stretchy\\\",\\\"true\\\"),e},qe=function(t,e){var r=function(){var r=4e5,a=t.label.substr(1);if(c.contains([\\\"widehat\\\",\\\"widecheck\\\",\\\"widetilde\\\",\\\"utilde\\\"],a)){var n,o,i,s=Te(t.base);if(s>5)\\\"widehat\\\"===a||\\\"widecheck\\\"===a?(n=420,r=2364,i=.42,o=a+\\\"4\\\"):(n=312,r=2340,i=.34,o=\\\"tilde4\\\");else{var h=[1,1,2,2,3,3][s];\\\"widehat\\\"===a||\\\"widecheck\\\"===a?(r=[0,1062,2364,2364,2364][h],n=[0,239,300,360,420][h],i=[0,.24,.3,.3,.36,.42][h],o=a+h):(r=[0,600,1033,2339,2340][h],n=[0,260,286,306,312][h],i=[0,.26,.286,.3,.306,.34][h],o=\\\"tilde\\\"+h)}var l=new L(o),m=new R([l],{width:\\\"100%\\\",height:i+\\\"em\\\",viewBox:\\\"0 0 \\\"+r+\\\" \\\"+n,preserveAspectRatio:\\\"none\\\"});return{span:Lt.makeSvgSpan([],[m],e),minWidth:0,height:i}}var u,d,p=[],f=Me[a],g=f[0],x=f[1],v=f[2],b=v/1e3,y=g.length;if(1===y)u=[\\\"hide-tail\\\"],d=[f[3]];else if(2===y)u=[\\\"halfarrow-left\\\",\\\"halfarrow-right\\\"],d=[\\\"xMinYMin\\\",\\\"xMaxYMin\\\"];else{if(3!==y)throw new Error(\\\"Correct katexImagesData or update code here to support\\\\n \\\"+y+\\\" children.\\\");u=[\\\"brace-left\\\",\\\"brace-center\\\",\\\"brace-right\\\"],d=[\\\"xMinYMin\\\",\\\"xMidYMin\\\",\\\"xMaxYMin\\\"]}for(var w=0;w<y;w++){var k=new L(g[w]),S=new R([k],{width:\\\"400em\\\",height:b+\\\"em\\\",viewBox:\\\"0 0 \\\"+r+\\\" \\\"+v,preserveAspectRatio:d[w]+\\\" slice\\\"}),z=Lt.makeSvgSpan([u[w]],[S],e);if(1===y)return{span:z,minWidth:x,height:b};z.style.height=b+\\\"em\\\",p.push(z)}return{span:Lt.makeSpan([\\\"stretchy\\\"],p,e),minWidth:x,height:b}}(),a=r.span,n=r.minWidth,o=r.height;return a.height=o,a.style.height=o+\\\"em\\\",n>0&&(a.style.minWidth=n+\\\"em\\\"),a},Ce=function(t,e){var r,a,n,o=Pt(t,\\\"supsub\\\");o?(r=(a=Ht(o.base,\\\"accent\\\")).base,o.base=r,n=function(t){if(t instanceof N)return t;throw new Error(\\\"Expected span<HtmlDomNode> but got \\\"+String(t)+\\\".\\\")}(he(o,e)),o.base=a):r=(a=Ht(t,\\\"accent\\\")).base;var i=he(r,e.havingCrampedStyle()),s=0;if(a.isShifty&&c.isCharacterBox(r)){var h=c.getBaseElem(r);s=function(t){if(t instanceof E)return t;throw new Error(\\\"Expected symbolNode but got \\\"+String(t)+\\\".\\\")}(he(h,e.havingCrampedStyle())).skew}var l,m=Math.min(i.height,e.fontMetrics().xHeight);if(a.isStretchy)l=qe(a,e),l=Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:i},{type:\\\"elem\\\",elem:l,wrapperClasses:[\\\"svg-align\\\"],wrapperStyle:s>0?{width:\\\"calc(100% - \\\"+2*s+\\\"em)\\\",marginLeft:2*s+\\\"em\\\"}:void 0}]},e);else{var u,d;\\\"\\\\\\\\vec\\\"===a.label?(u=Lt.staticSvg(\\\"vec\\\",e),d=Lt.svgData.vec[1]):((u=Lt.makeSymbol(a.label,\\\"Main-Regular\\\",a.mode,e)).italic=0,d=u.width),l=Lt.makeSpan([\\\"accent-body\\\"],[u]);var p=\\\"\\\\\\\\textcircled\\\"===a.label;p&&(l.classes.push(\\\"accent-full\\\"),m=i.height);var f=s;p||(f-=d/2),l.style.left=f+\\\"em\\\",\\\"\\\\\\\\textcircled\\\"===a.label&&(l.style.top=\\\".2em\\\"),l=Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:i},{type:\\\"kern\\\",size:-m},{type:\\\"elem\\\",elem:l}]},e)}var g=Lt.makeSpan([\\\"mord\\\",\\\"accent\\\"],[l],e);return n?(n.children[0]=g,n.height=Math.max(g.height,n.height),n.classes[0]=\\\"mord\\\",n):g},Ne=function(t,e){var r=t.isStretchy?Be(t.label):new pe.MathNode(\\\"mo\\\",[fe(t.label,t.mode)]),a=new pe.MathNode(\\\"mover\\\",[ye(t.base,e),r]);return a.setAttribute(\\\"accent\\\",\\\"true\\\"),a},Ie=new RegExp([\\\"\\\\\\\\acute\\\",\\\"\\\\\\\\grave\\\",\\\"\\\\\\\\ddot\\\",\\\"\\\\\\\\tilde\\\",\\\"\\\\\\\\bar\\\",\\\"\\\\\\\\breve\\\",\\\"\\\\\\\\check\\\",\\\"\\\\\\\\hat\\\",\\\"\\\\\\\\vec\\\",\\\"\\\\\\\\dot\\\",\\\"\\\\\\\\mathring\\\"].map(function(t){return\\\"\\\\\\\\\\\"+t}).join(\\\"|\\\"));$t({type:\\\"accent\\\",names:[\\\"\\\\\\\\acute\\\",\\\"\\\\\\\\grave\\\",\\\"\\\\\\\\ddot\\\",\\\"\\\\\\\\tilde\\\",\\\"\\\\\\\\bar\\\",\\\"\\\\\\\\breve\\\",\\\"\\\\\\\\check\\\",\\\"\\\\\\\\hat\\\",\\\"\\\\\\\\vec\\\",\\\"\\\\\\\\dot\\\",\\\"\\\\\\\\mathring\\\",\\\"\\\\\\\\widecheck\\\",\\\"\\\\\\\\widehat\\\",\\\"\\\\\\\\widetilde\\\",\\\"\\\\\\\\overrightarrow\\\",\\\"\\\\\\\\overleftarrow\\\",\\\"\\\\\\\\Overrightarrow\\\",\\\"\\\\\\\\overleftrightarrow\\\",\\\"\\\\\\\\overgroup\\\",\\\"\\\\\\\\overlinesegment\\\",\\\"\\\\\\\\overleftharpoon\\\",\\\"\\\\\\\\overrightharpoon\\\"],props:{numArgs:1},handler:function(t,e){var r=e[0],a=!Ie.test(t.funcName),n=!a||\\\"\\\\\\\\widehat\\\"===t.funcName||\\\"\\\\\\\\widetilde\\\"===t.funcName||\\\"\\\\\\\\widecheck\\\"===t.funcName;return{type:\\\"accent\\\",mode:t.parser.mode,label:t.funcName,isStretchy:a,isShifty:n,base:r}},htmlBuilder:Ce,mathmlBuilder:Ne}),$t({type:\\\"accent\\\",names:[\\\"\\\\\\\\'\\\",\\\"\\\\\\\\`\\\",\\\"\\\\\\\\^\\\",\\\"\\\\\\\\~\\\",\\\"\\\\\\\\=\\\",\\\"\\\\\\\\u\\\",\\\"\\\\\\\\.\\\",'\\\\\\\\\\\"',\\\"\\\\\\\\r\\\",\\\"\\\\\\\\H\\\",\\\"\\\\\\\\v\\\",\\\"\\\\\\\\textcircled\\\"],props:{numArgs:1,allowedInText:!0,allowedInMath:!1},handler:function(t,e){var r=e[0];return{type:\\\"accent\\\",mode:t.parser.mode,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ce,mathmlBuilder:Ne}),$t({type:\\\"accentUnder\\\",names:[\\\"\\\\\\\\underleftarrow\\\",\\\"\\\\\\\\underrightarrow\\\",\\\"\\\\\\\\underleftrightarrow\\\",\\\"\\\\\\\\undergroup\\\",\\\"\\\\\\\\underlinesegment\\\",\\\"\\\\\\\\utilde\\\"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:\\\"accentUnder\\\",mode:r.mode,label:a,base:n}},htmlBuilder:function(t,e){var r=he(t.base,e),a=qe(t,e),n=\\\"\\\\\\\\utilde\\\"===t.label?.12:0,o=Lt.makeVList({positionType:\\\"bottom\\\",positionData:a.height+n,children:[{type:\\\"elem\\\",elem:a,wrapperClasses:[\\\"svg-align\\\"]},{type:\\\"kern\\\",size:n},{type:\\\"elem\\\",elem:r}]},e);return Lt.makeSpan([\\\"mord\\\",\\\"accentunder\\\"],[o],e)},mathmlBuilder:function(t,e){var r=Be(t.label),a=new pe.MathNode(\\\"munder\\\",[ye(t.base,e),r]);return a.setAttribute(\\\"accentunder\\\",\\\"true\\\"),a}});var Oe=function(t){var e=new pe.MathNode(\\\"mpadded\\\",t?[t]:[]);return e.setAttribute(\\\"width\\\",\\\"+0.6em\\\"),e.setAttribute(\\\"lspace\\\",\\\"0.3em\\\"),e};$t({type:\\\"xArrow\\\",names:[\\\"\\\\\\\\xleftarrow\\\",\\\"\\\\\\\\xrightarrow\\\",\\\"\\\\\\\\xLeftarrow\\\",\\\"\\\\\\\\xRightarrow\\\",\\\"\\\\\\\\xleftrightarrow\\\",\\\"\\\\\\\\xLeftrightarrow\\\",\\\"\\\\\\\\xhookleftarrow\\\",\\\"\\\\\\\\xhookrightarrow\\\",\\\"\\\\\\\\xmapsto\\\",\\\"\\\\\\\\xrightharpoondown\\\",\\\"\\\\\\\\xrightharpoonup\\\",\\\"\\\\\\\\xleftharpoondown\\\",\\\"\\\\\\\\xleftharpoonup\\\",\\\"\\\\\\\\xrightleftharpoons\\\",\\\"\\\\\\\\xleftrightharpoons\\\",\\\"\\\\\\\\xlongequal\\\",\\\"\\\\\\\\xtwoheadrightarrow\\\",\\\"\\\\\\\\xtwoheadleftarrow\\\",\\\"\\\\\\\\xtofrom\\\",\\\"\\\\\\\\xrightleftarrows\\\",\\\"\\\\\\\\xrightequilibrium\\\",\\\"\\\\\\\\xleftequilibrium\\\"],props:{numArgs:1,numOptionalArgs:1},handler:function(t,e,r){var a=t.parser,n=t.funcName;return{type:\\\"xArrow\\\",mode:a.mode,label:n,body:e[0],below:r[0]}},htmlBuilder:function(t,e){var r,a=e.style,n=e.havingStyle(a.sup()),o=Lt.wrapFragment(he(t.body,n,e),e);o.classes.push(\\\"x-arrow-pad\\\"),t.below&&(n=e.havingStyle(a.sub()),(r=Lt.wrapFragment(he(t.below,n,e),e)).classes.push(\\\"x-arrow-pad\\\"));var i,s=qe(t,e),h=-e.fontMetrics().axisHeight+.5*s.height,l=-e.fontMetrics().axisHeight-.5*s.height-.111;if((o.depth>.25||\\\"\\\\\\\\xleftequilibrium\\\"===t.label)&&(l-=o.depth),r){var m=-e.fontMetrics().axisHeight+r.height+.5*s.height+.111;i=Lt.makeVList({positionType:\\\"individualShift\\\",children:[{type:\\\"elem\\\",elem:o,shift:l},{type:\\\"elem\\\",elem:s,shift:h},{type:\\\"elem\\\",elem:r,shift:m}]},e)}else i=Lt.makeVList({positionType:\\\"individualShift\\\",children:[{type:\\\"elem\\\",elem:o,shift:l},{type:\\\"elem\\\",elem:s,shift:h}]},e);return i.children[0].children[0].children[1].classes.push(\\\"svg-align\\\"),Lt.makeSpan([\\\"mrel\\\",\\\"x-arrow\\\"],[i],e)},mathmlBuilder:function(t,e){var r,a=Be(t.label);if(t.body){var n=Oe(ye(t.body,e));if(t.below){var o=Oe(ye(t.below,e));r=new pe.MathNode(\\\"munderover\\\",[a,o,n])}else r=new pe.MathNode(\\\"mover\\\",[a,n])}else if(t.below){var i=Oe(ye(t.below,e));r=new pe.MathNode(\\\"munder\\\",[a,i])}else r=Oe(),r=new pe.MathNode(\\\"mover\\\",[a,r]);return r}}),$t({type:\\\"textord\\\",names:[\\\"\\\\\\\\@char\\\"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){for(var r=t.parser,a=Ht(e[0],\\\"ordgroup\\\").body,n=\\\"\\\",o=0;o<a.length;o++){n+=Ht(a[o],\\\"textord\\\").text}var s=parseInt(n);if(isNaN(s))throw new i(\\\"\\\\\\\\@char has non-numeric argument \\\"+n);return{type:\\\"textord\\\",mode:r.mode,text:String.fromCharCode(s)}}});var Ee=function(t,e){var r=ae(t.body,e.withColor(t.color),!1);return Lt.makeFragment(r)},Re=function(t,e){var r=ve(t.body,e.withColor(t.color)),a=new pe.MathNode(\\\"mstyle\\\",r);return a.setAttribute(\\\"mathcolor\\\",t.color),a};$t({type:\\\"color\\\",names:[\\\"\\\\\\\\textcolor\\\"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:[\\\"color\\\",\\\"original\\\"]},handler:function(t,e){var r=t.parser,a=Ht(e[0],\\\"color-token\\\").color,n=e[1];return{type:\\\"color\\\",mode:r.mode,color:a,body:Kt(n)}},htmlBuilder:Ee,mathmlBuilder:Re}),$t({type:\\\"color\\\",names:[\\\"\\\\\\\\color\\\"],props:{numArgs:1,allowedInText:!0,greediness:3,argTypes:[\\\"color\\\"]},handler:function(t,e){var r=t.parser,a=t.breakOnTokenText,n=Ht(e[0],\\\"color-token\\\").color,o=r.parseExpression(!0,a);return{type:\\\"color\\\",mode:r.mode,color:n,body:o}},htmlBuilder:Ee,mathmlBuilder:Re}),$t({type:\\\"cr\\\",names:[\\\"\\\\\\\\cr\\\",\\\"\\\\\\\\newline\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:[\\\"size\\\"],allowedInText:!0},handler:function(t,e,r){var a=t.parser,n=t.funcName,o=r[0],i=\\\"\\\\\\\\cr\\\"===n,s=!1;return i||(s=!a.settings.displayMode||!a.settings.useStrictBehavior(\\\"newLineInDisplayMode\\\",\\\"In LaTeX, \\\\\\\\\\\\\\\\ or \\\\\\\\newline does nothing in display mode\\\")),{type:\\\"cr\\\",mode:a.mode,newLine:s,newRow:i,size:o&&Ht(o,\\\"size\\\").value}},htmlBuilder:function(t,e){if(t.newRow)throw new i(\\\"\\\\\\\\cr valid only within a tabular/array environment\\\");var r=Lt.makeSpan([\\\"mspace\\\"],[],e);return t.newLine&&(r.classes.push(\\\"newline\\\"),t.size&&(r.style.marginTop=zt(t.size,e)+\\\"em\\\")),r},mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mspace\\\");return t.newLine&&(r.setAttribute(\\\"linebreak\\\",\\\"newline\\\"),t.size&&r.setAttribute(\\\"height\\\",zt(t.size,e)+\\\"em\\\")),r}});var Le=function(t,e,r){var a=V(_.math[t]&&_.math[t].replace||t,e,r);if(!a)throw new Error(\\\"Unsupported symbol \\\"+t+\\\" and font size \\\"+e+\\\".\\\");return a},He=function(t,e,r,a){var n=r.havingBaseStyle(e),o=Lt.makeSpan(a.concat(n.sizingClasses(r)),[t],r),i=n.sizeMultiplier/r.sizeMultiplier;return o.height*=i,o.depth*=i,o.maxFontSize=n.sizeMultiplier,o},Pe=function(t,e,r){var a=e.havingBaseStyle(r),n=(1-e.sizeMultiplier/a.sizeMultiplier)*e.fontMetrics().axisHeight;t.classes.push(\\\"delimcenter\\\"),t.style.top=n+\\\"em\\\",t.height-=n,t.depth+=n},De=function(t,e,r,a,n,o){var i=function(t,e,r,a){return Lt.makeSymbol(t,\\\"Size\\\"+e+\\\"-Regular\\\",r,a)}(t,e,n,a),s=He(Lt.makeSpan([\\\"delimsizing\\\",\\\"size\\\"+e],[i],a),w.TEXT,a,o);return r&&Pe(s,a,w.TEXT),s},Fe=function(t,e,r){var a;return a=\\\"Size1-Regular\\\"===e?\\\"delim-size1\\\":\\\"delim-size4\\\",{type:\\\"elem\\\",elem:Lt.makeSpan([\\\"delimsizinginner\\\",a],[Lt.makeSpan([],[Lt.makeSymbol(t,e,r)])])}},Ve=function(t,e,r,a,n,o){var i,s,h,l;i=h=l=t,s=null;var m=\\\"Size1-Regular\\\";\\\"\\\\\\\\uparrow\\\"===t?h=l=\\\"\\\\u23d0\\\":\\\"\\\\\\\\Uparrow\\\"===t?h=l=\\\"\\\\u2016\\\":\\\"\\\\\\\\downarrow\\\"===t?i=h=\\\"\\\\u23d0\\\":\\\"\\\\\\\\Downarrow\\\"===t?i=h=\\\"\\\\u2016\\\":\\\"\\\\\\\\updownarrow\\\"===t?(i=\\\"\\\\\\\\uparrow\\\",h=\\\"\\\\u23d0\\\",l=\\\"\\\\\\\\downarrow\\\"):\\\"\\\\\\\\Updownarrow\\\"===t?(i=\\\"\\\\\\\\Uparrow\\\",h=\\\"\\\\u2016\\\",l=\\\"\\\\\\\\Downarrow\\\"):\\\"[\\\"===t||\\\"\\\\\\\\lbrack\\\"===t?(i=\\\"\\\\u23a1\\\",h=\\\"\\\\u23a2\\\",l=\\\"\\\\u23a3\\\",m=\\\"Size4-Regular\\\"):\\\"]\\\"===t||\\\"\\\\\\\\rbrack\\\"===t?(i=\\\"\\\\u23a4\\\",h=\\\"\\\\u23a5\\\",l=\\\"\\\\u23a6\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\lfloor\\\"===t||\\\"\\\\u230a\\\"===t?(h=i=\\\"\\\\u23a2\\\",l=\\\"\\\\u23a3\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\lceil\\\"===t||\\\"\\\\u2308\\\"===t?(i=\\\"\\\\u23a1\\\",h=l=\\\"\\\\u23a2\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\rfloor\\\"===t||\\\"\\\\u230b\\\"===t?(h=i=\\\"\\\\u23a5\\\",l=\\\"\\\\u23a6\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\rceil\\\"===t||\\\"\\\\u2309\\\"===t?(i=\\\"\\\\u23a4\\\",h=l=\\\"\\\\u23a5\\\",m=\\\"Size4-Regular\\\"):\\\"(\\\"===t||\\\"\\\\\\\\lparen\\\"===t?(i=\\\"\\\\u239b\\\",h=\\\"\\\\u239c\\\",l=\\\"\\\\u239d\\\",m=\\\"Size4-Regular\\\"):\\\")\\\"===t||\\\"\\\\\\\\rparen\\\"===t?(i=\\\"\\\\u239e\\\",h=\\\"\\\\u239f\\\",l=\\\"\\\\u23a0\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\{\\\"===t||\\\"\\\\\\\\lbrace\\\"===t?(i=\\\"\\\\u23a7\\\",s=\\\"\\\\u23a8\\\",l=\\\"\\\\u23a9\\\",h=\\\"\\\\u23aa\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\}\\\"===t||\\\"\\\\\\\\rbrace\\\"===t?(i=\\\"\\\\u23ab\\\",s=\\\"\\\\u23ac\\\",l=\\\"\\\\u23ad\\\",h=\\\"\\\\u23aa\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\lgroup\\\"===t||\\\"\\\\u27ee\\\"===t?(i=\\\"\\\\u23a7\\\",l=\\\"\\\\u23a9\\\",h=\\\"\\\\u23aa\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\rgroup\\\"===t||\\\"\\\\u27ef\\\"===t?(i=\\\"\\\\u23ab\\\",l=\\\"\\\\u23ad\\\",h=\\\"\\\\u23aa\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\lmoustache\\\"===t||\\\"\\\\u23b0\\\"===t?(i=\\\"\\\\u23a7\\\",l=\\\"\\\\u23ad\\\",h=\\\"\\\\u23aa\\\",m=\\\"Size4-Regular\\\"):\\\"\\\\\\\\rmoustache\\\"!==t&&\\\"\\\\u23b1\\\"!==t||(i=\\\"\\\\u23ab\\\",l=\\\"\\\\u23a9\\\",h=\\\"\\\\u23aa\\\",m=\\\"Size4-Regular\\\");var c=Le(i,m,n),u=c.height+c.depth,d=Le(h,m,n),p=d.height+d.depth,f=Le(l,m,n),g=f.height+f.depth,x=0,v=1;if(null!==s){var b=Le(s,m,n);x=b.height+b.depth,v=2}var y=u+g+x,k=Math.ceil((e-y)/(v*p)),S=y+k*v*p,z=a.fontMetrics().axisHeight;r&&(z*=a.sizeMultiplier);var M=S/2-z,T=[];if(T.push(Fe(l,m,n)),null===s)for(var A=0;A<k;A++)T.push(Fe(h,m,n));else{for(var B=0;B<k;B++)T.push(Fe(h,m,n));T.push(Fe(s,m,n));for(var q=0;q<k;q++)T.push(Fe(h,m,n))}T.push(Fe(i,m,n));var C=a.havingBaseStyle(w.TEXT),N=Lt.makeVList({positionType:\\\"bottom\\\",positionData:M,children:T},C);return He(Lt.makeSpan([\\\"delimsizing\\\",\\\"mult\\\"],[N],C),w.TEXT,a,o)},Ue=function(t,e,r,a){var n;\\\"sqrtTall\\\"===t&&(n=\\\"M702 80H400000v40H742v\\\"+(r-54-80)+\\\"l-4 4-4 4c-.667.7\\\\n-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h-12l-28-84c-16.667-52-96.667\\\\n-294.333-240-727l-212 -643 -85 170c-4-3.333-8.333-7.667-13 -13l-13-13l77-155\\\\n 77-156c66 199.333 139 419.667 219 661 l218 661zM702 80H400000v40H742z\\\");var o=new L(t,n),i=new R([o],{width:\\\"400em\\\",height:e+\\\"em\\\",viewBox:\\\"0 0 400000 \\\"+r,preserveAspectRatio:\\\"xMinYMin slice\\\"});return Lt.makeSvgSpan([\\\"hide-tail\\\"],[i],a)},Ge=[\\\"(\\\",\\\"\\\\\\\\lparen\\\",\\\")\\\",\\\"\\\\\\\\rparen\\\",\\\"[\\\",\\\"\\\\\\\\lbrack\\\",\\\"]\\\",\\\"\\\\\\\\rbrack\\\",\\\"\\\\\\\\{\\\",\\\"\\\\\\\\lbrace\\\",\\\"\\\\\\\\}\\\",\\\"\\\\\\\\rbrace\\\",\\\"\\\\\\\\lfloor\\\",\\\"\\\\\\\\rfloor\\\",\\\"\\\\u230a\\\",\\\"\\\\u230b\\\",\\\"\\\\\\\\lceil\\\",\\\"\\\\\\\\rceil\\\",\\\"\\\\u2308\\\",\\\"\\\\u2309\\\",\\\"\\\\\\\\surd\\\"],Xe=[\\\"\\\\\\\\uparrow\\\",\\\"\\\\\\\\downarrow\\\",\\\"\\\\\\\\updownarrow\\\",\\\"\\\\\\\\Uparrow\\\",\\\"\\\\\\\\Downarrow\\\",\\\"\\\\\\\\Updownarrow\\\",\\\"|\\\",\\\"\\\\\\\\|\\\",\\\"\\\\\\\\vert\\\",\\\"\\\\\\\\Vert\\\",\\\"\\\\\\\\lvert\\\",\\\"\\\\\\\\rvert\\\",\\\"\\\\\\\\lVert\\\",\\\"\\\\\\\\rVert\\\",\\\"\\\\\\\\lgroup\\\",\\\"\\\\\\\\rgroup\\\",\\\"\\\\u27ee\\\",\\\"\\\\u27ef\\\",\\\"\\\\\\\\lmoustache\\\",\\\"\\\\\\\\rmoustache\\\",\\\"\\\\u23b0\\\",\\\"\\\\u23b1\\\"],Ye=[\\\"<\\\",\\\">\\\",\\\"\\\\\\\\langle\\\",\\\"\\\\\\\\rangle\\\",\\\"/\\\",\\\"\\\\\\\\backslash\\\",\\\"\\\\\\\\lt\\\",\\\"\\\\\\\\gt\\\"],_e=[0,1.2,1.8,2.4,3],We=[{type:\\\"small\\\",style:w.SCRIPTSCRIPT},{type:\\\"small\\\",style:w.SCRIPT},{type:\\\"small\\\",style:w.TEXT},{type:\\\"large\\\",size:1},{type:\\\"large\\\",size:2},{type:\\\"large\\\",size:3},{type:\\\"large\\\",size:4}],je=[{type:\\\"small\\\",style:w.SCRIPTSCRIPT},{type:\\\"small\\\",style:w.SCRIPT},{type:\\\"small\\\",style:w.TEXT},{type:\\\"stack\\\"}],$e=[{type:\\\"small\\\",style:w.SCRIPTSCRIPT},{type:\\\"small\\\",style:w.SCRIPT},{type:\\\"small\\\",style:w.TEXT},{type:\\\"large\\\",size:1},{type:\\\"large\\\",size:2},{type:\\\"large\\\",size:3},{type:\\\"large\\\",size:4},{type:\\\"stack\\\"}],Ze=function(t){if(\\\"small\\\"===t.type)return\\\"Main-Regular\\\";if(\\\"large\\\"===t.type)return\\\"Size\\\"+t.size+\\\"-Regular\\\";if(\\\"stack\\\"===t.type)return\\\"Size4-Regular\\\";throw new Error(\\\"Add support for delim type '\\\"+t.type+\\\"' here.\\\")},Ke=function(t,e,r,a){for(var n=Math.min(2,3-a.style.size);n<r.length&&\\\"stack\\\"!==r[n].type;n++){var o=Le(t,Ze(r[n]),\\\"math\\\"),i=o.height+o.depth;if(\\\"small\\\"===r[n].type&&(i*=a.havingBaseStyle(r[n].style).sizeMultiplier),i>e)return r[n]}return r[r.length-1]},Je=function(t,e,r,a,n,o){var i;\\\"<\\\"===t||\\\"\\\\\\\\lt\\\"===t||\\\"\\\\u27e8\\\"===t?t=\\\"\\\\\\\\langle\\\":\\\">\\\"!==t&&\\\"\\\\\\\\gt\\\"!==t&&\\\"\\\\u27e9\\\"!==t||(t=\\\"\\\\\\\\rangle\\\"),i=c.contains(Ye,t)?We:c.contains(Ge,t)?$e:je;var s=Ke(t,e,i,a);return\\\"small\\\"===s.type?function(t,e,r,a,n,o){var i=Lt.makeSymbol(t,\\\"Main-Regular\\\",n,a),s=He(i,e,a,o);return r&&Pe(s,a,e),s}(t,s.style,r,a,n,o):\\\"large\\\"===s.type?De(t,s.size,r,a,n,o):Ve(t,e,r,a,n,o)},Qe=function(t,e){var r,a,n=e.havingBaseSizing(),o=Ke(\\\"\\\\\\\\surd\\\",t*n.sizeMultiplier,$e,n),i=n.sizeMultiplier,s=0,h=0,l=0;return\\\"small\\\"===o.type?(t<1?i=1:t<1.4&&(i=.7),h=1/i,(r=Ue(\\\"sqrtMain\\\",s=1.08/i,l=1080,e)).style.minWidth=\\\"0.853em\\\",a=.833/i):\\\"large\\\"===o.type?(l=1080*_e[o.size],h=_e[o.size]/i,s=(_e[o.size]+.08)/i,(r=Ue(\\\"sqrtSize\\\"+o.size,s,l,e)).style.minWidth=\\\"1.02em\\\",a=1/i):(s=t+.08,h=t,l=Math.floor(1e3*t)+80,(r=Ue(\\\"sqrtTall\\\",s,l,e)).style.minWidth=\\\"0.742em\\\",a=1.056),r.height=h,r.style.height=s+\\\"em\\\",{span:r,advanceWidth:a,ruleWidth:e.fontMetrics().sqrtRuleThickness*i}},tr=function(t,e,r,a,n){if(\\\"<\\\"===t||\\\"\\\\\\\\lt\\\"===t||\\\"\\\\u27e8\\\"===t?t=\\\"\\\\\\\\langle\\\":\\\">\\\"!==t&&\\\"\\\\\\\\gt\\\"!==t&&\\\"\\\\u27e9\\\"!==t||(t=\\\"\\\\\\\\rangle\\\"),c.contains(Ge,t)||c.contains(Ye,t))return De(t,e,!1,r,a,n);if(c.contains(Xe,t))return Ve(t,_e[e],!1,r,a,n);throw new i(\\\"Illegal delimiter: '\\\"+t+\\\"'\\\")},er=Je,rr=function(t,e,r,a,n,o){var i=a.fontMetrics().axisHeight*a.sizeMultiplier,s=5/a.fontMetrics().ptPerEm,h=Math.max(e-i,r+i),l=Math.max(h/500*901,2*h-s);return Je(t,l,!0,a,n,o)},ar={\\\"\\\\\\\\bigl\\\":{mclass:\\\"mopen\\\",size:1},\\\"\\\\\\\\Bigl\\\":{mclass:\\\"mopen\\\",size:2},\\\"\\\\\\\\biggl\\\":{mclass:\\\"mopen\\\",size:3},\\\"\\\\\\\\Biggl\\\":{mclass:\\\"mopen\\\",size:4},\\\"\\\\\\\\bigr\\\":{mclass:\\\"mclose\\\",size:1},\\\"\\\\\\\\Bigr\\\":{mclass:\\\"mclose\\\",size:2},\\\"\\\\\\\\biggr\\\":{mclass:\\\"mclose\\\",size:3},\\\"\\\\\\\\Biggr\\\":{mclass:\\\"mclose\\\",size:4},\\\"\\\\\\\\bigm\\\":{mclass:\\\"mrel\\\",size:1},\\\"\\\\\\\\Bigm\\\":{mclass:\\\"mrel\\\",size:2},\\\"\\\\\\\\biggm\\\":{mclass:\\\"mrel\\\",size:3},\\\"\\\\\\\\Biggm\\\":{mclass:\\\"mrel\\\",size:4},\\\"\\\\\\\\big\\\":{mclass:\\\"mord\\\",size:1},\\\"\\\\\\\\Big\\\":{mclass:\\\"mord\\\",size:2},\\\"\\\\\\\\bigg\\\":{mclass:\\\"mord\\\",size:3},\\\"\\\\\\\\Bigg\\\":{mclass:\\\"mord\\\",size:4}},nr=[\\\"(\\\",\\\"\\\\\\\\lparen\\\",\\\")\\\",\\\"\\\\\\\\rparen\\\",\\\"[\\\",\\\"\\\\\\\\lbrack\\\",\\\"]\\\",\\\"\\\\\\\\rbrack\\\",\\\"\\\\\\\\{\\\",\\\"\\\\\\\\lbrace\\\",\\\"\\\\\\\\}\\\",\\\"\\\\\\\\rbrace\\\",\\\"\\\\\\\\lfloor\\\",\\\"\\\\\\\\rfloor\\\",\\\"\\\\u230a\\\",\\\"\\\\u230b\\\",\\\"\\\\\\\\lceil\\\",\\\"\\\\\\\\rceil\\\",\\\"\\\\u2308\\\",\\\"\\\\u2309\\\",\\\"<\\\",\\\">\\\",\\\"\\\\\\\\langle\\\",\\\"\\\\u27e8\\\",\\\"\\\\\\\\rangle\\\",\\\"\\\\u27e9\\\",\\\"\\\\\\\\lt\\\",\\\"\\\\\\\\gt\\\",\\\"\\\\\\\\lvert\\\",\\\"\\\\\\\\rvert\\\",\\\"\\\\\\\\lVert\\\",\\\"\\\\\\\\rVert\\\",\\\"\\\\\\\\lgroup\\\",\\\"\\\\\\\\rgroup\\\",\\\"\\\\u27ee\\\",\\\"\\\\u27ef\\\",\\\"\\\\\\\\lmoustache\\\",\\\"\\\\\\\\rmoustache\\\",\\\"\\\\u23b0\\\",\\\"\\\\u23b1\\\",\\\"/\\\",\\\"\\\\\\\\backslash\\\",\\\"|\\\",\\\"\\\\\\\\vert\\\",\\\"\\\\\\\\|\\\",\\\"\\\\\\\\Vert\\\",\\\"\\\\\\\\uparrow\\\",\\\"\\\\\\\\Uparrow\\\",\\\"\\\\\\\\downarrow\\\",\\\"\\\\\\\\Downarrow\\\",\\\"\\\\\\\\updownarrow\\\",\\\"\\\\\\\\Updownarrow\\\",\\\".\\\"];function or(t,e){var r=Ft(t);if(r&&c.contains(nr,r.text))return r;throw new i(\\\"Invalid delimiter: '\\\"+(r?r.text:JSON.stringify(t))+\\\"' after '\\\"+e.funcName+\\\"'\\\",t)}function ir(t){if(!t.body)throw new Error(\\\"Bug: The leftright ParseNode wasn't fully parsed.\\\")}$t({type:\\\"delimsizing\\\",names:[\\\"\\\\\\\\bigl\\\",\\\"\\\\\\\\Bigl\\\",\\\"\\\\\\\\biggl\\\",\\\"\\\\\\\\Biggl\\\",\\\"\\\\\\\\bigr\\\",\\\"\\\\\\\\Bigr\\\",\\\"\\\\\\\\biggr\\\",\\\"\\\\\\\\Biggr\\\",\\\"\\\\\\\\bigm\\\",\\\"\\\\\\\\Bigm\\\",\\\"\\\\\\\\biggm\\\",\\\"\\\\\\\\Biggm\\\",\\\"\\\\\\\\big\\\",\\\"\\\\\\\\Big\\\",\\\"\\\\\\\\bigg\\\",\\\"\\\\\\\\Bigg\\\"],props:{numArgs:1},handler:function(t,e){var r=or(e[0],t);return{type:\\\"delimsizing\\\",mode:t.parser.mode,size:ar[t.funcName].size,mclass:ar[t.funcName].mclass,delim:r.text}},htmlBuilder:function(t,e){return\\\".\\\"===t.delim?Lt.makeSpan([t.mclass]):tr(t.delim,t.size,e,t.mode,[t.mclass])},mathmlBuilder:function(t){var e=[];\\\".\\\"!==t.delim&&e.push(fe(t.delim,t.mode));var r=new pe.MathNode(\\\"mo\\\",e);return\\\"mopen\\\"===t.mclass||\\\"mclose\\\"===t.mclass?r.setAttribute(\\\"fence\\\",\\\"true\\\"):r.setAttribute(\\\"fence\\\",\\\"false\\\"),r}}),$t({type:\\\"leftright-right\\\",names:[\\\"\\\\\\\\right\\\"],props:{numArgs:1},handler:function(t,e){return{type:\\\"leftright-right\\\",mode:t.parser.mode,delim:or(e[0],t).text}}}),$t({type:\\\"leftright\\\",names:[\\\"\\\\\\\\left\\\"],props:{numArgs:1},handler:function(t,e){var r=or(e[0],t),a=t.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect(\\\"\\\\\\\\right\\\",!1);var o=Ht(a.parseFunction(),\\\"leftright-right\\\");return{type:\\\"leftright\\\",mode:a.mode,body:n,left:r.text,right:o.delim}},htmlBuilder:function(t,e){ir(t);for(var r,a,n=ae(t.body,e,!0,[\\\"mopen\\\",\\\"mclose\\\"]),o=0,i=0,s=!1,h=0;h<n.length;h++)n[h].isMiddle?s=!0:(o=Math.max(n[h].height,o),i=Math.max(n[h].depth,i));if(o*=e.sizeMultiplier,i*=e.sizeMultiplier,r=\\\".\\\"===t.left?se(e,[\\\"mopen\\\"]):rr(t.left,o,i,e,t.mode,[\\\"mopen\\\"]),n.unshift(r),s)for(var l=1;l<n.length;l++){var m=n[l].isMiddle;m&&(n[l]=rr(m.delim,o,i,m.options,t.mode,[]))}return a=\\\".\\\"===t.right?se(e,[\\\"mclose\\\"]):rr(t.right,o,i,e,t.mode,[\\\"mclose\\\"]),n.push(a),Lt.makeSpan([\\\"minner\\\"],n,e)},mathmlBuilder:function(t,e){ir(t);var r=ve(t.body,e);if(\\\".\\\"!==t.left){var a=new pe.MathNode(\\\"mo\\\",[fe(t.left,t.mode)]);a.setAttribute(\\\"fence\\\",\\\"true\\\"),r.unshift(a)}if(\\\".\\\"!==t.right){var n=new pe.MathNode(\\\"mo\\\",[fe(t.right,t.mode)]);n.setAttribute(\\\"fence\\\",\\\"true\\\"),r.push(n)}return ge(r)}}),$t({type:\\\"middle\\\",names:[\\\"\\\\\\\\middle\\\"],props:{numArgs:1},handler:function(t,e){var r=or(e[0],t);if(!t.parser.leftrightDepth)throw new i(\\\"\\\\\\\\middle without preceding \\\\\\\\left\\\",r);return{type:\\\"middle\\\",mode:t.parser.mode,delim:r.text}},htmlBuilder:function(t,e){var r;if(\\\".\\\"===t.delim)r=se(e,[]);else{r=tr(t.delim,1,e,t.mode,[]);var a={delim:t.delim,options:e};r.isMiddle=a}return r},mathmlBuilder:function(t,e){var r=\\\"\\\\\\\\vert\\\"===t.delim||\\\"|\\\"===t.delim?fe(\\\"|\\\",\\\"text\\\"):fe(t.delim,t.mode),a=new pe.MathNode(\\\"mo\\\",[r]);return a.setAttribute(\\\"fence\\\",\\\"true\\\"),a.setAttribute(\\\"lspace\\\",\\\"0.05em\\\"),a.setAttribute(\\\"rspace\\\",\\\"0.05em\\\"),a}});var sr=function(t,e){var r,a,n=Lt.wrapFragment(he(t.body,e),e),o=t.label.substr(1),i=e.sizeMultiplier,s=0,h=c.isCharacterBox(t.body);if(\\\"sout\\\"===o)(r=Lt.makeSpan([\\\"stretchy\\\",\\\"sout\\\"])).height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else{/cancel/.test(o)?h||n.classes.push(\\\"cancel-pad\\\"):n.classes.push(\\\"boxpad\\\");var l=0;l=/box/.test(o)?\\\"colorbox\\\"===o?.3:.34:h?.2:0,r=Ae(n,o,l,e),s=n.depth+l,t.backgroundColor&&(r.style.backgroundColor=t.backgroundColor,t.borderColor&&(r.style.borderColor=t.borderColor))}return a=t.backgroundColor?Lt.makeVList({positionType:\\\"individualShift\\\",children:[{type:\\\"elem\\\",elem:r,shift:s},{type:\\\"elem\\\",elem:n,shift:0}]},e):Lt.makeVList({positionType:\\\"individualShift\\\",children:[{type:\\\"elem\\\",elem:n,shift:0},{type:\\\"elem\\\",elem:r,shift:s,wrapperClasses:/cancel/.test(o)?[\\\"svg-align\\\"]:[]}]},e),/cancel/.test(o)&&(a.height=n.height,a.depth=n.depth),/cancel/.test(o)&&!h?Lt.makeSpan([\\\"mord\\\",\\\"cancel-lap\\\"],[a],e):Lt.makeSpan([\\\"mord\\\"],[a],e)},hr=function(t,e){var r=new pe.MathNode(t.label.indexOf(\\\"colorbox\\\")>-1?\\\"mpadded\\\":\\\"menclose\\\",[ye(t.body,e)]);switch(t.label){case\\\"\\\\\\\\cancel\\\":r.setAttribute(\\\"notation\\\",\\\"updiagonalstrike\\\");break;case\\\"\\\\\\\\bcancel\\\":r.setAttribute(\\\"notation\\\",\\\"downdiagonalstrike\\\");break;case\\\"\\\\\\\\sout\\\":r.setAttribute(\\\"notation\\\",\\\"horizontalstrike\\\");break;case\\\"\\\\\\\\fbox\\\":r.setAttribute(\\\"notation\\\",\\\"box\\\");break;case\\\"\\\\\\\\fcolorbox\\\":case\\\"\\\\\\\\colorbox\\\":if(r.setAttribute(\\\"width\\\",\\\"+6pt\\\"),r.setAttribute(\\\"height\\\",\\\"+6pt\\\"),r.setAttribute(\\\"lspace\\\",\\\"3pt\\\"),r.setAttribute(\\\"voffset\\\",\\\"3pt\\\"),\\\"\\\\\\\\fcolorbox\\\"===t.label){var a=e.fontMetrics().defaultRuleThickness;r.setAttribute(\\\"style\\\",\\\"border: \\\"+a+\\\"em solid \\\"+String(t.borderColor))}break;case\\\"\\\\\\\\xcancel\\\":r.setAttribute(\\\"notation\\\",\\\"updiagonalstrike downdiagonalstrike\\\")}return t.backgroundColor&&r.setAttribute(\\\"mathbackground\\\",t.backgroundColor),r};$t({type:\\\"enclose\\\",names:[\\\"\\\\\\\\colorbox\\\"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:[\\\"color\\\",\\\"text\\\"]},handler:function(t,e,r){var a=t.parser,n=t.funcName,o=Ht(e[0],\\\"color-token\\\").color,i=e[1];return{type:\\\"enclose\\\",mode:a.mode,label:n,backgroundColor:o,body:i}},htmlBuilder:sr,mathmlBuilder:hr}),$t({type:\\\"enclose\\\",names:[\\\"\\\\\\\\fcolorbox\\\"],props:{numArgs:3,allowedInText:!0,greediness:3,argTypes:[\\\"color\\\",\\\"color\\\",\\\"text\\\"]},handler:function(t,e,r){var a=t.parser,n=t.funcName,o=Ht(e[0],\\\"color-token\\\").color,i=Ht(e[1],\\\"color-token\\\").color,s=e[2];return{type:\\\"enclose\\\",mode:a.mode,label:n,backgroundColor:i,borderColor:o,body:s}},htmlBuilder:sr,mathmlBuilder:hr}),$t({type:\\\"enclose\\\",names:[\\\"\\\\\\\\fbox\\\"],props:{numArgs:1,argTypes:[\\\"text\\\"],allowedInText:!0},handler:function(t,e){return{type:\\\"enclose\\\",mode:t.parser.mode,label:\\\"\\\\\\\\fbox\\\",body:e[0]}}}),$t({type:\\\"enclose\\\",names:[\\\"\\\\\\\\cancel\\\",\\\"\\\\\\\\bcancel\\\",\\\"\\\\\\\\xcancel\\\",\\\"\\\\\\\\sout\\\"],props:{numArgs:1},handler:function(t,e,r){var a=t.parser,n=t.funcName,o=e[0];return{type:\\\"enclose\\\",mode:a.mode,label:n,body:o}},htmlBuilder:sr,mathmlBuilder:hr});var lr={};function mr(t){for(var e=t.type,r=t.names,a=t.props,n=t.handler,o=t.htmlBuilder,i=t.mathmlBuilder,s={type:e,numArgs:a.numArgs||0,greediness:1,allowedInText:!1,numOptionalArgs:0,handler:n},h=0;h<r.length;++h)lr[r[h]]=s;o&&(Wt[e]=o),i&&(jt[e]=i)}function cr(t){var e=[];t.consumeSpaces();for(var r=t.nextToken.text;\\\"\\\\\\\\hline\\\"===r||\\\"\\\\\\\\hdashline\\\"===r;)t.consume(),e.push(\\\"\\\\\\\\hdashline\\\"===r),t.consumeSpaces(),r=t.nextToken.text;return e}function ur(t,e,r){var a=e.hskipBeforeAndAfter,n=e.addJot,o=e.cols,s=e.arraystretch,h=e.colSeparationType;if(t.gullet.beginGroup(),t.gullet.macros.set(\\\"\\\\\\\\\\\\\\\\\\\",\\\"\\\\\\\\cr\\\"),!s){var l=t.gullet.expandMacroAsText(\\\"\\\\\\\\arraystretch\\\");if(null==l)s=1;else if(!(s=parseFloat(l))||s<0)throw new i(\\\"Invalid \\\\\\\\arraystretch: \\\"+l)}var m=[],c=[m],u=[],d=[];for(d.push(cr(t));;){var p=t.parseExpression(!1,\\\"\\\\\\\\cr\\\");p={type:\\\"ordgroup\\\",mode:t.mode,body:p},r&&(p={type:\\\"styling\\\",mode:t.mode,style:r,body:[p]}),m.push(p);var f=t.nextToken.text;if(\\\"&\\\"===f)t.consume();else{if(\\\"\\\\\\\\end\\\"===f){1===m.length&&\\\"styling\\\"===p.type&&0===p.body[0].body.length&&c.pop(),d.length<c.length+1&&d.push([]);break}if(\\\"\\\\\\\\cr\\\"!==f)throw new i(\\\"Expected & or \\\\\\\\\\\\\\\\ or \\\\\\\\cr or \\\\\\\\end\\\",t.nextToken);var g=Ht(t.parseFunction(),\\\"cr\\\");u.push(g.size),d.push(cr(t)),m=[],c.push(m)}}return t.gullet.endGroup(),{type:\\\"array\\\",mode:t.mode,addJot:n,arraystretch:s,body:c,cols:o,rowGaps:u,hskipBeforeAndAfter:a,hLinesBeforeRow:d,colSeparationType:h}}function dr(t){return\\\"d\\\"===t.substr(0,1)?\\\"display\\\":\\\"text\\\"}var pr=function(t,e){var r,a,n=t.body.length,o=t.hLinesBeforeRow,s=0,h=new Array(n),l=[],m=1/e.fontMetrics().ptPerEm,u=5*m,d=12*m,p=3*m,f=t.arraystretch*d,g=.7*f,x=.3*f,v=0;function b(t){for(var e=0;e<t.length;++e)e>0&&(v+=.25),l.push({pos:v,isDashed:t[e]})}for(b(o[0]),r=0;r<t.body.length;++r){var y=t.body[r],w=g,k=x;s<y.length&&(s=y.length);var S=new Array(y.length);for(a=0;a<y.length;++a){var z=he(y[a],e);k<z.depth&&(k=z.depth),w<z.height&&(w=z.height),S[a]=z}var M=t.rowGaps[r],T=0;M&&(T=zt(M,e))>0&&(k<(T+=x)&&(k=T),T=0),t.addJot&&(k+=p),S.height=w,S.depth=k,v+=w,S.pos=v,v+=k+T,h[r]=S,b(o[r+1])}var A,B,q=v/2+e.fontMetrics().axisHeight,C=t.cols||[],N=[];for(a=0,B=0;a<s||B<C.length;++a,++B){for(var I=C[B]||{},O=!0;\\\"separator\\\"===I.type;){if(O||((A=Lt.makeSpan([\\\"arraycolsep\\\"],[])).style.width=e.fontMetrics().doubleRuleSep+\\\"em\\\",N.push(A)),\\\"|\\\"===I.separator){var E=Lt.makeSpan([\\\"vertical-separator\\\"],[],e);E.style.height=v+\\\"em\\\",E.style.verticalAlign=-(v-q)+\\\"em\\\",N.push(E)}else{if(\\\":\\\"!==I.separator)throw new i(\\\"Invalid separator type: \\\"+I.separator);var R=Lt.makeSpan([\\\"vertical-separator\\\",\\\"vs-dashed\\\"],[],e);R.style.height=v+\\\"em\\\",R.style.verticalAlign=-(v-q)+\\\"em\\\",N.push(R)}I=C[++B]||{},O=!1}if(!(a>=s)){var L=void 0;(a>0||t.hskipBeforeAndAfter)&&0!==(L=c.deflt(I.pregap,u))&&((A=Lt.makeSpan([\\\"arraycolsep\\\"],[])).style.width=L+\\\"em\\\",N.push(A));var H=[];for(r=0;r<n;++r){var P=h[r],D=P[a];if(D){var F=P.pos-q;D.depth=P.depth,D.height=P.height,H.push({type:\\\"elem\\\",elem:D,shift:F})}}H=Lt.makeVList({positionType:\\\"individualShift\\\",children:H},e),H=Lt.makeSpan([\\\"col-align-\\\"+(I.align||\\\"c\\\")],[H]),N.push(H),(a<s-1||t.hskipBeforeAndAfter)&&0!==(L=c.deflt(I.postgap,u))&&((A=Lt.makeSpan([\\\"arraycolsep\\\"],[])).style.width=L+\\\"em\\\",N.push(A))}}if(h=Lt.makeSpan([\\\"mtable\\\"],N),l.length>0){for(var V=Lt.makeLineSpan(\\\"hline\\\",e,.05),U=Lt.makeLineSpan(\\\"hdashline\\\",e,.05),G=[{type:\\\"elem\\\",elem:h,shift:0}];l.length>0;){var X=l.pop(),Y=X.pos-q;X.isDashed?G.push({type:\\\"elem\\\",elem:U,shift:Y}):G.push({type:\\\"elem\\\",elem:V,shift:Y})}h=Lt.makeVList({positionType:\\\"individualShift\\\",children:G},e)}return Lt.makeSpan([\\\"mord\\\"],[h],e)},fr={c:\\\"center \\\",l:\\\"left \\\",r:\\\"right \\\"},gr=function(t,e){var r=new pe.MathNode(\\\"mtable\\\",t.body.map(function(t){return new pe.MathNode(\\\"mtr\\\",t.map(function(t){return new pe.MathNode(\\\"mtd\\\",[ye(t,e)])}))})),a=.16+t.arraystretch-1+(t.addJot?.09:0);r.setAttribute(\\\"rowspacing\\\",a+\\\"em\\\");var n=\\\"\\\",o=\\\"\\\";if(t.cols){var i=t.cols,s=\\\"\\\",h=!1,l=0,m=i.length;\\\"separator\\\"===i[0].type&&(n+=\\\"top \\\",l=1),\\\"separator\\\"===i[i.length-1].type&&(n+=\\\"bottom \\\",m-=1);for(var c=l;c<m;c++)\\\"align\\\"===i[c].type?(o+=fr[i[c].align],h&&(s+=\\\"none \\\"),h=!0):\\\"separator\\\"===i[c].type&&h&&(s+=\\\"|\\\"===i[c].separator?\\\"solid \\\":\\\"dashed \\\",h=!1);r.setAttribute(\\\"columnalign\\\",o.trim()),/[sd]/.test(s)&&r.setAttribute(\\\"columnlines\\\",s.trim())}if(\\\"align\\\"===t.colSeparationType){for(var u=t.cols||[],d=\\\"\\\",p=1;p<u.length;p++)d+=p%2?\\\"0em \\\":\\\"1em \\\";r.setAttribute(\\\"columnspacing\\\",d.trim())}else\\\"alignat\\\"===t.colSeparationType?r.setAttribute(\\\"columnspacing\\\",\\\"0em\\\"):r.setAttribute(\\\"columnspacing\\\",\\\"1em\\\");var f=\\\"\\\",g=t.hLinesBeforeRow;n+=g[0].length>0?\\\"left \\\":\\\"\\\",n+=g[g.length-1].length>0?\\\"right \\\":\\\"\\\";for(var x=1;x<g.length-1;x++)f+=0===g[x].length?\\\"none \\\":g[x][0]?\\\"dashed \\\":\\\"solid \\\";if(/[sd]/.test(f)&&r.setAttribute(\\\"rowlines\\\",f.trim()),\\\"\\\"===n)return r;var v=new pe.MathNode(\\\"menclose\\\",[r]);return v.setAttribute(\\\"notation\\\",n.trim()),v},xr=function(t,e){var r,a=[],n=ur(t.parser,{cols:a,addJot:!0},\\\"display\\\"),o=0,s={type:\\\"ordgroup\\\",mode:t.mode,body:[]},h=Pt(e[0],\\\"ordgroup\\\");if(h){for(var l=\\\"\\\",m=0;m<h.body.length;m++){l+=Ht(h.body[m],\\\"textord\\\").text}r=Number(l),o=2*r}var c=!o;n.body.forEach(function(t){for(var e=1;e<t.length;e+=2){var a=Ht(t[e],\\\"styling\\\");Ht(a.body[0],\\\"ordgroup\\\").body.unshift(s)}if(c)o<t.length&&(o=t.length);else{var n=t.length/2;if(r<n)throw new i(\\\"Too many math in a row: expected \\\"+r+\\\", but got \\\"+n,t[0])}});for(var u=0;u<o;++u){var d=\\\"r\\\",p=0;u%2==1?d=\\\"l\\\":u>0&&c&&(p=1),a[u]={type:\\\"align\\\",align:d,pregap:p,postgap:0}}return n.colSeparationType=c?\\\"align\\\":\\\"alignat\\\",n};mr({type:\\\"array\\\",names:[\\\"array\\\",\\\"darray\\\"],props:{numArgs:1},handler:function(t,e){var r={cols:(Ft(e[0])?[e[0]]:Ht(e[0],\\\"ordgroup\\\").body).map(function(t){var e=function(t){var e=Ft(t);if(!e)throw new Error(\\\"Expected node of symbol group type, but got \\\"+(t?\\\"node of type \\\"+t.type:String(t)));return e}(t).text;if(-1!==\\\"lcr\\\".indexOf(e))return{type:\\\"align\\\",align:e};if(\\\"|\\\"===e)return{type:\\\"separator\\\",separator:\\\"|\\\"};if(\\\":\\\"===e)return{type:\\\"separator\\\",separator:\\\":\\\"};throw new i(\\\"Unknown column alignment: \\\"+e,t)}),hskipBeforeAndAfter:!0};return ur(t.parser,r,dr(t.envName))},htmlBuilder:pr,mathmlBuilder:gr}),mr({type:\\\"array\\\",names:[\\\"matrix\\\",\\\"pmatrix\\\",\\\"bmatrix\\\",\\\"Bmatrix\\\",\\\"vmatrix\\\",\\\"Vmatrix\\\"],props:{numArgs:0},handler:function(t){var e={matrix:null,pmatrix:[\\\"(\\\",\\\")\\\"],bmatrix:[\\\"[\\\",\\\"]\\\"],Bmatrix:[\\\"\\\\\\\\{\\\",\\\"\\\\\\\\}\\\"],vmatrix:[\\\"|\\\",\\\"|\\\"],Vmatrix:[\\\"\\\\\\\\Vert\\\",\\\"\\\\\\\\Vert\\\"]}[t.envName],r=ur(t.parser,{hskipBeforeAndAfter:!1},dr(t.envName));return e?{type:\\\"leftright\\\",mode:t.mode,body:[r],left:e[0],right:e[1]}:r},htmlBuilder:pr,mathmlBuilder:gr}),mr({type:\\\"array\\\",names:[\\\"cases\\\",\\\"dcases\\\"],props:{numArgs:0},handler:function(t){var e=ur(t.parser,{arraystretch:1.2,cols:[{type:\\\"align\\\",align:\\\"l\\\",pregap:0,postgap:1},{type:\\\"align\\\",align:\\\"l\\\",pregap:0,postgap:0}]},dr(t.envName));return{type:\\\"leftright\\\",mode:t.mode,body:[e],left:\\\"\\\\\\\\{\\\",right:\\\".\\\"}},htmlBuilder:pr,mathmlBuilder:gr}),mr({type:\\\"array\\\",names:[\\\"aligned\\\"],props:{numArgs:0},handler:xr,htmlBuilder:pr,mathmlBuilder:gr}),mr({type:\\\"array\\\",names:[\\\"gathered\\\"],props:{numArgs:0},handler:function(t){return ur(t.parser,{cols:[{type:\\\"align\\\",align:\\\"c\\\"}],addJot:!0},\\\"display\\\")},htmlBuilder:pr,mathmlBuilder:gr}),mr({type:\\\"array\\\",names:[\\\"alignedat\\\"],props:{numArgs:1},handler:xr,htmlBuilder:pr,mathmlBuilder:gr}),$t({type:\\\"text\\\",names:[\\\"\\\\\\\\hline\\\",\\\"\\\\\\\\hdashline\\\"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler:function(t,e){throw new i(t.funcName+\\\" valid only within array environment\\\")}});var vr=lr;$t({type:\\\"environment\\\",names:[\\\"\\\\\\\\begin\\\",\\\"\\\\\\\\end\\\"],props:{numArgs:1,argTypes:[\\\"text\\\"]},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];if(\\\"ordgroup\\\"!==n.type)throw new i(\\\"Invalid environment name\\\",n);for(var o=\\\"\\\",s=0;s<n.body.length;++s)o+=Ht(n.body[s],\\\"textord\\\").text;if(\\\"\\\\\\\\begin\\\"===a){if(!vr.hasOwnProperty(o))throw new i(\\\"No such environment: \\\"+o,n);var h=vr[o],l=r.parseArguments(\\\"\\\\\\\\begin{\\\"+o+\\\"}\\\",h),m=l.args,c=l.optArgs,u={mode:r.mode,envName:o,parser:r},d=h.handler(u,m,c);r.expect(\\\"\\\\\\\\end\\\",!1);var p=r.nextToken,f=Ht(r.parseFunction(),\\\"environment\\\");if(f.name!==o)throw new i(\\\"Mismatch: \\\\\\\\begin{\\\"+o+\\\"} matched by \\\\\\\\end{\\\"+f.name+\\\"}\\\",p);return d}return{type:\\\"environment\\\",mode:r.mode,name:o,nameGroup:n}}});var br=Lt.makeSpan;function yr(t,e){var r=ae(t.body,e,!0);return br([t.mclass],r,e)}function wr(t,e){var r=ve(t.body,e);return pe.newDocumentFragment(r)}$t({type:\\\"mclass\\\",names:[\\\"\\\\\\\\mathord\\\",\\\"\\\\\\\\mathbin\\\",\\\"\\\\\\\\mathrel\\\",\\\"\\\\\\\\mathopen\\\",\\\"\\\\\\\\mathclose\\\",\\\"\\\\\\\\mathpunct\\\",\\\"\\\\\\\\mathinner\\\"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:\\\"mclass\\\",mode:r.mode,mclass:\\\"m\\\"+a.substr(5),body:Kt(n)}},htmlBuilder:yr,mathmlBuilder:wr});var kr=function(t){var e=\\\"ordgroup\\\"===t.type&&t.body.length?t.body[0]:t;return\\\"atom\\\"!==e.type||\\\"bin\\\"!==e.family&&\\\"rel\\\"!==e.family?\\\"mord\\\":\\\"m\\\"+e.family};$t({type:\\\"mclass\\\",names:[\\\"\\\\\\\\@binrel\\\"],props:{numArgs:2},handler:function(t,e){return{type:\\\"mclass\\\",mode:t.parser.mode,mclass:kr(e[0]),body:[e[1]]}}}),$t({type:\\\"mclass\\\",names:[\\\"\\\\\\\\stackrel\\\",\\\"\\\\\\\\overset\\\",\\\"\\\\\\\\underset\\\"],props:{numArgs:2},handler:function(t,e){var r,a=t.parser,n=t.funcName,o=e[1],i=e[0];r=\\\"\\\\\\\\stackrel\\\"!==n?kr(o):\\\"mrel\\\";var s={type:\\\"op\\\",mode:o.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:\\\"\\\\\\\\stackrel\\\"!==n,body:Kt(o)},h={type:\\\"supsub\\\",mode:i.mode,base:s,sup:\\\"\\\\\\\\underset\\\"===n?null:i,sub:\\\"\\\\\\\\underset\\\"===n?i:null};return{type:\\\"mclass\\\",mode:a.mode,mclass:r,body:[h]}},htmlBuilder:yr,mathmlBuilder:wr});var Sr=function(t,e){var r=t.font,a=e.withFont(r);return he(t.body,a)},zr=function(t,e){var r=t.font,a=e.withFont(r);return ye(t.body,a)},Mr={\\\"\\\\\\\\Bbb\\\":\\\"\\\\\\\\mathbb\\\",\\\"\\\\\\\\bold\\\":\\\"\\\\\\\\mathbf\\\",\\\"\\\\\\\\frak\\\":\\\"\\\\\\\\mathfrak\\\",\\\"\\\\\\\\bm\\\":\\\"\\\\\\\\boldsymbol\\\"};$t({type:\\\"font\\\",names:[\\\"\\\\\\\\mathrm\\\",\\\"\\\\\\\\mathit\\\",\\\"\\\\\\\\mathbf\\\",\\\"\\\\\\\\mathnormal\\\",\\\"\\\\\\\\mathbb\\\",\\\"\\\\\\\\mathcal\\\",\\\"\\\\\\\\mathfrak\\\",\\\"\\\\\\\\mathscr\\\",\\\"\\\\\\\\mathsf\\\",\\\"\\\\\\\\mathtt\\\",\\\"\\\\\\\\Bbb\\\",\\\"\\\\\\\\bold\\\",\\\"\\\\\\\\frak\\\"],props:{numArgs:1,greediness:2},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0],o=a;return o in Mr&&(o=Mr[o]),{type:\\\"font\\\",mode:r.mode,font:o.slice(1),body:n}},htmlBuilder:Sr,mathmlBuilder:zr}),$t({type:\\\"mclass\\\",names:[\\\"\\\\\\\\boldsymbol\\\",\\\"\\\\\\\\bm\\\"],props:{numArgs:1,greediness:2},handler:function(t,e){var r=t.parser,a=e[0];return{type:\\\"mclass\\\",mode:r.mode,mclass:kr(a),body:[{type:\\\"font\\\",mode:r.mode,font:\\\"boldsymbol\\\",body:a}]}}}),$t({type:\\\"font\\\",names:[\\\"\\\\\\\\rm\\\",\\\"\\\\\\\\sf\\\",\\\"\\\\\\\\tt\\\",\\\"\\\\\\\\bf\\\",\\\"\\\\\\\\it\\\"],props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=t.breakOnTokenText,o=r.mode,i=r.parseExpression(!0,n);return{type:\\\"font\\\",mode:o,font:\\\"math\\\"+a.slice(1),body:{type:\\\"ordgroup\\\",mode:r.mode,body:i}}},htmlBuilder:Sr,mathmlBuilder:zr});var Tr=function(t,e){var r=e;return\\\"display\\\"===t?r=r.id>=w.SCRIPT.id?r.text():w.DISPLAY:\\\"text\\\"===t&&r.size===w.DISPLAY.size?r=w.TEXT:\\\"script\\\"===t?r=w.SCRIPT:\\\"scriptscript\\\"===t&&(r=w.SCRIPTSCRIPT),r},Ar=function(t,e){var r,a=Tr(t.size,e.style),n=a.fracNum(),o=a.fracDen();r=e.havingStyle(n);var i=he(t.numer,r,e);if(t.continued){var s=8.5/e.fontMetrics().ptPerEm,h=3.5/e.fontMetrics().ptPerEm;i.height=i.height<s?s:i.height,i.depth=i.depth<h?h:i.depth}r=e.havingStyle(o);var l,m,c,u,d,p,f,g,x,v,b=he(t.denom,r,e);if(t.hasBarLine?(t.barSize?(m=zt(t.barSize,e),l=Lt.makeLineSpan(\\\"frac-line\\\",e,m)):l=Lt.makeLineSpan(\\\"frac-line\\\",e),m=l.height,c=l.height):(l=null,m=0,c=e.fontMetrics().defaultRuleThickness),a.size===w.DISPLAY.size||\\\"display\\\"===t.size?(u=e.fontMetrics().num1,d=m>0?3*c:7*c,p=e.fontMetrics().denom1):(m>0?(u=e.fontMetrics().num2,d=c):(u=e.fontMetrics().num3,d=3*c),p=e.fontMetrics().denom2),l){var y=e.fontMetrics().axisHeight;u-i.depth-(y+.5*m)<d&&(u+=d-(u-i.depth-(y+.5*m))),y-.5*m-(b.height-p)<d&&(p+=d-(y-.5*m-(b.height-p)));var k=-(y-.5*m);f=Lt.makeVList({positionType:\\\"individualShift\\\",children:[{type:\\\"elem\\\",elem:b,shift:p},{type:\\\"elem\\\",elem:l,shift:k},{type:\\\"elem\\\",elem:i,shift:-u}]},e)}else{var S=u-i.depth-(b.height-p);S<d&&(u+=.5*(d-S),p+=.5*(d-S)),f=Lt.makeVList({positionType:\\\"individualShift\\\",children:[{type:\\\"elem\\\",elem:b,shift:p},{type:\\\"elem\\\",elem:i,shift:-u}]},e)}return r=e.havingStyle(a),f.height*=r.sizeMultiplier/e.sizeMultiplier,f.depth*=r.sizeMultiplier/e.sizeMultiplier,g=a.size===w.DISPLAY.size?e.fontMetrics().delim1:e.fontMetrics().delim2,x=null==t.leftDelim?se(e,[\\\"mopen\\\"]):er(t.leftDelim,g,!0,e.havingStyle(a),t.mode,[\\\"mopen\\\"]),v=t.continued?Lt.makeSpan([]):null==t.rightDelim?se(e,[\\\"mclose\\\"]):er(t.rightDelim,g,!0,e.havingStyle(a),t.mode,[\\\"mclose\\\"]),Lt.makeSpan([\\\"mord\\\"].concat(r.sizingClasses(e)),[x,Lt.makeSpan([\\\"mfrac\\\"],[f]),v],e)},Br=function(t,e){var r=new pe.MathNode(\\\"mfrac\\\",[ye(t.numer,e),ye(t.denom,e)]);if(t.hasBarLine){if(t.barSize){var a=zt(t.barSize,e);r.setAttribute(\\\"linethickness\\\",a+\\\"em\\\")}}else r.setAttribute(\\\"linethickness\\\",\\\"0px\\\");var n=Tr(t.size,e.style);if(n.size!==e.style.size){r=new pe.MathNode(\\\"mstyle\\\",[r]);var o=n.size===w.DISPLAY.size?\\\"true\\\":\\\"false\\\";r.setAttribute(\\\"displaystyle\\\",o),r.setAttribute(\\\"scriptlevel\\\",\\\"0\\\")}if(null!=t.leftDelim||null!=t.rightDelim){var i=[];if(null!=t.leftDelim){var s=new pe.MathNode(\\\"mo\\\",[new pe.TextNode(t.leftDelim.replace(\\\"\\\\\\\\\\\",\\\"\\\"))]);s.setAttribute(\\\"fence\\\",\\\"true\\\"),i.push(s)}if(i.push(r),null!=t.rightDelim){var h=new pe.MathNode(\\\"mo\\\",[new pe.TextNode(t.rightDelim.replace(\\\"\\\\\\\\\\\",\\\"\\\"))]);h.setAttribute(\\\"fence\\\",\\\"true\\\"),i.push(h)}return ge(i)}return r};$t({type:\\\"genfrac\\\",names:[\\\"\\\\\\\\cfrac\\\",\\\"\\\\\\\\dfrac\\\",\\\"\\\\\\\\frac\\\",\\\"\\\\\\\\tfrac\\\",\\\"\\\\\\\\dbinom\\\",\\\"\\\\\\\\binom\\\",\\\"\\\\\\\\tbinom\\\",\\\"\\\\\\\\\\\\\\\\atopfrac\\\",\\\"\\\\\\\\\\\\\\\\bracefrac\\\",\\\"\\\\\\\\\\\\\\\\brackfrac\\\"],props:{numArgs:2,greediness:2},handler:function(t,e){var r,a=t.parser,n=t.funcName,o=e[0],i=e[1],s=null,h=null,l=\\\"auto\\\";switch(n){case\\\"\\\\\\\\cfrac\\\":case\\\"\\\\\\\\dfrac\\\":case\\\"\\\\\\\\frac\\\":case\\\"\\\\\\\\tfrac\\\":r=!0;break;case\\\"\\\\\\\\\\\\\\\\atopfrac\\\":r=!1;break;case\\\"\\\\\\\\dbinom\\\":case\\\"\\\\\\\\binom\\\":case\\\"\\\\\\\\tbinom\\\":r=!1,s=\\\"(\\\",h=\\\")\\\";break;case\\\"\\\\\\\\\\\\\\\\bracefrac\\\":r=!1,s=\\\"\\\\\\\\{\\\",h=\\\"\\\\\\\\}\\\";break;case\\\"\\\\\\\\\\\\\\\\brackfrac\\\":r=!1,s=\\\"[\\\",h=\\\"]\\\";break;default:throw new Error(\\\"Unrecognized genfrac command\\\")}switch(n){case\\\"\\\\\\\\cfrac\\\":case\\\"\\\\\\\\dfrac\\\":case\\\"\\\\\\\\dbinom\\\":l=\\\"display\\\";break;case\\\"\\\\\\\\tfrac\\\":case\\\"\\\\\\\\tbinom\\\":l=\\\"text\\\"}return{type:\\\"genfrac\\\",mode:a.mode,continued:\\\"\\\\\\\\cfrac\\\"===n,numer:o,denom:i,hasBarLine:r,leftDelim:s,rightDelim:h,size:l,barSize:null}},htmlBuilder:Ar,mathmlBuilder:Br}),$t({type:\\\"infix\\\",names:[\\\"\\\\\\\\over\\\",\\\"\\\\\\\\choose\\\",\\\"\\\\\\\\atop\\\",\\\"\\\\\\\\brace\\\",\\\"\\\\\\\\brack\\\"],props:{numArgs:0,infix:!0},handler:function(t){var e,r=t.parser,a=t.funcName,n=t.token;switch(a){case\\\"\\\\\\\\over\\\":e=\\\"\\\\\\\\frac\\\";break;case\\\"\\\\\\\\choose\\\":e=\\\"\\\\\\\\binom\\\";break;case\\\"\\\\\\\\atop\\\":e=\\\"\\\\\\\\\\\\\\\\atopfrac\\\";break;case\\\"\\\\\\\\brace\\\":e=\\\"\\\\\\\\\\\\\\\\bracefrac\\\";break;case\\\"\\\\\\\\brack\\\":e=\\\"\\\\\\\\\\\\\\\\brackfrac\\\";break;default:throw new Error(\\\"Unrecognized infix genfrac command\\\")}return{type:\\\"infix\\\",mode:r.mode,replaceWith:e,token:n}}});var qr=[\\\"display\\\",\\\"text\\\",\\\"script\\\",\\\"scriptscript\\\"],Cr=function(t){var e=null;return t.length>0&&(e=\\\".\\\"===(e=t)?null:e),e};$t({type:\\\"genfrac\\\",names:[\\\"\\\\\\\\genfrac\\\"],props:{numArgs:6,greediness:6,argTypes:[\\\"math\\\",\\\"math\\\",\\\"size\\\",\\\"text\\\",\\\"math\\\",\\\"math\\\"]},handler:function(t,e){var r=t.parser,a=e[4],n=e[5],o=Pt(e[0],\\\"atom\\\");o&&(o=Dt(e[0],\\\"open\\\"));var i=o?Cr(o.text):null,s=Pt(e[1],\\\"atom\\\");s&&(s=Dt(e[1],\\\"close\\\"));var h,l=s?Cr(s.text):null,m=Ht(e[2],\\\"size\\\"),c=null;h=!!m.isBlank||(c=m.value).number>0;var u=\\\"auto\\\",d=Pt(e[3],\\\"ordgroup\\\");if(d){if(d.body.length>0){var p=Ht(d.body[0],\\\"textord\\\");u=qr[Number(p.text)]}}else d=Ht(e[3],\\\"textord\\\"),u=qr[Number(d.text)];return{type:\\\"genfrac\\\",mode:r.mode,numer:a,denom:n,continued:!1,hasBarLine:h,barSize:c,leftDelim:i,rightDelim:l,size:u}},htmlBuilder:Ar,mathmlBuilder:Br}),$t({type:\\\"infix\\\",names:[\\\"\\\\\\\\above\\\"],props:{numArgs:1,argTypes:[\\\"size\\\"],infix:!0},handler:function(t,e){var r=t.parser,a=(t.funcName,t.token);return{type:\\\"infix\\\",mode:r.mode,replaceWith:\\\"\\\\\\\\\\\\\\\\abovefrac\\\",size:Ht(e[0],\\\"size\\\").value,token:a}}}),$t({type:\\\"genfrac\\\",names:[\\\"\\\\\\\\\\\\\\\\abovefrac\\\"],props:{numArgs:3,argTypes:[\\\"math\\\",\\\"size\\\",\\\"math\\\"]},handler:function(t,e){var r=t.parser,a=(t.funcName,e[0]),n=function(t){if(!t)throw new Error(\\\"Expected non-null, but got \\\"+String(t));return t}(Ht(e[1],\\\"infix\\\").size),o=e[2],i=n.number>0;return{type:\\\"genfrac\\\",mode:r.mode,numer:a,denom:o,continued:!1,hasBarLine:i,barSize:n,leftDelim:null,rightDelim:null,size:\\\"auto\\\"}},htmlBuilder:Ar,mathmlBuilder:Br});var Nr=function(t,e){var r,a,n=e.style,o=Pt(t,\\\"supsub\\\");o?(r=o.sup?he(o.sup,e.havingStyle(n.sup()),e):he(o.sub,e.havingStyle(n.sub()),e),a=Ht(o.base,\\\"horizBrace\\\")):a=Ht(t,\\\"horizBrace\\\");var i,s=he(a.base,e.havingBaseStyle(w.DISPLAY)),h=qe(a,e);if(a.isOver?(i=Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:s},{type:\\\"kern\\\",size:.1},{type:\\\"elem\\\",elem:h}]},e)).children[0].children[0].children[1].classes.push(\\\"svg-align\\\"):(i=Lt.makeVList({positionType:\\\"bottom\\\",positionData:s.depth+.1+h.height,children:[{type:\\\"elem\\\",elem:h},{type:\\\"kern\\\",size:.1},{type:\\\"elem\\\",elem:s}]},e)).children[0].children[0].children[0].classes.push(\\\"svg-align\\\"),r){var l=Lt.makeSpan([\\\"mord\\\",a.isOver?\\\"mover\\\":\\\"munder\\\"],[i],e);i=a.isOver?Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:l},{type:\\\"kern\\\",size:.2},{type:\\\"elem\\\",elem:r}]},e):Lt.makeVList({positionType:\\\"bottom\\\",positionData:l.depth+.2+r.height+r.depth,children:[{type:\\\"elem\\\",elem:r},{type:\\\"kern\\\",size:.2},{type:\\\"elem\\\",elem:l}]},e)}return Lt.makeSpan([\\\"mord\\\",a.isOver?\\\"mover\\\":\\\"munder\\\"],[i],e)};$t({type:\\\"horizBrace\\\",names:[\\\"\\\\\\\\overbrace\\\",\\\"\\\\\\\\underbrace\\\"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName;return{type:\\\"horizBrace\\\",mode:r.mode,label:a,isOver:/^\\\\\\\\over/.test(a),base:e[0]}},htmlBuilder:Nr,mathmlBuilder:function(t,e){var r=Be(t.label);return new pe.MathNode(t.isOver?\\\"mover\\\":\\\"munder\\\",[ye(t.base,e),r])}}),$t({type:\\\"href\\\",names:[\\\"\\\\\\\\href\\\"],props:{numArgs:2,argTypes:[\\\"url\\\",\\\"original\\\"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[1],n=Ht(e[0],\\\"url\\\").url;return{type:\\\"href\\\",mode:r.mode,href:n,body:Kt(a)}},htmlBuilder:function(t,e){var r=ae(t.body,e,!1);return Lt.makeAnchor(t.href,[],r,e)},mathmlBuilder:function(t,e){var r=be(t.body,e);return r instanceof ue||(r=new ue(\\\"mrow\\\",[r])),r.setAttribute(\\\"href\\\",t.href),r}}),$t({type:\\\"href\\\",names:[\\\"\\\\\\\\url\\\"],props:{numArgs:1,argTypes:[\\\"url\\\"],allowedInText:!0},handler:function(t,e){for(var r=t.parser,a=Ht(e[0],\\\"url\\\").url,n=[],o=0;o<a.length;o++){var i=a[o];\\\"~\\\"===i&&(i=\\\"\\\\\\\\textasciitilde\\\"),n.push({type:\\\"textord\\\",mode:\\\"text\\\",text:i})}var s={type:\\\"text\\\",mode:r.mode,font:\\\"\\\\\\\\texttt\\\",body:n};return{type:\\\"href\\\",mode:r.mode,href:a,body:Kt(s)}}}),$t({type:\\\"htmlmathml\\\",names:[\\\"\\\\\\\\html@mathml\\\"],props:{numArgs:2,allowedInText:!0},handler:function(t,e){return{type:\\\"htmlmathml\\\",mode:t.parser.mode,html:Kt(e[0]),mathml:Kt(e[1])}},htmlBuilder:function(t,e){var r=ae(t.html,e,!1);return Lt.makeFragment(r)},mathmlBuilder:function(t,e){return be(t.mathml,e)}}),$t({type:\\\"kern\\\",names:[\\\"\\\\\\\\kern\\\",\\\"\\\\\\\\mkern\\\",\\\"\\\\\\\\hskip\\\",\\\"\\\\\\\\mskip\\\"],props:{numArgs:1,argTypes:[\\\"size\\\"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=Ht(e[0],\\\"size\\\");if(r.settings.strict){var o=\\\"m\\\"===a[1],i=\\\"mu\\\"===n.value.unit;o?(i||r.settings.reportNonstrict(\\\"mathVsTextUnits\\\",\\\"LaTeX's \\\"+a+\\\" supports only mu units, not \\\"+n.value.unit+\\\" units\\\"),\\\"math\\\"!==r.mode&&r.settings.reportNonstrict(\\\"mathVsTextUnits\\\",\\\"LaTeX's \\\"+a+\\\" works only in math mode\\\")):i&&r.settings.reportNonstrict(\\\"mathVsTextUnits\\\",\\\"LaTeX's \\\"+a+\\\" doesn't support mu units\\\")}return{type:\\\"kern\\\",mode:r.mode,dimension:n.value}},htmlBuilder:function(t,e){return Lt.makeGlue(t.dimension,e)},mathmlBuilder:function(t,e){var r=zt(t.dimension,e);return new pe.SpaceNode(r)}}),$t({type:\\\"lap\\\",names:[\\\"\\\\\\\\mathllap\\\",\\\"\\\\\\\\mathrlap\\\",\\\"\\\\\\\\mathclap\\\"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:\\\"lap\\\",mode:r.mode,alignment:a.slice(5),body:n}},htmlBuilder:function(t,e){var r;\\\"clap\\\"===t.alignment?(r=Lt.makeSpan([],[he(t.body,e)]),r=Lt.makeSpan([\\\"inner\\\"],[r],e)):r=Lt.makeSpan([\\\"inner\\\"],[he(t.body,e)]);var a=Lt.makeSpan([\\\"fix\\\"],[]),n=Lt.makeSpan([t.alignment],[r,a],e),o=Lt.makeSpan([\\\"strut\\\"]);return o.style.height=n.height+n.depth+\\\"em\\\",o.style.verticalAlign=-n.depth+\\\"em\\\",n.children.unshift(o),n=Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:n}]},e),Lt.makeSpan([\\\"mord\\\"],[n],e)},mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mpadded\\\",[ye(t.body,e)]);if(\\\"rlap\\\"!==t.alignment){var a=\\\"llap\\\"===t.alignment?\\\"-1\\\":\\\"-0.5\\\";r.setAttribute(\\\"lspace\\\",a+\\\"width\\\")}return r.setAttribute(\\\"width\\\",\\\"0px\\\"),r}}),$t({type:\\\"styling\\\",names:[\\\"\\\\\\\\(\\\",\\\"$\\\"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1,consumeMode:\\\"math\\\"},handler:function(t,e){var r=t.funcName,a=t.parser,n=a.mode;a.switchMode(\\\"math\\\");var o=\\\"\\\\\\\\(\\\"===r?\\\"\\\\\\\\)\\\":\\\"$\\\",i=a.parseExpression(!1,o);return a.expect(o,!1),a.switchMode(n),a.consume(),{type:\\\"styling\\\",mode:a.mode,style:\\\"text\\\",body:i}}}),$t({type:\\\"text\\\",names:[\\\"\\\\\\\\)\\\",\\\"\\\\\\\\]\\\"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(t,e){throw new i(\\\"Mismatched \\\"+t.funcName)}});var Ir=function(t,e){switch(e.style.size){case w.DISPLAY.size:return t.display;case w.TEXT.size:return t.text;case w.SCRIPT.size:return t.script;case w.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}};$t({type:\\\"mathchoice\\\",names:[\\\"\\\\\\\\mathchoice\\\"],props:{numArgs:4},handler:function(t,e){return{type:\\\"mathchoice\\\",mode:t.parser.mode,display:Kt(e[0]),text:Kt(e[1]),script:Kt(e[2]),scriptscript:Kt(e[3])}},htmlBuilder:function(t,e){var r=Ir(t,e),a=ae(r,e,!1);return Lt.makeFragment(a)},mathmlBuilder:function(t,e){var r=Ir(t,e);return be(r,e)}});var Or=[\\\"\\\\\\\\smallint\\\"],Er=function(t,e){var r,a,n,o=!1,i=Pt(t,\\\"supsub\\\");i?(r=i.sup,a=i.sub,n=Ht(i.base,\\\"op\\\"),o=!0):n=Ht(t,\\\"op\\\");var s,h=e.style,l=!1;if(h.size===w.DISPLAY.size&&n.symbol&&!c.contains(Or,n.name)&&(l=!0),n.symbol){var m=l?\\\"Size2-Regular\\\":\\\"Size1-Regular\\\",u=\\\"\\\";if(\\\"\\\\\\\\oiint\\\"!==n.name&&\\\"\\\\\\\\oiiint\\\"!==n.name||(u=n.name.substr(1),n.name=\\\"oiint\\\"===u?\\\"\\\\\\\\iint\\\":\\\"\\\\\\\\iiint\\\"),s=Lt.makeSymbol(n.name,m,\\\"math\\\",e,[\\\"mop\\\",\\\"op-symbol\\\",l?\\\"large-op\\\":\\\"small-op\\\"]),u.length>0){var d=s.italic,p=Lt.staticSvg(u+\\\"Size\\\"+(l?\\\"2\\\":\\\"1\\\"),e);s=Lt.makeVList({positionType:\\\"individualShift\\\",children:[{type:\\\"elem\\\",elem:s,shift:0},{type:\\\"elem\\\",elem:p,shift:l?.08:0}]},e),n.name=\\\"\\\\\\\\\\\"+u,s.classes.unshift(\\\"mop\\\"),s.italic=d}}else if(n.body){var f=ae(n.body,e,!0);1===f.length&&f[0]instanceof E?(s=f[0]).classes[0]=\\\"mop\\\":s=Lt.makeSpan([\\\"mop\\\"],Lt.tryCombineChars(f),e)}else{for(var g=[],x=1;x<n.name.length;x++)g.push(Lt.mathsym(n.name[x],n.mode));s=Lt.makeSpan([\\\"mop\\\"],g,e)}var v=0,b=0;if((s instanceof E||\\\"\\\\\\\\oiint\\\"===n.name||\\\"\\\\\\\\oiiint\\\"===n.name)&&!n.suppressBaseShift&&(v=(s.height-s.depth)/2-e.fontMetrics().axisHeight,b=s.italic),o){var y,k,S;if(s=Lt.makeSpan([],[s]),r){var z=he(r,e.havingStyle(h.sup()),e);k={elem:z,kern:Math.max(e.fontMetrics().bigOpSpacing1,e.fontMetrics().bigOpSpacing3-z.depth)}}if(a){var M=he(a,e.havingStyle(h.sub()),e);y={elem:M,kern:Math.max(e.fontMetrics().bigOpSpacing2,e.fontMetrics().bigOpSpacing4-M.height)}}if(k&&y){var T=e.fontMetrics().bigOpSpacing5+y.elem.height+y.elem.depth+y.kern+s.depth+v;S=Lt.makeVList({positionType:\\\"bottom\\\",positionData:T,children:[{type:\\\"kern\\\",size:e.fontMetrics().bigOpSpacing5},{type:\\\"elem\\\",elem:y.elem,marginLeft:-b+\\\"em\\\"},{type:\\\"kern\\\",size:y.kern},{type:\\\"elem\\\",elem:s},{type:\\\"kern\\\",size:k.kern},{type:\\\"elem\\\",elem:k.elem,marginLeft:b+\\\"em\\\"},{type:\\\"kern\\\",size:e.fontMetrics().bigOpSpacing5}]},e)}else if(y){var A=s.height-v;S=Lt.makeVList({positionType:\\\"top\\\",positionData:A,children:[{type:\\\"kern\\\",size:e.fontMetrics().bigOpSpacing5},{type:\\\"elem\\\",elem:y.elem,marginLeft:-b+\\\"em\\\"},{type:\\\"kern\\\",size:y.kern},{type:\\\"elem\\\",elem:s}]},e)}else{if(!k)return s;var B=s.depth+v;S=Lt.makeVList({positionType:\\\"bottom\\\",positionData:B,children:[{type:\\\"elem\\\",elem:s},{type:\\\"kern\\\",size:k.kern},{type:\\\"elem\\\",elem:k.elem,marginLeft:b+\\\"em\\\"},{type:\\\"kern\\\",size:e.fontMetrics().bigOpSpacing5}]},e)}return Lt.makeSpan([\\\"mop\\\",\\\"op-limits\\\"],[S],e)}return v&&(s.style.position=\\\"relative\\\",s.style.top=v+\\\"em\\\"),s},Rr=function(t,e){var r;if(t.symbol)r=new ue(\\\"mo\\\",[fe(t.name,t.mode)]),c.contains(Or,t.name)&&r.setAttribute(\\\"largeop\\\",\\\"false\\\");else if(t.body)r=new ue(\\\"mo\\\",ve(t.body,e));else{r=new ue(\\\"mi\\\",[new de(t.name.slice(1))]);var a=new ue(\\\"mo\\\",[fe(\\\"\\\\u2061\\\",\\\"text\\\")]);r=t.parentIsSupSub?new ue(\\\"mo\\\",[r,a]):ce([r,a])}return r},Lr={\\\"\\\\u220f\\\":\\\"\\\\\\\\prod\\\",\\\"\\\\u2210\\\":\\\"\\\\\\\\coprod\\\",\\\"\\\\u2211\\\":\\\"\\\\\\\\sum\\\",\\\"\\\\u22c0\\\":\\\"\\\\\\\\bigwedge\\\",\\\"\\\\u22c1\\\":\\\"\\\\\\\\bigvee\\\",\\\"\\\\u22c2\\\":\\\"\\\\\\\\bigcap\\\",\\\"\\\\u22c3\\\":\\\"\\\\\\\\bigcup\\\",\\\"\\\\u2a00\\\":\\\"\\\\\\\\bigodot\\\",\\\"\\\\u2a01\\\":\\\"\\\\\\\\bigoplus\\\",\\\"\\\\u2a02\\\":\\\"\\\\\\\\bigotimes\\\",\\\"\\\\u2a04\\\":\\\"\\\\\\\\biguplus\\\",\\\"\\\\u2a06\\\":\\\"\\\\\\\\bigsqcup\\\"};$t({type:\\\"op\\\",names:[\\\"\\\\\\\\coprod\\\",\\\"\\\\\\\\bigvee\\\",\\\"\\\\\\\\bigwedge\\\",\\\"\\\\\\\\biguplus\\\",\\\"\\\\\\\\bigcap\\\",\\\"\\\\\\\\bigcup\\\",\\\"\\\\\\\\intop\\\",\\\"\\\\\\\\prod\\\",\\\"\\\\\\\\sum\\\",\\\"\\\\\\\\bigotimes\\\",\\\"\\\\\\\\bigoplus\\\",\\\"\\\\\\\\bigodot\\\",\\\"\\\\\\\\bigsqcup\\\",\\\"\\\\\\\\smallint\\\",\\\"\\\\u220f\\\",\\\"\\\\u2210\\\",\\\"\\\\u2211\\\",\\\"\\\\u22c0\\\",\\\"\\\\u22c1\\\",\\\"\\\\u22c2\\\",\\\"\\\\u22c3\\\",\\\"\\\\u2a00\\\",\\\"\\\\u2a01\\\",\\\"\\\\u2a02\\\",\\\"\\\\u2a04\\\",\\\"\\\\u2a06\\\"],props:{numArgs:0},handler:function(t,e){var r=t.parser,a=t.funcName;return 1===a.length&&(a=Lr[a]),{type:\\\"op\\\",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:Er,mathmlBuilder:Rr}),$t({type:\\\"op\\\",names:[\\\"\\\\\\\\mathop\\\"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=e[0];return{type:\\\"op\\\",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Kt(a)}},htmlBuilder:Er,mathmlBuilder:Rr});var Hr={\\\"\\\\u222b\\\":\\\"\\\\\\\\int\\\",\\\"\\\\u222c\\\":\\\"\\\\\\\\iint\\\",\\\"\\\\u222d\\\":\\\"\\\\\\\\iiint\\\",\\\"\\\\u222e\\\":\\\"\\\\\\\\oint\\\",\\\"\\\\u222f\\\":\\\"\\\\\\\\oiint\\\",\\\"\\\\u2230\\\":\\\"\\\\\\\\oiiint\\\"};function Pr(t,e,r){for(var a=ae(t,e,!1),n=e.sizeMultiplier/r.sizeMultiplier,o=0;o<a.length;o++){var i=a[o].classes.indexOf(\\\"sizing\\\");i<0?Array.prototype.push.apply(a[o].classes,e.sizingClasses(r)):a[o].classes[i+1]===\\\"reset-size\\\"+e.size&&(a[o].classes[i+1]=\\\"reset-size\\\"+r.size),a[o].height*=n,a[o].depth*=n}return Lt.makeFragment(a)}$t({type:\\\"op\\\",names:[\\\"\\\\\\\\arcsin\\\",\\\"\\\\\\\\arccos\\\",\\\"\\\\\\\\arctan\\\",\\\"\\\\\\\\arctg\\\",\\\"\\\\\\\\arcctg\\\",\\\"\\\\\\\\arg\\\",\\\"\\\\\\\\ch\\\",\\\"\\\\\\\\cos\\\",\\\"\\\\\\\\cosec\\\",\\\"\\\\\\\\cosh\\\",\\\"\\\\\\\\cot\\\",\\\"\\\\\\\\cotg\\\",\\\"\\\\\\\\coth\\\",\\\"\\\\\\\\csc\\\",\\\"\\\\\\\\ctg\\\",\\\"\\\\\\\\cth\\\",\\\"\\\\\\\\deg\\\",\\\"\\\\\\\\dim\\\",\\\"\\\\\\\\exp\\\",\\\"\\\\\\\\hom\\\",\\\"\\\\\\\\ker\\\",\\\"\\\\\\\\lg\\\",\\\"\\\\\\\\ln\\\",\\\"\\\\\\\\log\\\",\\\"\\\\\\\\sec\\\",\\\"\\\\\\\\sin\\\",\\\"\\\\\\\\sinh\\\",\\\"\\\\\\\\sh\\\",\\\"\\\\\\\\tan\\\",\\\"\\\\\\\\tanh\\\",\\\"\\\\\\\\tg\\\",\\\"\\\\\\\\th\\\"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return{type:\\\"op\\\",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Er,mathmlBuilder:Rr}),$t({type:\\\"op\\\",names:[\\\"\\\\\\\\det\\\",\\\"\\\\\\\\gcd\\\",\\\"\\\\\\\\inf\\\",\\\"\\\\\\\\lim\\\",\\\"\\\\\\\\max\\\",\\\"\\\\\\\\min\\\",\\\"\\\\\\\\Pr\\\",\\\"\\\\\\\\sup\\\"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return{type:\\\"op\\\",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Er,mathmlBuilder:Rr}),$t({type:\\\"op\\\",names:[\\\"\\\\\\\\int\\\",\\\"\\\\\\\\iint\\\",\\\"\\\\\\\\iiint\\\",\\\"\\\\\\\\oint\\\",\\\"\\\\\\\\oiint\\\",\\\"\\\\\\\\oiiint\\\",\\\"\\\\u222b\\\",\\\"\\\\u222c\\\",\\\"\\\\u222d\\\",\\\"\\\\u222e\\\",\\\"\\\\u222f\\\",\\\"\\\\u2230\\\"],props:{numArgs:0},handler:function(t){var e=t.parser,r=t.funcName;return 1===r.length&&(r=Hr[r]),{type:\\\"op\\\",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:r}},htmlBuilder:Er,mathmlBuilder:Rr}),$t({type:\\\"operatorname\\\",names:[\\\"\\\\\\\\operatorname\\\"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=e[0];return{type:\\\"operatorname\\\",mode:r.mode,body:Kt(a)}},htmlBuilder:function(t,e){if(t.body.length>0){for(var r=t.body.map(function(t){var e=t.text;return\\\"string\\\"==typeof e?{type:\\\"textord\\\",mode:t.mode,text:e}:t}),a=ae(r,e.withFont(\\\"mathrm\\\"),!0),n=0;n<a.length;n++){var o=a[n];o instanceof E&&(o.text=o.text.replace(/\\\\u2212/,\\\"-\\\").replace(/\\\\u2217/,\\\"*\\\"))}return Lt.makeSpan([\\\"mop\\\"],a,e)}return Lt.makeSpan([\\\"mop\\\"],[],e)},mathmlBuilder:function(t,e){for(var r=ve(t.body,e.withFont(\\\"mathrm\\\")),a=!0,n=0;n<r.length;n++){var o=r[n];if(o instanceof pe.SpaceNode);else if(o instanceof pe.MathNode)switch(o.type){case\\\"mi\\\":case\\\"mn\\\":case\\\"ms\\\":case\\\"mspace\\\":case\\\"mtext\\\":break;case\\\"mo\\\":var i=o.children[0];1===o.children.length&&i instanceof pe.TextNode?i.text=i.text.replace(/\\\\u2212/,\\\"-\\\").replace(/\\\\u2217/,\\\"*\\\"):a=!1;break;default:a=!1}else a=!1}if(a){var s=r.map(function(t){return t.toText()}).join(\\\"\\\");r=[new pe.TextNode(s)]}var h=new pe.MathNode(\\\"mi\\\",r);h.setAttribute(\\\"mathvariant\\\",\\\"normal\\\");var l=new pe.MathNode(\\\"mo\\\",[fe(\\\"\\\\u2061\\\",\\\"text\\\")]);return pe.newDocumentFragment([h,l])}}),Zt({type:\\\"ordgroup\\\",htmlBuilder:function(t,e){return t.semisimple?Lt.makeFragment(ae(t.body,e,!1)):Lt.makeSpan([\\\"mord\\\"],ae(t.body,e,!0),e)},mathmlBuilder:function(t,e){return be(t.body,e)}}),$t({type:\\\"overline\\\",names:[\\\"\\\\\\\\overline\\\"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=e[0];return{type:\\\"overline\\\",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=he(t.body,e.havingCrampedStyle()),a=Lt.makeLineSpan(\\\"overline-line\\\",e),n=Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:r},{type:\\\"kern\\\",size:3*a.height},{type:\\\"elem\\\",elem:a},{type:\\\"kern\\\",size:a.height}]},e);return Lt.makeSpan([\\\"mord\\\",\\\"overline\\\"],[n],e)},mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mo\\\",[new pe.TextNode(\\\"\\\\u203e\\\")]);r.setAttribute(\\\"stretchy\\\",\\\"true\\\");var a=new pe.MathNode(\\\"mover\\\",[ye(t.body,e),r]);return a.setAttribute(\\\"accent\\\",\\\"true\\\"),a}}),$t({type:\\\"phantom\\\",names:[\\\"\\\\\\\\phantom\\\"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:\\\"phantom\\\",mode:r.mode,body:Kt(a)}},htmlBuilder:function(t,e){var r=ae(t.body,e.withPhantom(),!1);return Lt.makeFragment(r)},mathmlBuilder:function(t,e){var r=ve(t.body,e);return new pe.MathNode(\\\"mphantom\\\",r)}}),$t({type:\\\"hphantom\\\",names:[\\\"\\\\\\\\hphantom\\\"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:\\\"hphantom\\\",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=Lt.makeSpan([],[he(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var a=0;a<r.children.length;a++)r.children[a].height=0,r.children[a].depth=0;return r=Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:r}]},e),Lt.makeSpan([\\\"mord\\\"],[r],e)},mathmlBuilder:function(t,e){var r=ve(Kt(t.body),e),a=new pe.MathNode(\\\"mphantom\\\",r),n=new pe.MathNode(\\\"mpadded\\\",[a]);return n.setAttribute(\\\"height\\\",\\\"0px\\\"),n.setAttribute(\\\"depth\\\",\\\"0px\\\"),n}}),$t({type:\\\"vphantom\\\",names:[\\\"\\\\\\\\vphantom\\\"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[0];return{type:\\\"vphantom\\\",mode:r.mode,body:a}},htmlBuilder:function(t,e){var r=Lt.makeSpan([\\\"inner\\\"],[he(t.body,e.withPhantom())]),a=Lt.makeSpan([\\\"fix\\\"],[]);return Lt.makeSpan([\\\"mord\\\",\\\"rlap\\\"],[r,a],e)},mathmlBuilder:function(t,e){var r=ve(Kt(t.body),e),a=new pe.MathNode(\\\"mphantom\\\",r),n=new pe.MathNode(\\\"mpadded\\\",[a]);return n.setAttribute(\\\"width\\\",\\\"0px\\\"),n}});var Dr=[\\\"\\\\\\\\tiny\\\",\\\"\\\\\\\\sixptsize\\\",\\\"\\\\\\\\scriptsize\\\",\\\"\\\\\\\\footnotesize\\\",\\\"\\\\\\\\small\\\",\\\"\\\\\\\\normalsize\\\",\\\"\\\\\\\\large\\\",\\\"\\\\\\\\Large\\\",\\\"\\\\\\\\LARGE\\\",\\\"\\\\\\\\huge\\\",\\\"\\\\\\\\Huge\\\"],Fr=function(t,e){var r=e.havingSize(t.size);return Pr(t.body,r,e)};$t({type:\\\"sizing\\\",names:Dr,props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.breakOnTokenText,a=t.funcName,n=t.parser,o=n.parseExpression(!1,r);return{type:\\\"sizing\\\",mode:n.mode,size:Dr.indexOf(a)+1,body:o}},htmlBuilder:Fr,mathmlBuilder:function(t,e){var r=e.havingSize(t.size),a=ve(t.body,r),n=new pe.MathNode(\\\"mstyle\\\",a);return n.setAttribute(\\\"mathsize\\\",r.sizeMultiplier+\\\"em\\\"),n}}),$t({type:\\\"raisebox\\\",names:[\\\"\\\\\\\\raisebox\\\"],props:{numArgs:2,argTypes:[\\\"size\\\",\\\"text\\\"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=Ht(e[0],\\\"size\\\").value,n=e[1];return{type:\\\"raisebox\\\",mode:r.mode,dy:a,body:n}},htmlBuilder:function(t,e){var r={type:\\\"text\\\",mode:t.mode,body:Kt(t.body),font:\\\"mathrm\\\"},a={type:\\\"sizing\\\",mode:t.mode,body:[r],size:6},n=Fr(a,e),o=zt(t.dy,e);return Lt.makeVList({positionType:\\\"shift\\\",positionData:-o,children:[{type:\\\"elem\\\",elem:n}]},e)},mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mpadded\\\",[ye(t.body,e)]),a=t.dy.number+t.dy.unit;return r.setAttribute(\\\"voffset\\\",a),r}}),$t({type:\\\"rule\\\",names:[\\\"\\\\\\\\rule\\\"],props:{numArgs:2,numOptionalArgs:1,argTypes:[\\\"size\\\",\\\"size\\\",\\\"size\\\"]},handler:function(t,e,r){var a=t.parser,n=r[0],o=Ht(e[0],\\\"size\\\"),i=Ht(e[1],\\\"size\\\");return{type:\\\"rule\\\",mode:a.mode,shift:n&&Ht(n,\\\"size\\\").value,width:o.value,height:i.value}},htmlBuilder:function(t,e){var r=Lt.makeSpan([\\\"mord\\\",\\\"rule\\\"],[],e),a=zt(t.width,e),n=zt(t.height,e),o=t.shift?zt(t.shift,e):0;return r.style.borderRightWidth=a+\\\"em\\\",r.style.borderTopWidth=n+\\\"em\\\",r.style.bottom=o+\\\"em\\\",r.width=a,r.height=n+o,r.depth=-o,r.maxFontSize=1.125*n*e.sizeMultiplier,r},mathmlBuilder:function(t,e){var r=zt(t.width,e),a=zt(t.height,e),n=t.shift?zt(t.shift,e):0,o=e.color&&e.getColor()||\\\"black\\\",i=new pe.MathNode(\\\"mspace\\\");i.setAttribute(\\\"mathbackground\\\",o),i.setAttribute(\\\"width\\\",r+\\\"em\\\"),i.setAttribute(\\\"height\\\",a+\\\"em\\\");var s=new pe.MathNode(\\\"mpadded\\\",[i]);return n>=0?s.setAttribute(\\\"height\\\",\\\"+\\\"+n+\\\"em\\\"):(s.setAttribute(\\\"height\\\",n+\\\"em\\\"),s.setAttribute(\\\"depth\\\",\\\"+\\\"+-n+\\\"em\\\")),s.setAttribute(\\\"voffset\\\",n+\\\"em\\\"),s}}),$t({type:\\\"smash\\\",names:[\\\"\\\\\\\\smash\\\"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(t,e,r){var a=t.parser,n=!1,o=!1,i=r[0]&&Ht(r[0],\\\"ordgroup\\\");if(i)for(var s=\\\"\\\",h=0;h<i.body.length;++h){if(\\\"t\\\"===(s=i.body[h].text))n=!0;else{if(\\\"b\\\"!==s){n=!1,o=!1;break}o=!0}}else n=!0,o=!0;var l=e[0];return{type:\\\"smash\\\",mode:a.mode,body:l,smashHeight:n,smashDepth:o}},htmlBuilder:function(t,e){var r=Lt.makeSpan([],[he(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var a=0;a<r.children.length;a++)r.children[a].height=0;if(t.smashDepth&&(r.depth=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].depth=0;var o=Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:r}]},e);return Lt.makeSpan([\\\"mord\\\"],[o],e)},mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mpadded\\\",[ye(t.body,e)]);return t.smashHeight&&r.setAttribute(\\\"height\\\",\\\"0px\\\"),t.smashDepth&&r.setAttribute(\\\"depth\\\",\\\"0px\\\"),r}}),$t({type:\\\"sqrt\\\",names:[\\\"\\\\\\\\sqrt\\\"],props:{numArgs:1,numOptionalArgs:1},handler:function(t,e,r){var a=t.parser,n=r[0],o=e[0];return{type:\\\"sqrt\\\",mode:a.mode,body:o,index:n}},htmlBuilder:function(t,e){var r=he(t.body,e.havingCrampedStyle());0===r.height&&(r.height=e.fontMetrics().xHeight),r=Lt.wrapFragment(r,e);var a=e.fontMetrics().defaultRuleThickness,n=a;e.style.id<w.TEXT.id&&(n=e.fontMetrics().xHeight);var o=a+n/4,i=r.height+r.depth+o+a,s=Qe(i,e),h=s.span,l=s.ruleWidth,m=s.advanceWidth,c=h.height-l;c>r.height+r.depth+o&&(o=(o+c-r.height-r.depth)/2);var u=h.height-r.height-o-l;r.style.paddingLeft=m+\\\"em\\\";var d=Lt.makeVList({positionType:\\\"firstBaseline\\\",children:[{type:\\\"elem\\\",elem:r,wrapperClasses:[\\\"svg-align\\\"]},{type:\\\"kern\\\",size:-(r.height+u)},{type:\\\"elem\\\",elem:h},{type:\\\"kern\\\",size:l}]},e);if(t.index){var p=e.havingStyle(w.SCRIPTSCRIPT),f=he(t.index,p,e),g=.6*(d.height-d.depth),x=Lt.makeVList({positionType:\\\"shift\\\",positionData:-g,children:[{type:\\\"elem\\\",elem:f}]},e),v=Lt.makeSpan([\\\"root\\\"],[x]);return Lt.makeSpan([\\\"mord\\\",\\\"sqrt\\\"],[v,d],e)}return Lt.makeSpan([\\\"mord\\\",\\\"sqrt\\\"],[d],e)},mathmlBuilder:function(t,e){var r=t.body,a=t.index;return a?new pe.MathNode(\\\"mroot\\\",[ye(r,e),ye(a,e)]):new pe.MathNode(\\\"msqrt\\\",[ye(r,e)])}});var Vr={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT};$t({type:\\\"styling\\\",names:[\\\"\\\\\\\\displaystyle\\\",\\\"\\\\\\\\textstyle\\\",\\\"\\\\\\\\scriptstyle\\\",\\\"\\\\\\\\scriptscriptstyle\\\"],props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.breakOnTokenText,a=t.funcName,n=t.parser,o=n.parseExpression(!0,r),i=a.slice(1,a.length-5);return{type:\\\"styling\\\",mode:n.mode,style:i,body:o}},htmlBuilder:function(t,e){var r=Vr[t.style],a=e.havingStyle(r).withFont(\\\"\\\");return Pr(t.body,a,e)},mathmlBuilder:function(t,e){var r={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT}[t.style],a=e.havingStyle(r),n=ve(t.body,a),o=new pe.MathNode(\\\"mstyle\\\",n),i={display:[\\\"0\\\",\\\"true\\\"],text:[\\\"0\\\",\\\"false\\\"],script:[\\\"1\\\",\\\"false\\\"],scriptscript:[\\\"2\\\",\\\"false\\\"]}[t.style];return o.setAttribute(\\\"scriptlevel\\\",i[0]),o.setAttribute(\\\"displaystyle\\\",i[1]),o}});Zt({type:\\\"supsub\\\",htmlBuilder:function(t,e){var r=function(t,e){var r=t.base;return r?\\\"op\\\"===r.type?r.limits&&(e.style.size===w.DISPLAY.size||r.alwaysHandleSupSub)?Er:null:\\\"accent\\\"===r.type?c.isCharacterBox(r.base)?Ce:null:\\\"horizBrace\\\"===r.type&&!t.sub===r.isOver?Nr:null:null}(t,e);if(r)return r(t,e);var a,n,o,i=t.base,s=t.sup,h=t.sub,l=he(i,e),m=e.fontMetrics(),u=0,d=0,p=i&&c.isCharacterBox(i);if(s){var f=e.havingStyle(e.style.sup());a=he(s,f,e),p||(u=l.height-f.fontMetrics().supDrop*f.sizeMultiplier/e.sizeMultiplier)}if(h){var g=e.havingStyle(e.style.sub());n=he(h,g,e),p||(d=l.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}o=e.style===w.DISPLAY?m.sup1:e.style.cramped?m.sup3:m.sup2;var x,v=e.sizeMultiplier,b=.5/m.ptPerEm/v+\\\"em\\\",y=null;if(n){var k=t.base&&\\\"op\\\"===t.base.type&&t.base.name&&(\\\"\\\\\\\\oiint\\\"===t.base.name||\\\"\\\\\\\\oiiint\\\"===t.base.name);(l instanceof E||k)&&(y=-l.italic+\\\"em\\\")}if(a&&n){u=Math.max(u,o,a.depth+.25*m.xHeight),d=Math.max(d,m.sub2);var S=4*m.defaultRuleThickness;if(u-a.depth-(n.height-d)<S){d=S-(u-a.depth)+n.height;var z=.8*m.xHeight-(u-a.depth);z>0&&(u+=z,d-=z)}var M=[{type:\\\"elem\\\",elem:n,shift:d,marginRight:b,marginLeft:y},{type:\\\"elem\\\",elem:a,shift:-u,marginRight:b}];x=Lt.makeVList({positionType:\\\"individualShift\\\",children:M},e)}else if(n){d=Math.max(d,m.sub1,n.height-.8*m.xHeight);var T=[{type:\\\"elem\\\",elem:n,marginLeft:y,marginRight:b}];x=Lt.makeVList({positionType:\\\"shift\\\",positionData:d,children:T},e)}else{if(!a)throw new Error(\\\"supsub must have either sup or sub.\\\");u=Math.max(u,o,a.depth+.25*m.xHeight),x=Lt.makeVList({positionType:\\\"shift\\\",positionData:-u,children:[{type:\\\"elem\\\",elem:a,marginRight:b}]},e)}var A=ie(l,\\\"right\\\")||\\\"mord\\\";return Lt.makeSpan([A],[l,Lt.makeSpan([\\\"msupsub\\\"],[x])],e)},mathmlBuilder:function(t,e){var r,a=!1,n=Pt(t.base,\\\"horizBrace\\\");n&&!!t.sup===n.isOver&&(a=!0,r=n.isOver),t.base&&\\\"op\\\"===t.base.type&&(t.base.parentIsSupSub=!0);var o,i=[ye(t.base,e)];if(t.sub&&i.push(ye(t.sub,e)),t.sup&&i.push(ye(t.sup,e)),a)o=r?\\\"mover\\\":\\\"munder\\\";else if(t.sub)if(t.sup){var s=t.base;o=s&&\\\"op\\\"===s.type&&s.limits&&e.style===w.DISPLAY?\\\"munderover\\\":\\\"msubsup\\\"}else{var h=t.base;o=h&&\\\"op\\\"===h.type&&h.limits&&(e.style===w.DISPLAY||h.alwaysHandleSupSub)?\\\"munder\\\":\\\"msub\\\"}else{var l=t.base;o=l&&\\\"op\\\"===l.type&&l.limits&&(e.style===w.DISPLAY||l.alwaysHandleSupSub)?\\\"mover\\\":\\\"msup\\\"}return new pe.MathNode(o,i)}}),Zt({type:\\\"atom\\\",htmlBuilder:function(t,e){return Lt.mathsym(t.text,t.mode,e,[\\\"m\\\"+t.family])},mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mo\\\",[fe(t.text,t.mode)]);if(\\\"bin\\\"===t.family){var a=xe(t,e);\\\"bold-italic\\\"===a&&r.setAttribute(\\\"mathvariant\\\",a)}else\\\"punct\\\"===t.family?r.setAttribute(\\\"separator\\\",\\\"true\\\"):\\\"open\\\"!==t.family&&\\\"close\\\"!==t.family||r.setAttribute(\\\"stretchy\\\",\\\"false\\\");return r}});var Ur={mi:\\\"italic\\\",mn:\\\"normal\\\",mtext:\\\"normal\\\"};Zt({type:\\\"mathord\\\",htmlBuilder:function(t,e){return Lt.makeOrd(t,e,\\\"mathord\\\")},mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mi\\\",[fe(t.text,t.mode,e)]),a=xe(t,e)||\\\"italic\\\";return a!==Ur[r.type]&&r.setAttribute(\\\"mathvariant\\\",a),r}}),Zt({type:\\\"textord\\\",htmlBuilder:function(t,e){return Lt.makeOrd(t,e,\\\"textord\\\")},mathmlBuilder:function(t,e){var r,a=fe(t.text,t.mode,e),n=xe(t,e)||\\\"normal\\\";return r=\\\"text\\\"===t.mode?new pe.MathNode(\\\"mtext\\\",[a]):/[0-9]/.test(t.text)?new pe.MathNode(\\\"mn\\\",[a]):\\\"\\\\\\\\prime\\\"===t.text?new pe.MathNode(\\\"mo\\\",[a]):new pe.MathNode(\\\"mi\\\",[a]),n!==Ur[r.type]&&r.setAttribute(\\\"mathvariant\\\",n),r}});var Gr={\\\"\\\\\\\\nobreak\\\":\\\"nobreak\\\",\\\"\\\\\\\\allowbreak\\\":\\\"allowbreak\\\"},Xr={\\\" \\\":{},\\\"\\\\\\\\ \\\":{},\\\"~\\\":{className:\\\"nobreak\\\"},\\\"\\\\\\\\space\\\":{},\\\"\\\\\\\\nobreakspace\\\":{className:\\\"nobreak\\\"}};Zt({type:\\\"spacing\\\",htmlBuilder:function(t,e){if(Xr.hasOwnProperty(t.text)){var r=Xr[t.text].className||\\\"\\\";if(\\\"text\\\"===t.mode){var a=Lt.makeOrd(t,e,\\\"textord\\\");return a.classes.push(r),a}return Lt.makeSpan([\\\"mspace\\\",r],[Lt.mathsym(t.text,t.mode,e)],e)}if(Gr.hasOwnProperty(t.text))return Lt.makeSpan([\\\"mspace\\\",Gr[t.text]],[],e);throw new i('Unknown type of space \\\"'+t.text+'\\\"')},mathmlBuilder:function(t,e){if(!Xr.hasOwnProperty(t.text)){if(Gr.hasOwnProperty(t.text))return new pe.MathNode(\\\"mspace\\\");throw new i('Unknown type of space \\\"'+t.text+'\\\"')}return new pe.MathNode(\\\"mtext\\\",[new pe.TextNode(\\\"\\\\xa0\\\")])}});var Yr=function(){var t=new pe.MathNode(\\\"mtd\\\",[]);return t.setAttribute(\\\"width\\\",\\\"50%\\\"),t};Zt({type:\\\"tag\\\",mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mtable\\\",[new pe.MathNode(\\\"mtr\\\",[Yr(),new pe.MathNode(\\\"mtd\\\",[be(t.body,e)]),Yr(),new pe.MathNode(\\\"mtd\\\",[be(t.tag,e)])])]);return r.setAttribute(\\\"width\\\",\\\"100%\\\"),r}});var _r={\\\"\\\\\\\\text\\\":void 0,\\\"\\\\\\\\textrm\\\":\\\"textrm\\\",\\\"\\\\\\\\textsf\\\":\\\"textsf\\\",\\\"\\\\\\\\texttt\\\":\\\"texttt\\\",\\\"\\\\\\\\textnormal\\\":\\\"textrm\\\"},Wr={\\\"\\\\\\\\textbf\\\":\\\"textbf\\\",\\\"\\\\\\\\textmd\\\":\\\"textmd\\\"},jr={\\\"\\\\\\\\textit\\\":\\\"textit\\\",\\\"\\\\\\\\textup\\\":\\\"textup\\\"},$r=function(t,e){var r=t.font;return r?_r[r]?e.withTextFontFamily(_r[r]):Wr[r]?e.withTextFontWeight(Wr[r]):e.withTextFontShape(jr[r]):e};$t({type:\\\"text\\\",names:[\\\"\\\\\\\\text\\\",\\\"\\\\\\\\textrm\\\",\\\"\\\\\\\\textsf\\\",\\\"\\\\\\\\texttt\\\",\\\"\\\\\\\\textnormal\\\",\\\"\\\\\\\\textbf\\\",\\\"\\\\\\\\textmd\\\",\\\"\\\\\\\\textit\\\",\\\"\\\\\\\\textup\\\"],props:{numArgs:1,argTypes:[\\\"text\\\"],greediness:2,allowedInText:!0,consumeMode:\\\"text\\\"},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:\\\"text\\\",mode:r.mode,body:Kt(n),font:a}},htmlBuilder:function(t,e){var r=$r(t,e),a=ae(t.body,r,!0);return Lt.makeSpan([\\\"mord\\\",\\\"text\\\"],Lt.tryCombineChars(a),r)},mathmlBuilder:function(t,e){var r=$r(t,e);return be(t.body,r)}}),$t({type:\\\"underline\\\",names:[\\\"\\\\\\\\underline\\\"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){return{type:\\\"underline\\\",mode:t.parser.mode,body:e[0]}},htmlBuilder:function(t,e){var r=he(t.body,e),a=Lt.makeLineSpan(\\\"underline-line\\\",e),n=Lt.makeVList({positionType:\\\"top\\\",positionData:r.height,children:[{type:\\\"kern\\\",size:a.height},{type:\\\"elem\\\",elem:a},{type:\\\"kern\\\",size:3*a.height},{type:\\\"elem\\\",elem:r}]},e);return Lt.makeSpan([\\\"mord\\\",\\\"underline\\\"],[n],e)},mathmlBuilder:function(t,e){var r=new pe.MathNode(\\\"mo\\\",[new pe.TextNode(\\\"\\\\u203e\\\")]);r.setAttribute(\\\"stretchy\\\",\\\"true\\\");var a=new pe.MathNode(\\\"munder\\\",[ye(t.body,e),r]);return a.setAttribute(\\\"accentunder\\\",\\\"true\\\"),a}}),$t({type:\\\"verb\\\",names:[\\\"\\\\\\\\verb\\\"],props:{numArgs:0,allowedInText:!0},handler:function(t,e,r){throw new i(\\\"\\\\\\\\verb ended by end of line instead of matching delimiter\\\")},htmlBuilder:function(t,e){for(var r=Zr(t),a=[],n=e.havingStyle(e.style.text()),o=0;o<r.length;o++){var i=r[o];\\\"~\\\"===i&&(i=\\\"\\\\\\\\textasciitilde\\\"),a.push(Lt.makeSymbol(i,\\\"Typewriter-Regular\\\",t.mode,n,[\\\"mord\\\",\\\"texttt\\\"]))}return Lt.makeSpan([\\\"mord\\\",\\\"text\\\"].concat(n.sizingClasses(e)),Lt.tryCombineChars(a),n)},mathmlBuilder:function(t,e){var r=new pe.TextNode(Zr(t)),a=new pe.MathNode(\\\"mtext\\\",[r]);return a.setAttribute(\\\"mathvariant\\\",\\\"monospace\\\"),a}});var Zr=function(t){return t.body.replace(/ /g,t.star?\\\"\\\\u2423\\\":\\\"\\\\xa0\\\")},Kr=_t,Jr=new RegExp(\\\"^(\\\\\\\\\\\\\\\\[a-zA-Z@]+)[ \\\\r\\\\n\\\\t]*$\\\"),Qr=new RegExp(\\\"[\\\\u0300-\\\\u036f]+$\\\"),ta=\\\"([ \\\\r\\\\n\\\\t]+)|([!-\\\\\\\\[\\\\\\\\]-\\\\u2027\\\\u202a-\\\\ud7ff\\\\uf900-\\\\uffff][\\\\u0300-\\\\u036f]*|[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff][\\\\u0300-\\\\u036f]*|\\\\\\\\\\\\\\\\verb\\\\\\\\*([^]).*?\\\\\\\\3|\\\\\\\\\\\\\\\\verb([^*a-zA-Z]).*?\\\\\\\\4|\\\\\\\\\\\\\\\\[a-zA-Z@]+[ \\\\r\\\\n\\\\t]*|\\\\\\\\\\\\\\\\[^\\\\ud800-\\\\udfff])\\\",ea=function(){function t(t,e){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=t,this.settings=e,this.tokenRegex=new RegExp(ta,\\\"g\\\"),this.catcodes={\\\"%\\\":14}}var e=t.prototype;return e.setCatcode=function(t,e){this.catcodes[t]=e},e.lex=function(){var t=this.input,e=this.tokenRegex.lastIndex;if(e===t.length)return new n(\\\"EOF\\\",new a(this,e,e));var r=this.tokenRegex.exec(t);if(null===r||r.index!==e)throw new i(\\\"Unexpected character: '\\\"+t[e]+\\\"'\\\",new n(t[e],new a(this,e,e+1)));var o=r[2]||\\\" \\\";if(14===this.catcodes[o]){var s=t.indexOf(\\\"\\\\n\\\",this.tokenRegex.lastIndex);return-1===s?(this.tokenRegex.lastIndex=t.length,this.settings.reportNonstrict(\\\"commentAtEnd\\\",\\\"% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)\\\")):this.tokenRegex.lastIndex=s+1,this.lex()}var h=o.match(Jr);return h&&(o=h[1]),new n(o,new a(this,e,this.tokenRegex.lastIndex))},t}(),ra=function(){function t(t,e){void 0===t&&(t={}),void 0===e&&(e={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=e,this.builtins=t,this.undefStack=[]}var e=t.prototype;return e.beginGroup=function(){this.undefStack.push({})},e.endGroup=function(){if(0===this.undefStack.length)throw new i(\\\"Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug\\\");var t=this.undefStack.pop();for(var e in t)t.hasOwnProperty(e)&&(void 0===t[e]?delete this.current[e]:this.current[e]=t[e])},e.has=function(t){return this.current.hasOwnProperty(t)||this.builtins.hasOwnProperty(t)},e.get=function(t){return this.current.hasOwnProperty(t)?this.current[t]:this.builtins[t]},e.set=function(t,e,r){if(void 0===r&&(r=!1),r){for(var a=0;a<this.undefStack.length;a++)delete this.undefStack[a][t];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][t]=e)}else{var n=this.undefStack[this.undefStack.length-1];n&&!n.hasOwnProperty(t)&&(n[t]=this.current[t])}this.current[t]=e},t}(),aa={},na=aa;function oa(t,e){aa[t]=e}oa(\\\"\\\\\\\\@firstoftwo\\\",function(t){return{tokens:t.consumeArgs(2)[0],numArgs:0}}),oa(\\\"\\\\\\\\@secondoftwo\\\",function(t){return{tokens:t.consumeArgs(2)[1],numArgs:0}}),oa(\\\"\\\\\\\\@ifnextchar\\\",function(t){var e=t.consumeArgs(3),r=t.future();return 1===e[0].length&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}}),oa(\\\"\\\\\\\\@ifstar\\\",\\\"\\\\\\\\@ifnextchar *{\\\\\\\\@firstoftwo{#1}}\\\"),oa(\\\"\\\\\\\\TextOrMath\\\",function(t){var e=t.consumeArgs(2);return\\\"text\\\"===t.mode?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var ia={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};oa(\\\"\\\\\\\\char\\\",function(t){var e,r=t.popToken(),a=\\\"\\\";if(\\\"'\\\"===r.text)e=8,r=t.popToken();else if('\\\"'===r.text)e=16,r=t.popToken();else if(\\\"`\\\"===r.text)if(\\\"\\\\\\\\\\\"===(r=t.popToken()).text[0])a=r.text.charCodeAt(1);else{if(\\\"EOF\\\"===r.text)throw new i(\\\"\\\\\\\\char` missing argument\\\");a=r.text.charCodeAt(0)}else e=10;if(e){if(null==(a=ia[r.text])||a>=e)throw new i(\\\"Invalid base-\\\"+e+\\\" digit \\\"+r.text);for(var n;null!=(n=ia[t.future().text])&&n<e;)a*=e,a+=n,t.popToken()}return\\\"\\\\\\\\@char{\\\"+a+\\\"}\\\"});var sa=function(t,e){var r=t.consumeArgs(1)[0];if(1!==r.length)throw new i(\\\"\\\\\\\\gdef's first argument must be a macro name\\\");var a=r[0].text,n=0;for(r=t.consumeArgs(1)[0];1===r.length&&\\\"#\\\"===r[0].text;){if(1!==(r=t.consumeArgs(1)[0]).length)throw new i('Invalid argument number length \\\"'+r.length+'\\\"');if(!/^[1-9]$/.test(r[0].text))throw new i('Invalid argument number \\\"'+r[0].text+'\\\"');if(n++,parseInt(r[0].text)!==n)throw new i('Argument number \\\"'+r[0].text+'\\\" out of order');r=t.consumeArgs(1)[0]}return t.macros.set(a,{tokens:r,numArgs:n},e),\\\"\\\"};oa(\\\"\\\\\\\\gdef\\\",function(t){return sa(t,!0)}),oa(\\\"\\\\\\\\def\\\",function(t){return sa(t,!1)}),oa(\\\"\\\\\\\\global\\\",function(t){var e=t.consumeArgs(1)[0];if(1!==e.length)throw new i(\\\"Invalid command after \\\\\\\\global\\\");var r=e[0].text;if(\\\"\\\\\\\\def\\\"===r)return sa(t,!0);throw new i(\\\"Invalid command '\\\"+r+\\\"' after \\\\\\\\global\\\")});var ha=function(t,e,r){var a=t.consumeArgs(1)[0];if(1!==a.length)throw new i(\\\"\\\\\\\\newcommand's first argument must be a macro name\\\");var n=a[0].text,o=t.isDefined(n);if(o&&!e)throw new i(\\\"\\\\\\\\newcommand{\\\"+n+\\\"} attempting to redefine \\\"+n+\\\"; use \\\\\\\\renewcommand\\\");if(!o&&!r)throw new i(\\\"\\\\\\\\renewcommand{\\\"+n+\\\"} when command \\\"+n+\\\" does not yet exist; use \\\\\\\\newcommand\\\");var s=0;if(1===(a=t.consumeArgs(1)[0]).length&&\\\"[\\\"===a[0].text){for(var h=\\\"\\\",l=t.expandNextToken();\\\"]\\\"!==l.text&&\\\"EOF\\\"!==l.text;)h+=l.text,l=t.expandNextToken();if(!h.match(/^\\\\s*[0-9]+\\\\s*$/))throw new i(\\\"Invalid number of arguments: \\\"+h);s=parseInt(h),a=t.consumeArgs(1)[0]}return t.macros.set(n,{tokens:a,numArgs:s}),\\\"\\\"};oa(\\\"\\\\\\\\newcommand\\\",function(t){return ha(t,!1,!0)}),oa(\\\"\\\\\\\\renewcommand\\\",function(t){return ha(t,!0,!1)}),oa(\\\"\\\\\\\\providecommand\\\",function(t){return ha(t,!0,!0)}),oa(\\\"\\\\\\\\bgroup\\\",\\\"{\\\"),oa(\\\"\\\\\\\\egroup\\\",\\\"}\\\"),oa(\\\"\\\\\\\\lq\\\",\\\"`\\\"),oa(\\\"\\\\\\\\rq\\\",\\\"'\\\"),oa(\\\"\\\\\\\\aa\\\",\\\"\\\\\\\\r a\\\"),oa(\\\"\\\\\\\\AA\\\",\\\"\\\\\\\\r A\\\"),oa(\\\"\\\\\\\\textcopyright\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\textcircled{c}}{\\\\\\\\char`\\\\xa9}\\\"),oa(\\\"\\\\\\\\copyright\\\",\\\"\\\\\\\\TextOrMath{\\\\\\\\textcopyright}{\\\\\\\\text{\\\\\\\\textcopyright}}\\\"),oa(\\\"\\\\\\\\textregistered\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\textcircled{\\\\\\\\scriptsize R}}{\\\\\\\\char`\\\\xae}\\\"),oa(\\\"\\\\u212c\\\",\\\"\\\\\\\\mathscr{B}\\\"),oa(\\\"\\\\u2130\\\",\\\"\\\\\\\\mathscr{E}\\\"),oa(\\\"\\\\u2131\\\",\\\"\\\\\\\\mathscr{F}\\\"),oa(\\\"\\\\u210b\\\",\\\"\\\\\\\\mathscr{H}\\\"),oa(\\\"\\\\u2110\\\",\\\"\\\\\\\\mathscr{I}\\\"),oa(\\\"\\\\u2112\\\",\\\"\\\\\\\\mathscr{L}\\\"),oa(\\\"\\\\u2133\\\",\\\"\\\\\\\\mathscr{M}\\\"),oa(\\\"\\\\u211b\\\",\\\"\\\\\\\\mathscr{R}\\\"),oa(\\\"\\\\u212d\\\",\\\"\\\\\\\\mathfrak{C}\\\"),oa(\\\"\\\\u210c\\\",\\\"\\\\\\\\mathfrak{H}\\\"),oa(\\\"\\\\u2128\\\",\\\"\\\\\\\\mathfrak{Z}\\\"),oa(\\\"\\\\\\\\Bbbk\\\",\\\"\\\\\\\\Bbb{k}\\\"),oa(\\\"\\\\xb7\\\",\\\"\\\\\\\\cdotp\\\"),oa(\\\"\\\\\\\\llap\\\",\\\"\\\\\\\\mathllap{\\\\\\\\textrm{#1}}\\\"),oa(\\\"\\\\\\\\rlap\\\",\\\"\\\\\\\\mathrlap{\\\\\\\\textrm{#1}}\\\"),oa(\\\"\\\\\\\\clap\\\",\\\"\\\\\\\\mathclap{\\\\\\\\textrm{#1}}\\\"),oa(\\\"\\\\\\\\not\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\mathrlap\\\\\\\\@not}}{\\\\\\\\char\\\"338}'),oa(\\\"\\\\\\\\neq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\not=}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u2260}}\\\"),oa(\\\"\\\\\\\\ne\\\",\\\"\\\\\\\\neq\\\"),oa(\\\"\\\\u2260\\\",\\\"\\\\\\\\neq\\\"),oa(\\\"\\\\\\\\notin\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\mathrel{{\\\\\\\\in}\\\\\\\\mathllap{/\\\\\\\\mskip1mu}}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u2209}}\\\"),oa(\\\"\\\\u2209\\\",\\\"\\\\\\\\notin\\\"),oa(\\\"\\\\u2258\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\mathrel{=\\\\\\\\kern{-1em}\\\\\\\\raisebox{0.4em}{$\\\\\\\\scriptsize\\\\\\\\frown$}}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u2258}}\\\"),oa(\\\"\\\\u2259\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny\\\\\\\\wedge}{=}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u2258}}\\\"),oa(\\\"\\\\u225a\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny\\\\\\\\vee}{=}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225a}}\\\"),oa(\\\"\\\\u225b\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\scriptsize\\\\\\\\star}{=}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225b}}\\\"),oa(\\\"\\\\u225d\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny\\\\\\\\mathrm{def}}{=}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225d}}\\\"),oa(\\\"\\\\u225e\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny\\\\\\\\mathrm{m}}{=}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225e}}\\\"),oa(\\\"\\\\u225f\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny?}{=}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225f}}\\\"),oa(\\\"\\\\u27c2\\\",\\\"\\\\\\\\perp\\\"),oa(\\\"\\\\u203c\\\",\\\"\\\\\\\\mathclose{!\\\\\\\\mkern-0.8mu!}\\\"),oa(\\\"\\\\u220c\\\",\\\"\\\\\\\\notni\\\"),oa(\\\"\\\\u231c\\\",\\\"\\\\\\\\ulcorner\\\"),oa(\\\"\\\\u231d\\\",\\\"\\\\\\\\urcorner\\\"),oa(\\\"\\\\u231e\\\",\\\"\\\\\\\\llcorner\\\"),oa(\\\"\\\\u231f\\\",\\\"\\\\\\\\lrcorner\\\"),oa(\\\"\\\\xa9\\\",\\\"\\\\\\\\copyright\\\"),oa(\\\"\\\\xae\\\",\\\"\\\\\\\\textregistered\\\"),oa(\\\"\\\\ufe0f\\\",\\\"\\\\\\\\textregistered\\\"),oa(\\\"\\\\\\\\vdots\\\",\\\"\\\\\\\\mathord{\\\\\\\\varvdots\\\\\\\\rule{0pt}{15pt}}\\\"),oa(\\\"\\\\u22ee\\\",\\\"\\\\\\\\vdots\\\"),oa(\\\"\\\\\\\\varGamma\\\",\\\"\\\\\\\\mathit{\\\\\\\\Gamma}\\\"),oa(\\\"\\\\\\\\varDelta\\\",\\\"\\\\\\\\mathit{\\\\\\\\Delta}\\\"),oa(\\\"\\\\\\\\varTheta\\\",\\\"\\\\\\\\mathit{\\\\\\\\Theta}\\\"),oa(\\\"\\\\\\\\varLambda\\\",\\\"\\\\\\\\mathit{\\\\\\\\Lambda}\\\"),oa(\\\"\\\\\\\\varXi\\\",\\\"\\\\\\\\mathit{\\\\\\\\Xi}\\\"),oa(\\\"\\\\\\\\varPi\\\",\\\"\\\\\\\\mathit{\\\\\\\\Pi}\\\"),oa(\\\"\\\\\\\\varSigma\\\",\\\"\\\\\\\\mathit{\\\\\\\\Sigma}\\\"),oa(\\\"\\\\\\\\varUpsilon\\\",\\\"\\\\\\\\mathit{\\\\\\\\Upsilon}\\\"),oa(\\\"\\\\\\\\varPhi\\\",\\\"\\\\\\\\mathit{\\\\\\\\Phi}\\\"),oa(\\\"\\\\\\\\varPsi\\\",\\\"\\\\\\\\mathit{\\\\\\\\Psi}\\\"),oa(\\\"\\\\\\\\varOmega\\\",\\\"\\\\\\\\mathit{\\\\\\\\Omega}\\\"),oa(\\\"\\\\\\\\colon\\\",\\\"\\\\\\\\nobreak\\\\\\\\mskip2mu\\\\\\\\mathpunct{}\\\\\\\\mathchoice{\\\\\\\\mkern-3mu}{\\\\\\\\mkern-3mu}{}{}{:}\\\\\\\\mskip6mu\\\"),oa(\\\"\\\\\\\\boxed\\\",\\\"\\\\\\\\fbox{$\\\\\\\\displaystyle{#1}$}\\\"),oa(\\\"\\\\\\\\iff\\\",\\\"\\\\\\\\DOTSB\\\\\\\\;\\\\\\\\Longleftrightarrow\\\\\\\\;\\\"),oa(\\\"\\\\\\\\implies\\\",\\\"\\\\\\\\DOTSB\\\\\\\\;\\\\\\\\Longrightarrow\\\\\\\\;\\\"),oa(\\\"\\\\\\\\impliedby\\\",\\\"\\\\\\\\DOTSB\\\\\\\\;\\\\\\\\Longleftarrow\\\\\\\\;\\\");var la={\\\",\\\":\\\"\\\\\\\\dotsc\\\",\\\"\\\\\\\\not\\\":\\\"\\\\\\\\dotsb\\\",\\\"+\\\":\\\"\\\\\\\\dotsb\\\",\\\"=\\\":\\\"\\\\\\\\dotsb\\\",\\\"<\\\":\\\"\\\\\\\\dotsb\\\",\\\">\\\":\\\"\\\\\\\\dotsb\\\",\\\"-\\\":\\\"\\\\\\\\dotsb\\\",\\\"*\\\":\\\"\\\\\\\\dotsb\\\",\\\":\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\DOTSB\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\coprod\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\bigvee\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\bigwedge\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\biguplus\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\bigcap\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\bigcup\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\prod\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\sum\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\bigotimes\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\bigoplus\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\bigodot\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\bigsqcup\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\And\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\longrightarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\Longrightarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\longleftarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\Longleftarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\longleftrightarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\Longleftrightarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\mapsto\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\longmapsto\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\hookrightarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\doteq\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\mathbin\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\mathrel\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\relbar\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\Relbar\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\xrightarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\xleftarrow\\\":\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\DOTSI\\\":\\\"\\\\\\\\dotsi\\\",\\\"\\\\\\\\int\\\":\\\"\\\\\\\\dotsi\\\",\\\"\\\\\\\\oint\\\":\\\"\\\\\\\\dotsi\\\",\\\"\\\\\\\\iint\\\":\\\"\\\\\\\\dotsi\\\",\\\"\\\\\\\\iiint\\\":\\\"\\\\\\\\dotsi\\\",\\\"\\\\\\\\iiiint\\\":\\\"\\\\\\\\dotsi\\\",\\\"\\\\\\\\idotsint\\\":\\\"\\\\\\\\dotsi\\\",\\\"\\\\\\\\DOTSX\\\":\\\"\\\\\\\\dotsx\\\"};oa(\\\"\\\\\\\\dots\\\",function(t){var e=\\\"\\\\\\\\dotso\\\",r=t.expandAfterFuture().text;return r in la?e=la[r]:\\\"\\\\\\\\not\\\"===r.substr(0,4)?e=\\\"\\\\\\\\dotsb\\\":r in _.math&&c.contains([\\\"bin\\\",\\\"rel\\\"],_.math[r].group)&&(e=\\\"\\\\\\\\dotsb\\\"),e});var ma={\\\")\\\":!0,\\\"]\\\":!0,\\\"\\\\\\\\rbrack\\\":!0,\\\"\\\\\\\\}\\\":!0,\\\"\\\\\\\\rbrace\\\":!0,\\\"\\\\\\\\rangle\\\":!0,\\\"\\\\\\\\rceil\\\":!0,\\\"\\\\\\\\rfloor\\\":!0,\\\"\\\\\\\\rgroup\\\":!0,\\\"\\\\\\\\rmoustache\\\":!0,\\\"\\\\\\\\right\\\":!0,\\\"\\\\\\\\bigr\\\":!0,\\\"\\\\\\\\biggr\\\":!0,\\\"\\\\\\\\Bigr\\\":!0,\\\"\\\\\\\\Biggr\\\":!0,$:!0,\\\";\\\":!0,\\\".\\\":!0,\\\",\\\":!0};oa(\\\"\\\\\\\\dotso\\\",function(t){return t.future().text in ma?\\\"\\\\\\\\ldots\\\\\\\\,\\\":\\\"\\\\\\\\ldots\\\"}),oa(\\\"\\\\\\\\dotsc\\\",function(t){var e=t.future().text;return e in ma&&\\\",\\\"!==e?\\\"\\\\\\\\ldots\\\\\\\\,\\\":\\\"\\\\\\\\ldots\\\"}),oa(\\\"\\\\\\\\cdots\\\",function(t){return t.future().text in ma?\\\"\\\\\\\\@cdots\\\\\\\\,\\\":\\\"\\\\\\\\@cdots\\\"}),oa(\\\"\\\\\\\\dotsb\\\",\\\"\\\\\\\\cdots\\\"),oa(\\\"\\\\\\\\dotsm\\\",\\\"\\\\\\\\cdots\\\"),oa(\\\"\\\\\\\\dotsi\\\",\\\"\\\\\\\\!\\\\\\\\cdots\\\"),oa(\\\"\\\\\\\\dotsx\\\",\\\"\\\\\\\\ldots\\\\\\\\,\\\"),oa(\\\"\\\\\\\\DOTSI\\\",\\\"\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\DOTSB\\\",\\\"\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\DOTSX\\\",\\\"\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\tmspace\\\",\\\"\\\\\\\\TextOrMath{\\\\\\\\kern#1#3}{\\\\\\\\mskip#1#2}\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\,\\\",\\\"\\\\\\\\tmspace+{3mu}{.1667em}\\\"),oa(\\\"\\\\\\\\thinspace\\\",\\\"\\\\\\\\,\\\"),oa(\\\"\\\\\\\\>\\\",\\\"\\\\\\\\mskip{4mu}\\\"),oa(\\\"\\\\\\\\:\\\",\\\"\\\\\\\\tmspace+{4mu}{.2222em}\\\"),oa(\\\"\\\\\\\\medspace\\\",\\\"\\\\\\\\:\\\"),oa(\\\"\\\\\\\\;\\\",\\\"\\\\\\\\tmspace+{5mu}{.2777em}\\\"),oa(\\\"\\\\\\\\thickspace\\\",\\\"\\\\\\\\;\\\"),oa(\\\"\\\\\\\\!\\\",\\\"\\\\\\\\tmspace-{3mu}{.1667em}\\\"),oa(\\\"\\\\\\\\negthinspace\\\",\\\"\\\\\\\\!\\\"),oa(\\\"\\\\\\\\negmedspace\\\",\\\"\\\\\\\\tmspace-{4mu}{.2222em}\\\"),oa(\\\"\\\\\\\\negthickspace\\\",\\\"\\\\\\\\tmspace-{5mu}{.277em}\\\"),oa(\\\"\\\\\\\\enspace\\\",\\\"\\\\\\\\kern.5em \\\"),oa(\\\"\\\\\\\\enskip\\\",\\\"\\\\\\\\hskip.5em\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\quad\\\",\\\"\\\\\\\\hskip1em\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\qquad\\\",\\\"\\\\\\\\hskip2em\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\tag\\\",\\\"\\\\\\\\@ifstar\\\\\\\\tag@literal\\\\\\\\tag@paren\\\"),oa(\\\"\\\\\\\\tag@paren\\\",\\\"\\\\\\\\tag@literal{({#1})}\\\"),oa(\\\"\\\\\\\\tag@literal\\\",function(t){if(t.macros.get(\\\"\\\\\\\\df@tag\\\"))throw new i(\\\"Multiple \\\\\\\\tag\\\");return\\\"\\\\\\\\gdef\\\\\\\\df@tag{\\\\\\\\text{#1}}\\\"}),oa(\\\"\\\\\\\\bmod\\\",\\\"\\\\\\\\mathchoice{\\\\\\\\mskip1mu}{\\\\\\\\mskip1mu}{\\\\\\\\mskip5mu}{\\\\\\\\mskip5mu}\\\\\\\\mathbin{\\\\\\\\rm mod}\\\\\\\\mathchoice{\\\\\\\\mskip1mu}{\\\\\\\\mskip1mu}{\\\\\\\\mskip5mu}{\\\\\\\\mskip5mu}\\\"),oa(\\\"\\\\\\\\pod\\\",\\\"\\\\\\\\allowbreak\\\\\\\\mathchoice{\\\\\\\\mkern18mu}{\\\\\\\\mkern8mu}{\\\\\\\\mkern8mu}{\\\\\\\\mkern8mu}(#1)\\\"),oa(\\\"\\\\\\\\pmod\\\",\\\"\\\\\\\\pod{{\\\\\\\\rm mod}\\\\\\\\mkern6mu#1}\\\"),oa(\\\"\\\\\\\\mod\\\",\\\"\\\\\\\\allowbreak\\\\\\\\mathchoice{\\\\\\\\mkern18mu}{\\\\\\\\mkern12mu}{\\\\\\\\mkern12mu}{\\\\\\\\mkern12mu}{\\\\\\\\rm mod}\\\\\\\\,\\\\\\\\,#1\\\"),oa(\\\"\\\\\\\\pmb\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@binrel{#1}{\\\\\\\\mathrlap{#1}\\\\\\\\mathrlap{\\\\\\\\mkern0.4mu\\\\\\\\raisebox{0.4mu}{$#1$}}{\\\\\\\\mkern0.8mu#1}}}{\\\\\\\\mathbf{#1}}\\\"),oa(\\\"\\\\\\\\\\\\\\\\\\\",\\\"\\\\\\\\newline\\\"),oa(\\\"\\\\\\\\TeX\\\",\\\"\\\\\\\\textrm{\\\\\\\\html@mathml{T\\\\\\\\kern-.1667em\\\\\\\\raisebox{-.5ex}{E}\\\\\\\\kern-.125emX}{TeX}}\\\");var ca=P[\\\"Main-Regular\\\"][\\\"T\\\".charCodeAt(0)][1]-.7*P[\\\"Main-Regular\\\"][\\\"A\\\".charCodeAt(0)][1]+\\\"em\\\";oa(\\\"\\\\\\\\LaTeX\\\",\\\"\\\\\\\\textrm{\\\\\\\\html@mathml{L\\\\\\\\kern-.36em\\\\\\\\raisebox{\\\"+ca+\\\"}{\\\\\\\\scriptsize A}\\\\\\\\kern-.15em\\\\\\\\TeX}{LaTeX}}\\\"),oa(\\\"\\\\\\\\KaTeX\\\",\\\"\\\\\\\\textrm{\\\\\\\\html@mathml{K\\\\\\\\kern-.17em\\\\\\\\raisebox{\\\"+ca+\\\"}{\\\\\\\\scriptsize A}\\\\\\\\kern-.15em\\\\\\\\TeX}{KaTeX}}\\\"),oa(\\\"\\\\\\\\hspace\\\",\\\"\\\\\\\\@ifstar\\\\\\\\@hspacer\\\\\\\\@hspace\\\"),oa(\\\"\\\\\\\\@hspace\\\",\\\"\\\\\\\\hskip #1\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\@hspacer\\\",\\\"\\\\\\\\rule{0pt}{0pt}\\\\\\\\hskip #1\\\\\\\\relax\\\"),oa(\\\"\\\\\\\\ordinarycolon\\\",\\\":\\\"),oa(\\\"\\\\\\\\vcentcolon\\\",\\\"\\\\\\\\mathrel{\\\\\\\\mathop\\\\\\\\ordinarycolon}\\\"),oa(\\\"\\\\\\\\dblcolon\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-.9mu}\\\\\\\\vcentcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\"2237}}'),oa(\\\"\\\\\\\\coloneqq\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}=}}{\\\\\\\\mathop{\\\\\\\\char\\\"2254}}'),oa(\\\"\\\\\\\\Coloneqq\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\dblcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}=}}{\\\\\\\\mathop{\\\\\\\\char\\\"2237\\\\\\\\char\\\"3d}}'),oa(\\\"\\\\\\\\coloneq\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\mathrel{-}}}{\\\\\\\\mathop{\\\\\\\\char\\\"3a\\\\\\\\char\\\"2212}}'),oa(\\\"\\\\\\\\Coloneq\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\dblcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\mathrel{-}}}{\\\\\\\\mathop{\\\\\\\\char\\\"2237\\\\\\\\char\\\"2212}}'),oa(\\\"\\\\\\\\eqqcolon\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{=\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\vcentcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\"2255}}'),oa(\\\"\\\\\\\\Eqqcolon\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{=\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\dblcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\"3d\\\\\\\\char\\\"2237}}'),oa(\\\"\\\\\\\\eqcolon\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\mathrel{-}\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\vcentcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\"2239}}'),oa(\\\"\\\\\\\\Eqcolon\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\mathrel{-}\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\dblcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\"2212\\\\\\\\char\\\"2237}}'),oa(\\\"\\\\\\\\colonapprox\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\approx}}{\\\\\\\\mathop{\\\\\\\\char\\\"3a\\\\\\\\char\\\"2248}}'),oa(\\\"\\\\\\\\Colonapprox\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\dblcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\approx}}{\\\\\\\\mathop{\\\\\\\\char\\\"2237\\\\\\\\char\\\"2248}}'),oa(\\\"\\\\\\\\colonsim\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\sim}}{\\\\\\\\mathop{\\\\\\\\char\\\"3a\\\\\\\\char\\\"223c}}'),oa(\\\"\\\\\\\\Colonsim\\\",'\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\dblcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\sim}}{\\\\\\\\mathop{\\\\\\\\char\\\"2237\\\\\\\\char\\\"223c}}'),oa(\\\"\\\\u2237\\\",\\\"\\\\\\\\dblcolon\\\"),oa(\\\"\\\\u2239\\\",\\\"\\\\\\\\eqcolon\\\"),oa(\\\"\\\\u2254\\\",\\\"\\\\\\\\coloneqq\\\"),oa(\\\"\\\\u2255\\\",\\\"\\\\\\\\eqqcolon\\\"),oa(\\\"\\\\u2a74\\\",\\\"\\\\\\\\Coloneqq\\\"),oa(\\\"\\\\\\\\ratio\\\",\\\"\\\\\\\\vcentcolon\\\"),oa(\\\"\\\\\\\\coloncolon\\\",\\\"\\\\\\\\dblcolon\\\"),oa(\\\"\\\\\\\\colonequals\\\",\\\"\\\\\\\\coloneqq\\\"),oa(\\\"\\\\\\\\coloncolonequals\\\",\\\"\\\\\\\\Coloneqq\\\"),oa(\\\"\\\\\\\\equalscolon\\\",\\\"\\\\\\\\eqqcolon\\\"),oa(\\\"\\\\\\\\equalscoloncolon\\\",\\\"\\\\\\\\Eqqcolon\\\"),oa(\\\"\\\\\\\\colonminus\\\",\\\"\\\\\\\\coloneq\\\"),oa(\\\"\\\\\\\\coloncolonminus\\\",\\\"\\\\\\\\Coloneq\\\"),oa(\\\"\\\\\\\\minuscolon\\\",\\\"\\\\\\\\eqcolon\\\"),oa(\\\"\\\\\\\\minuscoloncolon\\\",\\\"\\\\\\\\Eqcolon\\\"),oa(\\\"\\\\\\\\coloncolonapprox\\\",\\\"\\\\\\\\Colonapprox\\\"),oa(\\\"\\\\\\\\coloncolonsim\\\",\\\"\\\\\\\\Colonsim\\\"),oa(\\\"\\\\\\\\simcolon\\\",\\\"\\\\\\\\mathrel{\\\\\\\\sim\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\vcentcolon}\\\"),oa(\\\"\\\\\\\\simcoloncolon\\\",\\\"\\\\\\\\mathrel{\\\\\\\\sim\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\dblcolon}\\\"),oa(\\\"\\\\\\\\approxcolon\\\",\\\"\\\\\\\\mathrel{\\\\\\\\approx\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\vcentcolon}\\\"),oa(\\\"\\\\\\\\approxcoloncolon\\\",\\\"\\\\\\\\mathrel{\\\\\\\\approx\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\dblcolon}\\\"),oa(\\\"\\\\\\\\notni\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\not\\\\\\\\ni}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u220c}}\\\"),oa(\\\"\\\\\\\\limsup\\\",\\\"\\\\\\\\DOTSB\\\\\\\\mathop{\\\\\\\\operatorname{lim\\\\\\\\,sup}}\\\\\\\\limits\\\"),oa(\\\"\\\\\\\\liminf\\\",\\\"\\\\\\\\DOTSB\\\\\\\\mathop{\\\\\\\\operatorname{lim\\\\\\\\,inf}}\\\\\\\\limits\\\"),oa(\\\"\\\\\\\\gvertneqq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@gvertneqq}{\\\\u2269}\\\"),oa(\\\"\\\\\\\\lvertneqq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@lvertneqq}{\\\\u2268}\\\"),oa(\\\"\\\\\\\\ngeqq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@ngeqq}{\\\\u2271}\\\"),oa(\\\"\\\\\\\\ngeqslant\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@ngeqslant}{\\\\u2271}\\\"),oa(\\\"\\\\\\\\nleqq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@nleqq}{\\\\u2270}\\\"),oa(\\\"\\\\\\\\nleqslant\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@nleqslant}{\\\\u2270}\\\"),oa(\\\"\\\\\\\\nshortmid\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@nshortmid}{\\\\u2224}\\\"),oa(\\\"\\\\\\\\nshortparallel\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@nshortparallel}{\\\\u2226}\\\"),oa(\\\"\\\\\\\\nsubseteqq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@nsubseteqq}{\\\\u2288}\\\"),oa(\\\"\\\\\\\\nsupseteqq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@nsupseteqq}{\\\\u2289}\\\"),oa(\\\"\\\\\\\\varsubsetneq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@varsubsetneq}{\\\\u228a}\\\"),oa(\\\"\\\\\\\\varsubsetneqq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@varsubsetneqq}{\\\\u2acb}\\\"),oa(\\\"\\\\\\\\varsupsetneq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@varsupsetneq}{\\\\u228b}\\\"),oa(\\\"\\\\\\\\varsupsetneqq\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\@varsupsetneqq}{\\\\u2acc}\\\"),oa(\\\"\\\\\\\\llbracket\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\mathopen{[\\\\\\\\mkern-3.2mu[}}{\\\\\\\\mathopen{\\\\\\\\char`\\\\u27e6}}\\\"),oa(\\\"\\\\\\\\rrbracket\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\mathclose{]\\\\\\\\mkern-3.2mu]}}{\\\\\\\\mathclose{\\\\\\\\char`\\\\u27e7}}\\\"),oa(\\\"\\\\u27e6\\\",\\\"\\\\\\\\llbracket\\\"),oa(\\\"\\\\u27e7\\\",\\\"\\\\\\\\rrbracket\\\"),oa(\\\"\\\\\\\\lBrace\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\mathopen{\\\\\\\\{\\\\\\\\mkern-3.2mu[}}{\\\\\\\\mathopen{\\\\\\\\char`\\\\u2983}}\\\"),oa(\\\"\\\\\\\\rBrace\\\",\\\"\\\\\\\\html@mathml{\\\\\\\\mathclose{]\\\\\\\\mkern-3.2mu\\\\\\\\}}}{\\\\\\\\mathclose{\\\\\\\\char`\\\\u2984}}\\\"),oa(\\\"\\\\u2983\\\",\\\"\\\\\\\\lBrace\\\"),oa(\\\"\\\\u2984\\\",\\\"\\\\\\\\rBrace\\\"),oa(\\\"\\\\\\\\darr\\\",\\\"\\\\\\\\downarrow\\\"),oa(\\\"\\\\\\\\dArr\\\",\\\"\\\\\\\\Downarrow\\\"),oa(\\\"\\\\\\\\Darr\\\",\\\"\\\\\\\\Downarrow\\\"),oa(\\\"\\\\\\\\lang\\\",\\\"\\\\\\\\langle\\\"),oa(\\\"\\\\\\\\rang\\\",\\\"\\\\\\\\rangle\\\"),oa(\\\"\\\\\\\\uarr\\\",\\\"\\\\\\\\uparrow\\\"),oa(\\\"\\\\\\\\uArr\\\",\\\"\\\\\\\\Uparrow\\\"),oa(\\\"\\\\\\\\Uarr\\\",\\\"\\\\\\\\Uparrow\\\"),oa(\\\"\\\\\\\\N\\\",\\\"\\\\\\\\mathbb{N}\\\"),oa(\\\"\\\\\\\\R\\\",\\\"\\\\\\\\mathbb{R}\\\"),oa(\\\"\\\\\\\\Z\\\",\\\"\\\\\\\\mathbb{Z}\\\"),oa(\\\"\\\\\\\\alef\\\",\\\"\\\\\\\\aleph\\\"),oa(\\\"\\\\\\\\alefsym\\\",\\\"\\\\\\\\aleph\\\"),oa(\\\"\\\\\\\\Alpha\\\",\\\"\\\\\\\\mathrm{A}\\\"),oa(\\\"\\\\\\\\Beta\\\",\\\"\\\\\\\\mathrm{B}\\\"),oa(\\\"\\\\\\\\bull\\\",\\\"\\\\\\\\bullet\\\"),oa(\\\"\\\\\\\\Chi\\\",\\\"\\\\\\\\mathrm{X}\\\"),oa(\\\"\\\\\\\\clubs\\\",\\\"\\\\\\\\clubsuit\\\"),oa(\\\"\\\\\\\\cnums\\\",\\\"\\\\\\\\mathbb{C}\\\"),oa(\\\"\\\\\\\\Complex\\\",\\\"\\\\\\\\mathbb{C}\\\"),oa(\\\"\\\\\\\\Dagger\\\",\\\"\\\\\\\\ddagger\\\"),oa(\\\"\\\\\\\\diamonds\\\",\\\"\\\\\\\\diamondsuit\\\"),oa(\\\"\\\\\\\\empty\\\",\\\"\\\\\\\\emptyset\\\"),oa(\\\"\\\\\\\\Epsilon\\\",\\\"\\\\\\\\mathrm{E}\\\"),oa(\\\"\\\\\\\\Eta\\\",\\\"\\\\\\\\mathrm{H}\\\"),oa(\\\"\\\\\\\\exist\\\",\\\"\\\\\\\\exists\\\"),oa(\\\"\\\\\\\\harr\\\",\\\"\\\\\\\\leftrightarrow\\\"),oa(\\\"\\\\\\\\hArr\\\",\\\"\\\\\\\\Leftrightarrow\\\"),oa(\\\"\\\\\\\\Harr\\\",\\\"\\\\\\\\Leftrightarrow\\\"),oa(\\\"\\\\\\\\hearts\\\",\\\"\\\\\\\\heartsuit\\\"),oa(\\\"\\\\\\\\image\\\",\\\"\\\\\\\\Im\\\"),oa(\\\"\\\\\\\\infin\\\",\\\"\\\\\\\\infty\\\"),oa(\\\"\\\\\\\\Iota\\\",\\\"\\\\\\\\mathrm{I}\\\"),oa(\\\"\\\\\\\\isin\\\",\\\"\\\\\\\\in\\\"),oa(\\\"\\\\\\\\Kappa\\\",\\\"\\\\\\\\mathrm{K}\\\"),oa(\\\"\\\\\\\\larr\\\",\\\"\\\\\\\\leftarrow\\\"),oa(\\\"\\\\\\\\lArr\\\",\\\"\\\\\\\\Leftarrow\\\"),oa(\\\"\\\\\\\\Larr\\\",\\\"\\\\\\\\Leftarrow\\\"),oa(\\\"\\\\\\\\lrarr\\\",\\\"\\\\\\\\leftrightarrow\\\"),oa(\\\"\\\\\\\\lrArr\\\",\\\"\\\\\\\\Leftrightarrow\\\"),oa(\\\"\\\\\\\\Lrarr\\\",\\\"\\\\\\\\Leftrightarrow\\\"),oa(\\\"\\\\\\\\Mu\\\",\\\"\\\\\\\\mathrm{M}\\\"),oa(\\\"\\\\\\\\natnums\\\",\\\"\\\\\\\\mathbb{N}\\\"),oa(\\\"\\\\\\\\Nu\\\",\\\"\\\\\\\\mathrm{N}\\\"),oa(\\\"\\\\\\\\Omicron\\\",\\\"\\\\\\\\mathrm{O}\\\"),oa(\\\"\\\\\\\\plusmn\\\",\\\"\\\\\\\\pm\\\"),oa(\\\"\\\\\\\\rarr\\\",\\\"\\\\\\\\rightarrow\\\"),oa(\\\"\\\\\\\\rArr\\\",\\\"\\\\\\\\Rightarrow\\\"),oa(\\\"\\\\\\\\Rarr\\\",\\\"\\\\\\\\Rightarrow\\\"),oa(\\\"\\\\\\\\real\\\",\\\"\\\\\\\\Re\\\"),oa(\\\"\\\\\\\\reals\\\",\\\"\\\\\\\\mathbb{R}\\\"),oa(\\\"\\\\\\\\Reals\\\",\\\"\\\\\\\\mathbb{R}\\\"),oa(\\\"\\\\\\\\Rho\\\",\\\"\\\\\\\\mathrm{P}\\\"),oa(\\\"\\\\\\\\sdot\\\",\\\"\\\\\\\\cdot\\\"),oa(\\\"\\\\\\\\sect\\\",\\\"\\\\\\\\S\\\"),oa(\\\"\\\\\\\\spades\\\",\\\"\\\\\\\\spadesuit\\\"),oa(\\\"\\\\\\\\sub\\\",\\\"\\\\\\\\subset\\\"),oa(\\\"\\\\\\\\sube\\\",\\\"\\\\\\\\subseteq\\\"),oa(\\\"\\\\\\\\supe\\\",\\\"\\\\\\\\supseteq\\\"),oa(\\\"\\\\\\\\Tau\\\",\\\"\\\\\\\\mathrm{T}\\\"),oa(\\\"\\\\\\\\thetasym\\\",\\\"\\\\\\\\vartheta\\\"),oa(\\\"\\\\\\\\weierp\\\",\\\"\\\\\\\\wp\\\"),oa(\\\"\\\\\\\\Zeta\\\",\\\"\\\\\\\\mathrm{Z}\\\"),oa(\\\"\\\\\\\\argmin\\\",\\\"\\\\\\\\DOTSB\\\\\\\\mathop{\\\\\\\\operatorname{arg\\\\\\\\,min}}\\\\\\\\limits\\\"),oa(\\\"\\\\\\\\argmax\\\",\\\"\\\\\\\\DOTSB\\\\\\\\mathop{\\\\\\\\operatorname{arg\\\\\\\\,max}}\\\\\\\\limits\\\"),oa(\\\"\\\\\\\\blue\\\",\\\"\\\\\\\\textcolor{##6495ed}{#1}\\\"),oa(\\\"\\\\\\\\orange\\\",\\\"\\\\\\\\textcolor{##ffa500}{#1}\\\"),oa(\\\"\\\\\\\\pink\\\",\\\"\\\\\\\\textcolor{##ff00af}{#1}\\\"),oa(\\\"\\\\\\\\red\\\",\\\"\\\\\\\\textcolor{##df0030}{#1}\\\"),oa(\\\"\\\\\\\\green\\\",\\\"\\\\\\\\textcolor{##28ae7b}{#1}\\\"),oa(\\\"\\\\\\\\gray\\\",\\\"\\\\\\\\textcolor{gray}{##1}\\\"),oa(\\\"\\\\\\\\purple\\\",\\\"\\\\\\\\textcolor{##9d38bd}{#1}\\\"),oa(\\\"\\\\\\\\blueA\\\",\\\"\\\\\\\\textcolor{##ccfaff}{#1}\\\"),oa(\\\"\\\\\\\\blueB\\\",\\\"\\\\\\\\textcolor{##80f6ff}{#1}\\\"),oa(\\\"\\\\\\\\blueC\\\",\\\"\\\\\\\\textcolor{##63d9ea}{#1}\\\"),oa(\\\"\\\\\\\\blueD\\\",\\\"\\\\\\\\textcolor{##11accd}{#1}\\\"),oa(\\\"\\\\\\\\blueE\\\",\\\"\\\\\\\\textcolor{##0c7f99}{#1}\\\"),oa(\\\"\\\\\\\\tealA\\\",\\\"\\\\\\\\textcolor{##94fff5}{#1}\\\"),oa(\\\"\\\\\\\\tealB\\\",\\\"\\\\\\\\textcolor{##26edd5}{#1}\\\"),oa(\\\"\\\\\\\\tealC\\\",\\\"\\\\\\\\textcolor{##01d1c1}{#1}\\\"),oa(\\\"\\\\\\\\tealD\\\",\\\"\\\\\\\\textcolor{##01a995}{#1}\\\"),oa(\\\"\\\\\\\\tealE\\\",\\\"\\\\\\\\textcolor{##208170}{#1}\\\"),oa(\\\"\\\\\\\\greenA\\\",\\\"\\\\\\\\textcolor{##b6ffb0}{#1}\\\"),oa(\\\"\\\\\\\\greenB\\\",\\\"\\\\\\\\textcolor{##8af281}{#1}\\\"),oa(\\\"\\\\\\\\greenC\\\",\\\"\\\\\\\\textcolor{##74cf70}{#1}\\\"),oa(\\\"\\\\\\\\greenD\\\",\\\"\\\\\\\\textcolor{##1fab54}{#1}\\\"),oa(\\\"\\\\\\\\greenE\\\",\\\"\\\\\\\\textcolor{##0d923f}{#1}\\\"),oa(\\\"\\\\\\\\goldA\\\",\\\"\\\\\\\\textcolor{##ffd0a9}{#1}\\\"),oa(\\\"\\\\\\\\goldB\\\",\\\"\\\\\\\\textcolor{##ffbb71}{#1}\\\"),oa(\\\"\\\\\\\\goldC\\\",\\\"\\\\\\\\textcolor{##ff9c39}{#1}\\\"),oa(\\\"\\\\\\\\goldD\\\",\\\"\\\\\\\\textcolor{##e07d10}{#1}\\\"),oa(\\\"\\\\\\\\goldE\\\",\\\"\\\\\\\\textcolor{##a75a05}{#1}\\\"),oa(\\\"\\\\\\\\redA\\\",\\\"\\\\\\\\textcolor{##fca9a9}{#1}\\\"),oa(\\\"\\\\\\\\redB\\\",\\\"\\\\\\\\textcolor{##ff8482}{#1}\\\"),oa(\\\"\\\\\\\\redC\\\",\\\"\\\\\\\\textcolor{##f9685d}{#1}\\\"),oa(\\\"\\\\\\\\redD\\\",\\\"\\\\\\\\textcolor{##e84d39}{#1}\\\"),oa(\\\"\\\\\\\\redE\\\",\\\"\\\\\\\\textcolor{##bc2612}{#1}\\\"),oa(\\\"\\\\\\\\maroonA\\\",\\\"\\\\\\\\textcolor{##ffbde0}{#1}\\\"),oa(\\\"\\\\\\\\maroonB\\\",\\\"\\\\\\\\textcolor{##ff92c6}{#1}\\\"),oa(\\\"\\\\\\\\maroonC\\\",\\\"\\\\\\\\textcolor{##ed5fa6}{#1}\\\"),oa(\\\"\\\\\\\\maroonD\\\",\\\"\\\\\\\\textcolor{##ca337c}{#1}\\\"),oa(\\\"\\\\\\\\maroonE\\\",\\\"\\\\\\\\textcolor{##9e034e}{#1}\\\"),oa(\\\"\\\\\\\\purpleA\\\",\\\"\\\\\\\\textcolor{##ddd7ff}{#1}\\\"),oa(\\\"\\\\\\\\purpleB\\\",\\\"\\\\\\\\textcolor{##c6b9fc}{#1}\\\"),oa(\\\"\\\\\\\\purpleC\\\",\\\"\\\\\\\\textcolor{##aa87ff}{#1}\\\"),oa(\\\"\\\\\\\\purpleD\\\",\\\"\\\\\\\\textcolor{##7854ab}{#1}\\\"),oa(\\\"\\\\\\\\purpleE\\\",\\\"\\\\\\\\textcolor{##543b78}{#1}\\\"),oa(\\\"\\\\\\\\mintA\\\",\\\"\\\\\\\\textcolor{##f5f9e8}{#1}\\\"),oa(\\\"\\\\\\\\mintB\\\",\\\"\\\\\\\\textcolor{##edf2df}{#1}\\\"),oa(\\\"\\\\\\\\mintC\\\",\\\"\\\\\\\\textcolor{##e0e5cc}{#1}\\\"),oa(\\\"\\\\\\\\grayA\\\",\\\"\\\\\\\\textcolor{##f6f7f7}{#1}\\\"),oa(\\\"\\\\\\\\grayB\\\",\\\"\\\\\\\\textcolor{##f0f1f2}{#1}\\\"),oa(\\\"\\\\\\\\grayC\\\",\\\"\\\\\\\\textcolor{##e3e5e6}{#1}\\\"),oa(\\\"\\\\\\\\grayD\\\",\\\"\\\\\\\\textcolor{##d6d8da}{#1}\\\"),oa(\\\"\\\\\\\\grayE\\\",\\\"\\\\\\\\textcolor{##babec2}{#1}\\\"),oa(\\\"\\\\\\\\grayF\\\",\\\"\\\\\\\\textcolor{##888d93}{#1}\\\"),oa(\\\"\\\\\\\\grayG\\\",\\\"\\\\\\\\textcolor{##626569}{#1}\\\"),oa(\\\"\\\\\\\\grayH\\\",\\\"\\\\\\\\textcolor{##3b3e40}{#1}\\\"),oa(\\\"\\\\\\\\grayI\\\",\\\"\\\\\\\\textcolor{##21242c}{#1}\\\"),oa(\\\"\\\\\\\\kaBlue\\\",\\\"\\\\\\\\textcolor{##314453}{#1}\\\"),oa(\\\"\\\\\\\\kaGreen\\\",\\\"\\\\\\\\textcolor{##71B307}{#1}\\\");var ua={\\\"\\\\\\\\relax\\\":!0,\\\"^\\\":!0,_:!0,\\\"\\\\\\\\limits\\\":!0,\\\"\\\\\\\\nolimits\\\":!0},da=function(){function t(t,e,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=e,this.expansionCount=0,this.feed(t),this.macros=new ra(na,e.macros),this.mode=r,this.stack=[]}var e=t.prototype;return e.feed=function(t){this.lexer=new ea(t,this.settings)},e.switchMode=function(t){this.mode=t},e.beginGroup=function(){this.macros.beginGroup()},e.endGroup=function(){this.macros.endGroup()},e.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},e.popToken=function(){return this.future(),this.stack.pop()},e.pushToken=function(t){this.stack.push(t)},e.pushTokens=function(t){var e;(e=this.stack).push.apply(e,t)},e.consumeSpaces=function(){for(;;){if(\\\" \\\"!==this.future().text)break;this.stack.pop()}},e.consumeArgs=function(t){for(var e=[],r=0;r<t;++r){this.consumeSpaces();var a=this.popToken();if(\\\"{\\\"===a.text){for(var n=[],o=1;0!==o;){var s=this.popToken();if(n.push(s),\\\"{\\\"===s.text)++o;else if(\\\"}\\\"===s.text)--o;else if(\\\"EOF\\\"===s.text)throw new i(\\\"End of input in macro argument\\\",a)}n.pop(),n.reverse(),e[r]=n}else{if(\\\"EOF\\\"===a.text)throw new i(\\\"End of input expecting macro argument\\\");e[r]=[a]}}return e},e.expandOnce=function(){var t=this.popToken(),e=t.text,r=this._getExpansion(e);if(null==r)return this.pushToken(t),t;if(this.expansionCount++,this.expansionCount>this.settings.maxExpand)throw new i(\\\"Too many expansions: infinite loop or need to increase maxExpand setting\\\");var a=r.tokens;if(r.numArgs)for(var n=this.consumeArgs(r.numArgs),o=(a=a.slice()).length-1;o>=0;--o){var s=a[o];if(\\\"#\\\"===s.text){if(0===o)throw new i(\\\"Incomplete placeholder at end of macro body\\\",s);if(\\\"#\\\"===(s=a[--o]).text)a.splice(o+1,1);else{if(!/^[1-9]$/.test(s.text))throw new i(\\\"Not a valid argument number\\\",s);var h;(h=a).splice.apply(h,[o,2].concat(n[+s.text-1]))}}}return this.pushTokens(a),a},e.expandAfterFuture=function(){return this.expandOnce(),this.future()},e.expandNextToken=function(){for(;;){var t=this.expandOnce();if(t instanceof n){if(\\\"\\\\\\\\relax\\\"!==t.text)return this.stack.pop();this.stack.pop()}}throw new Error},e.expandMacro=function(t){if(this.macros.get(t)){var e=[],r=this.stack.length;for(this.pushToken(new n(t));this.stack.length>r;){this.expandOnce()instanceof n&&e.push(this.stack.pop())}return e}},e.expandMacroAsText=function(t){var e=this.expandMacro(t);return e?e.map(function(t){return t.text}).join(\\\"\\\"):e},e._getExpansion=function(t){var e=this.macros.get(t);if(null==e)return e;var r=\\\"function\\\"==typeof e?e(this):e;if(\\\"string\\\"==typeof r){var a=0;if(-1!==r.indexOf(\\\"#\\\"))for(var n=r.replace(/##/g,\\\"\\\");-1!==n.indexOf(\\\"#\\\"+(a+1));)++a;for(var o=new ea(r,this.settings),i=[],s=o.lex();\\\"EOF\\\"!==s.text;)i.push(s),s=o.lex();return i.reverse(),{tokens:i,numArgs:a}}return r},e.isDefined=function(t){return this.macros.has(t)||Kr.hasOwnProperty(t)||_.math.hasOwnProperty(t)||_.text.hasOwnProperty(t)||ua.hasOwnProperty(t)},t}(),pa={\\\"\\\\u0301\\\":{text:\\\"\\\\\\\\'\\\",math:\\\"\\\\\\\\acute\\\"},\\\"\\\\u0300\\\":{text:\\\"\\\\\\\\`\\\",math:\\\"\\\\\\\\grave\\\"},\\\"\\\\u0308\\\":{text:'\\\\\\\\\\\"',math:\\\"\\\\\\\\ddot\\\"},\\\"\\\\u0303\\\":{text:\\\"\\\\\\\\~\\\",math:\\\"\\\\\\\\tilde\\\"},\\\"\\\\u0304\\\":{text:\\\"\\\\\\\\=\\\",math:\\\"\\\\\\\\bar\\\"},\\\"\\\\u0306\\\":{text:\\\"\\\\\\\\u\\\",math:\\\"\\\\\\\\breve\\\"},\\\"\\\\u030c\\\":{text:\\\"\\\\\\\\v\\\",math:\\\"\\\\\\\\check\\\"},\\\"\\\\u0302\\\":{text:\\\"\\\\\\\\^\\\",math:\\\"\\\\\\\\hat\\\"},\\\"\\\\u0307\\\":{text:\\\"\\\\\\\\.\\\",math:\\\"\\\\\\\\dot\\\"},\\\"\\\\u030a\\\":{text:\\\"\\\\\\\\r\\\",math:\\\"\\\\\\\\mathring\\\"},\\\"\\\\u030b\\\":{text:\\\"\\\\\\\\H\\\"}},fa={\\\"\\\\xe1\\\":\\\"a\\\\u0301\\\",\\\"\\\\xe0\\\":\\\"a\\\\u0300\\\",\\\"\\\\xe4\\\":\\\"a\\\\u0308\\\",\\\"\\\\u01df\\\":\\\"a\\\\u0308\\\\u0304\\\",\\\"\\\\xe3\\\":\\\"a\\\\u0303\\\",\\\"\\\\u0101\\\":\\\"a\\\\u0304\\\",\\\"\\\\u0103\\\":\\\"a\\\\u0306\\\",\\\"\\\\u1eaf\\\":\\\"a\\\\u0306\\\\u0301\\\",\\\"\\\\u1eb1\\\":\\\"a\\\\u0306\\\\u0300\\\",\\\"\\\\u1eb5\\\":\\\"a\\\\u0306\\\\u0303\\\",\\\"\\\\u01ce\\\":\\\"a\\\\u030c\\\",\\\"\\\\xe2\\\":\\\"a\\\\u0302\\\",\\\"\\\\u1ea5\\\":\\\"a\\\\u0302\\\\u0301\\\",\\\"\\\\u1ea7\\\":\\\"a\\\\u0302\\\\u0300\\\",\\\"\\\\u1eab\\\":\\\"a\\\\u0302\\\\u0303\\\",\\\"\\\\u0227\\\":\\\"a\\\\u0307\\\",\\\"\\\\u01e1\\\":\\\"a\\\\u0307\\\\u0304\\\",\\\"\\\\xe5\\\":\\\"a\\\\u030a\\\",\\\"\\\\u01fb\\\":\\\"a\\\\u030a\\\\u0301\\\",\\\"\\\\u1e03\\\":\\\"b\\\\u0307\\\",\\\"\\\\u0107\\\":\\\"c\\\\u0301\\\",\\\"\\\\u010d\\\":\\\"c\\\\u030c\\\",\\\"\\\\u0109\\\":\\\"c\\\\u0302\\\",\\\"\\\\u010b\\\":\\\"c\\\\u0307\\\",\\\"\\\\u010f\\\":\\\"d\\\\u030c\\\",\\\"\\\\u1e0b\\\":\\\"d\\\\u0307\\\",\\\"\\\\xe9\\\":\\\"e\\\\u0301\\\",\\\"\\\\xe8\\\":\\\"e\\\\u0300\\\",\\\"\\\\xeb\\\":\\\"e\\\\u0308\\\",\\\"\\\\u1ebd\\\":\\\"e\\\\u0303\\\",\\\"\\\\u0113\\\":\\\"e\\\\u0304\\\",\\\"\\\\u1e17\\\":\\\"e\\\\u0304\\\\u0301\\\",\\\"\\\\u1e15\\\":\\\"e\\\\u0304\\\\u0300\\\",\\\"\\\\u0115\\\":\\\"e\\\\u0306\\\",\\\"\\\\u011b\\\":\\\"e\\\\u030c\\\",\\\"\\\\xea\\\":\\\"e\\\\u0302\\\",\\\"\\\\u1ebf\\\":\\\"e\\\\u0302\\\\u0301\\\",\\\"\\\\u1ec1\\\":\\\"e\\\\u0302\\\\u0300\\\",\\\"\\\\u1ec5\\\":\\\"e\\\\u0302\\\\u0303\\\",\\\"\\\\u0117\\\":\\\"e\\\\u0307\\\",\\\"\\\\u1e1f\\\":\\\"f\\\\u0307\\\",\\\"\\\\u01f5\\\":\\\"g\\\\u0301\\\",\\\"\\\\u1e21\\\":\\\"g\\\\u0304\\\",\\\"\\\\u011f\\\":\\\"g\\\\u0306\\\",\\\"\\\\u01e7\\\":\\\"g\\\\u030c\\\",\\\"\\\\u011d\\\":\\\"g\\\\u0302\\\",\\\"\\\\u0121\\\":\\\"g\\\\u0307\\\",\\\"\\\\u1e27\\\":\\\"h\\\\u0308\\\",\\\"\\\\u021f\\\":\\\"h\\\\u030c\\\",\\\"\\\\u0125\\\":\\\"h\\\\u0302\\\",\\\"\\\\u1e23\\\":\\\"h\\\\u0307\\\",\\\"\\\\xed\\\":\\\"i\\\\u0301\\\",\\\"\\\\xec\\\":\\\"i\\\\u0300\\\",\\\"\\\\xef\\\":\\\"i\\\\u0308\\\",\\\"\\\\u1e2f\\\":\\\"i\\\\u0308\\\\u0301\\\",\\\"\\\\u0129\\\":\\\"i\\\\u0303\\\",\\\"\\\\u012b\\\":\\\"i\\\\u0304\\\",\\\"\\\\u012d\\\":\\\"i\\\\u0306\\\",\\\"\\\\u01d0\\\":\\\"i\\\\u030c\\\",\\\"\\\\xee\\\":\\\"i\\\\u0302\\\",\\\"\\\\u01f0\\\":\\\"j\\\\u030c\\\",\\\"\\\\u0135\\\":\\\"j\\\\u0302\\\",\\\"\\\\u1e31\\\":\\\"k\\\\u0301\\\",\\\"\\\\u01e9\\\":\\\"k\\\\u030c\\\",\\\"\\\\u013a\\\":\\\"l\\\\u0301\\\",\\\"\\\\u013e\\\":\\\"l\\\\u030c\\\",\\\"\\\\u1e3f\\\":\\\"m\\\\u0301\\\",\\\"\\\\u1e41\\\":\\\"m\\\\u0307\\\",\\\"\\\\u0144\\\":\\\"n\\\\u0301\\\",\\\"\\\\u01f9\\\":\\\"n\\\\u0300\\\",\\\"\\\\xf1\\\":\\\"n\\\\u0303\\\",\\\"\\\\u0148\\\":\\\"n\\\\u030c\\\",\\\"\\\\u1e45\\\":\\\"n\\\\u0307\\\",\\\"\\\\xf3\\\":\\\"o\\\\u0301\\\",\\\"\\\\xf2\\\":\\\"o\\\\u0300\\\",\\\"\\\\xf6\\\":\\\"o\\\\u0308\\\",\\\"\\\\u022b\\\":\\\"o\\\\u0308\\\\u0304\\\",\\\"\\\\xf5\\\":\\\"o\\\\u0303\\\",\\\"\\\\u1e4d\\\":\\\"o\\\\u0303\\\\u0301\\\",\\\"\\\\u1e4f\\\":\\\"o\\\\u0303\\\\u0308\\\",\\\"\\\\u022d\\\":\\\"o\\\\u0303\\\\u0304\\\",\\\"\\\\u014d\\\":\\\"o\\\\u0304\\\",\\\"\\\\u1e53\\\":\\\"o\\\\u0304\\\\u0301\\\",\\\"\\\\u1e51\\\":\\\"o\\\\u0304\\\\u0300\\\",\\\"\\\\u014f\\\":\\\"o\\\\u0306\\\",\\\"\\\\u01d2\\\":\\\"o\\\\u030c\\\",\\\"\\\\xf4\\\":\\\"o\\\\u0302\\\",\\\"\\\\u1ed1\\\":\\\"o\\\\u0302\\\\u0301\\\",\\\"\\\\u1ed3\\\":\\\"o\\\\u0302\\\\u0300\\\",\\\"\\\\u1ed7\\\":\\\"o\\\\u0302\\\\u0303\\\",\\\"\\\\u022f\\\":\\\"o\\\\u0307\\\",\\\"\\\\u0231\\\":\\\"o\\\\u0307\\\\u0304\\\",\\\"\\\\u0151\\\":\\\"o\\\\u030b\\\",\\\"\\\\u1e55\\\":\\\"p\\\\u0301\\\",\\\"\\\\u1e57\\\":\\\"p\\\\u0307\\\",\\\"\\\\u0155\\\":\\\"r\\\\u0301\\\",\\\"\\\\u0159\\\":\\\"r\\\\u030c\\\",\\\"\\\\u1e59\\\":\\\"r\\\\u0307\\\",\\\"\\\\u015b\\\":\\\"s\\\\u0301\\\",\\\"\\\\u1e65\\\":\\\"s\\\\u0301\\\\u0307\\\",\\\"\\\\u0161\\\":\\\"s\\\\u030c\\\",\\\"\\\\u1e67\\\":\\\"s\\\\u030c\\\\u0307\\\",\\\"\\\\u015d\\\":\\\"s\\\\u0302\\\",\\\"\\\\u1e61\\\":\\\"s\\\\u0307\\\",\\\"\\\\u1e97\\\":\\\"t\\\\u0308\\\",\\\"\\\\u0165\\\":\\\"t\\\\u030c\\\",\\\"\\\\u1e6b\\\":\\\"t\\\\u0307\\\",\\\"\\\\xfa\\\":\\\"u\\\\u0301\\\",\\\"\\\\xf9\\\":\\\"u\\\\u0300\\\",\\\"\\\\xfc\\\":\\\"u\\\\u0308\\\",\\\"\\\\u01d8\\\":\\\"u\\\\u0308\\\\u0301\\\",\\\"\\\\u01dc\\\":\\\"u\\\\u0308\\\\u0300\\\",\\\"\\\\u01d6\\\":\\\"u\\\\u0308\\\\u0304\\\",\\\"\\\\u01da\\\":\\\"u\\\\u0308\\\\u030c\\\",\\\"\\\\u0169\\\":\\\"u\\\\u0303\\\",\\\"\\\\u1e79\\\":\\\"u\\\\u0303\\\\u0301\\\",\\\"\\\\u016b\\\":\\\"u\\\\u0304\\\",\\\"\\\\u1e7b\\\":\\\"u\\\\u0304\\\\u0308\\\",\\\"\\\\u016d\\\":\\\"u\\\\u0306\\\",\\\"\\\\u01d4\\\":\\\"u\\\\u030c\\\",\\\"\\\\xfb\\\":\\\"u\\\\u0302\\\",\\\"\\\\u016f\\\":\\\"u\\\\u030a\\\",\\\"\\\\u0171\\\":\\\"u\\\\u030b\\\",\\\"\\\\u1e7d\\\":\\\"v\\\\u0303\\\",\\\"\\\\u1e83\\\":\\\"w\\\\u0301\\\",\\\"\\\\u1e81\\\":\\\"w\\\\u0300\\\",\\\"\\\\u1e85\\\":\\\"w\\\\u0308\\\",\\\"\\\\u0175\\\":\\\"w\\\\u0302\\\",\\\"\\\\u1e87\\\":\\\"w\\\\u0307\\\",\\\"\\\\u1e98\\\":\\\"w\\\\u030a\\\",\\\"\\\\u1e8d\\\":\\\"x\\\\u0308\\\",\\\"\\\\u1e8b\\\":\\\"x\\\\u0307\\\",\\\"\\\\xfd\\\":\\\"y\\\\u0301\\\",\\\"\\\\u1ef3\\\":\\\"y\\\\u0300\\\",\\\"\\\\xff\\\":\\\"y\\\\u0308\\\",\\\"\\\\u1ef9\\\":\\\"y\\\\u0303\\\",\\\"\\\\u0233\\\":\\\"y\\\\u0304\\\",\\\"\\\\u0177\\\":\\\"y\\\\u0302\\\",\\\"\\\\u1e8f\\\":\\\"y\\\\u0307\\\",\\\"\\\\u1e99\\\":\\\"y\\\\u030a\\\",\\\"\\\\u017a\\\":\\\"z\\\\u0301\\\",\\\"\\\\u017e\\\":\\\"z\\\\u030c\\\",\\\"\\\\u1e91\\\":\\\"z\\\\u0302\\\",\\\"\\\\u017c\\\":\\\"z\\\\u0307\\\",\\\"\\\\xc1\\\":\\\"A\\\\u0301\\\",\\\"\\\\xc0\\\":\\\"A\\\\u0300\\\",\\\"\\\\xc4\\\":\\\"A\\\\u0308\\\",\\\"\\\\u01de\\\":\\\"A\\\\u0308\\\\u0304\\\",\\\"\\\\xc3\\\":\\\"A\\\\u0303\\\",\\\"\\\\u0100\\\":\\\"A\\\\u0304\\\",\\\"\\\\u0102\\\":\\\"A\\\\u0306\\\",\\\"\\\\u1eae\\\":\\\"A\\\\u0306\\\\u0301\\\",\\\"\\\\u1eb0\\\":\\\"A\\\\u0306\\\\u0300\\\",\\\"\\\\u1eb4\\\":\\\"A\\\\u0306\\\\u0303\\\",\\\"\\\\u01cd\\\":\\\"A\\\\u030c\\\",\\\"\\\\xc2\\\":\\\"A\\\\u0302\\\",\\\"\\\\u1ea4\\\":\\\"A\\\\u0302\\\\u0301\\\",\\\"\\\\u1ea6\\\":\\\"A\\\\u0302\\\\u0300\\\",\\\"\\\\u1eaa\\\":\\\"A\\\\u0302\\\\u0303\\\",\\\"\\\\u0226\\\":\\\"A\\\\u0307\\\",\\\"\\\\u01e0\\\":\\\"A\\\\u0307\\\\u0304\\\",\\\"\\\\xc5\\\":\\\"A\\\\u030a\\\",\\\"\\\\u01fa\\\":\\\"A\\\\u030a\\\\u0301\\\",\\\"\\\\u1e02\\\":\\\"B\\\\u0307\\\",\\\"\\\\u0106\\\":\\\"C\\\\u0301\\\",\\\"\\\\u010c\\\":\\\"C\\\\u030c\\\",\\\"\\\\u0108\\\":\\\"C\\\\u0302\\\",\\\"\\\\u010a\\\":\\\"C\\\\u0307\\\",\\\"\\\\u010e\\\":\\\"D\\\\u030c\\\",\\\"\\\\u1e0a\\\":\\\"D\\\\u0307\\\",\\\"\\\\xc9\\\":\\\"E\\\\u0301\\\",\\\"\\\\xc8\\\":\\\"E\\\\u0300\\\",\\\"\\\\xcb\\\":\\\"E\\\\u0308\\\",\\\"\\\\u1ebc\\\":\\\"E\\\\u0303\\\",\\\"\\\\u0112\\\":\\\"E\\\\u0304\\\",\\\"\\\\u1e16\\\":\\\"E\\\\u0304\\\\u0301\\\",\\\"\\\\u1e14\\\":\\\"E\\\\u0304\\\\u0300\\\",\\\"\\\\u0114\\\":\\\"E\\\\u0306\\\",\\\"\\\\u011a\\\":\\\"E\\\\u030c\\\",\\\"\\\\xca\\\":\\\"E\\\\u0302\\\",\\\"\\\\u1ebe\\\":\\\"E\\\\u0302\\\\u0301\\\",\\\"\\\\u1ec0\\\":\\\"E\\\\u0302\\\\u0300\\\",\\\"\\\\u1ec4\\\":\\\"E\\\\u0302\\\\u0303\\\",\\\"\\\\u0116\\\":\\\"E\\\\u0307\\\",\\\"\\\\u1e1e\\\":\\\"F\\\\u0307\\\",\\\"\\\\u01f4\\\":\\\"G\\\\u0301\\\",\\\"\\\\u1e20\\\":\\\"G\\\\u0304\\\",\\\"\\\\u011e\\\":\\\"G\\\\u0306\\\",\\\"\\\\u01e6\\\":\\\"G\\\\u030c\\\",\\\"\\\\u011c\\\":\\\"G\\\\u0302\\\",\\\"\\\\u0120\\\":\\\"G\\\\u0307\\\",\\\"\\\\u1e26\\\":\\\"H\\\\u0308\\\",\\\"\\\\u021e\\\":\\\"H\\\\u030c\\\",\\\"\\\\u0124\\\":\\\"H\\\\u0302\\\",\\\"\\\\u1e22\\\":\\\"H\\\\u0307\\\",\\\"\\\\xcd\\\":\\\"I\\\\u0301\\\",\\\"\\\\xcc\\\":\\\"I\\\\u0300\\\",\\\"\\\\xcf\\\":\\\"I\\\\u0308\\\",\\\"\\\\u1e2e\\\":\\\"I\\\\u0308\\\\u0301\\\",\\\"\\\\u0128\\\":\\\"I\\\\u0303\\\",\\\"\\\\u012a\\\":\\\"I\\\\u0304\\\",\\\"\\\\u012c\\\":\\\"I\\\\u0306\\\",\\\"\\\\u01cf\\\":\\\"I\\\\u030c\\\",\\\"\\\\xce\\\":\\\"I\\\\u0302\\\",\\\"\\\\u0130\\\":\\\"I\\\\u0307\\\",\\\"\\\\u0134\\\":\\\"J\\\\u0302\\\",\\\"\\\\u1e30\\\":\\\"K\\\\u0301\\\",\\\"\\\\u01e8\\\":\\\"K\\\\u030c\\\",\\\"\\\\u0139\\\":\\\"L\\\\u0301\\\",\\\"\\\\u013d\\\":\\\"L\\\\u030c\\\",\\\"\\\\u1e3e\\\":\\\"M\\\\u0301\\\",\\\"\\\\u1e40\\\":\\\"M\\\\u0307\\\",\\\"\\\\u0143\\\":\\\"N\\\\u0301\\\",\\\"\\\\u01f8\\\":\\\"N\\\\u0300\\\",\\\"\\\\xd1\\\":\\\"N\\\\u0303\\\",\\\"\\\\u0147\\\":\\\"N\\\\u030c\\\",\\\"\\\\u1e44\\\":\\\"N\\\\u0307\\\",\\\"\\\\xd3\\\":\\\"O\\\\u0301\\\",\\\"\\\\xd2\\\":\\\"O\\\\u0300\\\",\\\"\\\\xd6\\\":\\\"O\\\\u0308\\\",\\\"\\\\u022a\\\":\\\"O\\\\u0308\\\\u0304\\\",\\\"\\\\xd5\\\":\\\"O\\\\u0303\\\",\\\"\\\\u1e4c\\\":\\\"O\\\\u0303\\\\u0301\\\",\\\"\\\\u1e4e\\\":\\\"O\\\\u0303\\\\u0308\\\",\\\"\\\\u022c\\\":\\\"O\\\\u0303\\\\u0304\\\",\\\"\\\\u014c\\\":\\\"O\\\\u0304\\\",\\\"\\\\u1e52\\\":\\\"O\\\\u0304\\\\u0301\\\",\\\"\\\\u1e50\\\":\\\"O\\\\u0304\\\\u0300\\\",\\\"\\\\u014e\\\":\\\"O\\\\u0306\\\",\\\"\\\\u01d1\\\":\\\"O\\\\u030c\\\",\\\"\\\\xd4\\\":\\\"O\\\\u0302\\\",\\\"\\\\u1ed0\\\":\\\"O\\\\u0302\\\\u0301\\\",\\\"\\\\u1ed2\\\":\\\"O\\\\u0302\\\\u0300\\\",\\\"\\\\u1ed6\\\":\\\"O\\\\u0302\\\\u0303\\\",\\\"\\\\u022e\\\":\\\"O\\\\u0307\\\",\\\"\\\\u0230\\\":\\\"O\\\\u0307\\\\u0304\\\",\\\"\\\\u0150\\\":\\\"O\\\\u030b\\\",\\\"\\\\u1e54\\\":\\\"P\\\\u0301\\\",\\\"\\\\u1e56\\\":\\\"P\\\\u0307\\\",\\\"\\\\u0154\\\":\\\"R\\\\u0301\\\",\\\"\\\\u0158\\\":\\\"R\\\\u030c\\\",\\\"\\\\u1e58\\\":\\\"R\\\\u0307\\\",\\\"\\\\u015a\\\":\\\"S\\\\u0301\\\",\\\"\\\\u1e64\\\":\\\"S\\\\u0301\\\\u0307\\\",\\\"\\\\u0160\\\":\\\"S\\\\u030c\\\",\\\"\\\\u1e66\\\":\\\"S\\\\u030c\\\\u0307\\\",\\\"\\\\u015c\\\":\\\"S\\\\u0302\\\",\\\"\\\\u1e60\\\":\\\"S\\\\u0307\\\",\\\"\\\\u0164\\\":\\\"T\\\\u030c\\\",\\\"\\\\u1e6a\\\":\\\"T\\\\u0307\\\",\\\"\\\\xda\\\":\\\"U\\\\u0301\\\",\\\"\\\\xd9\\\":\\\"U\\\\u0300\\\",\\\"\\\\xdc\\\":\\\"U\\\\u0308\\\",\\\"\\\\u01d7\\\":\\\"U\\\\u0308\\\\u0301\\\",\\\"\\\\u01db\\\":\\\"U\\\\u0308\\\\u0300\\\",\\\"\\\\u01d5\\\":\\\"U\\\\u0308\\\\u0304\\\",\\\"\\\\u01d9\\\":\\\"U\\\\u0308\\\\u030c\\\",\\\"\\\\u0168\\\":\\\"U\\\\u0303\\\",\\\"\\\\u1e78\\\":\\\"U\\\\u0303\\\\u0301\\\",\\\"\\\\u016a\\\":\\\"U\\\\u0304\\\",\\\"\\\\u1e7a\\\":\\\"U\\\\u0304\\\\u0308\\\",\\\"\\\\u016c\\\":\\\"U\\\\u0306\\\",\\\"\\\\u01d3\\\":\\\"U\\\\u030c\\\",\\\"\\\\xdb\\\":\\\"U\\\\u0302\\\",\\\"\\\\u016e\\\":\\\"U\\\\u030a\\\",\\\"\\\\u0170\\\":\\\"U\\\\u030b\\\",\\\"\\\\u1e7c\\\":\\\"V\\\\u0303\\\",\\\"\\\\u1e82\\\":\\\"W\\\\u0301\\\",\\\"\\\\u1e80\\\":\\\"W\\\\u0300\\\",\\\"\\\\u1e84\\\":\\\"W\\\\u0308\\\",\\\"\\\\u0174\\\":\\\"W\\\\u0302\\\",\\\"\\\\u1e86\\\":\\\"W\\\\u0307\\\",\\\"\\\\u1e8c\\\":\\\"X\\\\u0308\\\",\\\"\\\\u1e8a\\\":\\\"X\\\\u0307\\\",\\\"\\\\xdd\\\":\\\"Y\\\\u0301\\\",\\\"\\\\u1ef2\\\":\\\"Y\\\\u0300\\\",\\\"\\\\u0178\\\":\\\"Y\\\\u0308\\\",\\\"\\\\u1ef8\\\":\\\"Y\\\\u0303\\\",\\\"\\\\u0232\\\":\\\"Y\\\\u0304\\\",\\\"\\\\u0176\\\":\\\"Y\\\\u0302\\\",\\\"\\\\u1e8e\\\":\\\"Y\\\\u0307\\\",\\\"\\\\u0179\\\":\\\"Z\\\\u0301\\\",\\\"\\\\u017d\\\":\\\"Z\\\\u030c\\\",\\\"\\\\u1e90\\\":\\\"Z\\\\u0302\\\",\\\"\\\\u017b\\\":\\\"Z\\\\u0307\\\",\\\"\\\\u03ac\\\":\\\"\\\\u03b1\\\\u0301\\\",\\\"\\\\u1f70\\\":\\\"\\\\u03b1\\\\u0300\\\",\\\"\\\\u1fb1\\\":\\\"\\\\u03b1\\\\u0304\\\",\\\"\\\\u1fb0\\\":\\\"\\\\u03b1\\\\u0306\\\",\\\"\\\\u03ad\\\":\\\"\\\\u03b5\\\\u0301\\\",\\\"\\\\u1f72\\\":\\\"\\\\u03b5\\\\u0300\\\",\\\"\\\\u03ae\\\":\\\"\\\\u03b7\\\\u0301\\\",\\\"\\\\u1f74\\\":\\\"\\\\u03b7\\\\u0300\\\",\\\"\\\\u03af\\\":\\\"\\\\u03b9\\\\u0301\\\",\\\"\\\\u1f76\\\":\\\"\\\\u03b9\\\\u0300\\\",\\\"\\\\u03ca\\\":\\\"\\\\u03b9\\\\u0308\\\",\\\"\\\\u0390\\\":\\\"\\\\u03b9\\\\u0308\\\\u0301\\\",\\\"\\\\u1fd2\\\":\\\"\\\\u03b9\\\\u0308\\\\u0300\\\",\\\"\\\\u1fd1\\\":\\\"\\\\u03b9\\\\u0304\\\",\\\"\\\\u1fd0\\\":\\\"\\\\u03b9\\\\u0306\\\",\\\"\\\\u03cc\\\":\\\"\\\\u03bf\\\\u0301\\\",\\\"\\\\u1f78\\\":\\\"\\\\u03bf\\\\u0300\\\",\\\"\\\\u03cd\\\":\\\"\\\\u03c5\\\\u0301\\\",\\\"\\\\u1f7a\\\":\\\"\\\\u03c5\\\\u0300\\\",\\\"\\\\u03cb\\\":\\\"\\\\u03c5\\\\u0308\\\",\\\"\\\\u03b0\\\":\\\"\\\\u03c5\\\\u0308\\\\u0301\\\",\\\"\\\\u1fe2\\\":\\\"\\\\u03c5\\\\u0308\\\\u0300\\\",\\\"\\\\u1fe1\\\":\\\"\\\\u03c5\\\\u0304\\\",\\\"\\\\u1fe0\\\":\\\"\\\\u03c5\\\\u0306\\\",\\\"\\\\u03ce\\\":\\\"\\\\u03c9\\\\u0301\\\",\\\"\\\\u1f7c\\\":\\\"\\\\u03c9\\\\u0300\\\",\\\"\\\\u038e\\\":\\\"\\\\u03a5\\\\u0301\\\",\\\"\\\\u1fea\\\":\\\"\\\\u03a5\\\\u0300\\\",\\\"\\\\u03ab\\\":\\\"\\\\u03a5\\\\u0308\\\",\\\"\\\\u1fe9\\\":\\\"\\\\u03a5\\\\u0304\\\",\\\"\\\\u1fe8\\\":\\\"\\\\u03a5\\\\u0306\\\",\\\"\\\\u038f\\\":\\\"\\\\u03a9\\\\u0301\\\",\\\"\\\\u1ffa\\\":\\\"\\\\u03a9\\\\u0300\\\"},ga=function(){function t(t,e){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode=\\\"math\\\",this.gullet=new da(t,e,this.mode),this.settings=e,this.leftrightDepth=0}var e=t.prototype;return e.expect=function(t,e){if(void 0===e&&(e=!0),this.nextToken.text!==t)throw new i(\\\"Expected '\\\"+t+\\\"', got '\\\"+this.nextToken.text+\\\"'\\\",this.nextToken);e&&this.consume()},e.consume=function(){this.nextToken=this.gullet.expandNextToken()},e.switchMode=function(t){this.mode=t,this.gullet.switchMode(t)},e.parse=function(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set(\\\"\\\\\\\\color\\\",\\\"\\\\\\\\textcolor\\\"),this.consume();var t=this.parseExpression(!1);return this.expect(\\\"EOF\\\",!1),this.gullet.endGroup(),t},e.parseExpression=function(e,r){for(var a=[];;){\\\"math\\\"===this.mode&&this.consumeSpaces();var n=this.nextToken;if(-1!==t.endOfExpression.indexOf(n.text))break;if(r&&n.text===r)break;if(e&&Kr[n.text]&&Kr[n.text].infix)break;var o=this.parseAtom(r);if(!o)break;a.push(o)}return\\\"text\\\"===this.mode&&this.formLigatures(a),this.handleInfixNodes(a)},e.handleInfixNodes=function(t){for(var e,r=-1,a=0;a<t.length;a++){var n=Pt(t[a],\\\"infix\\\");if(n){if(-1!==r)throw new i(\\\"only one infix operator per group\\\",n.token);r=a,e=n.replaceWith}}if(-1!==r&&e){var o,s,h=t.slice(0,r),l=t.slice(r+1);return o=1===h.length&&\\\"ordgroup\\\"===h[0].type?h[0]:{type:\\\"ordgroup\\\",mode:this.mode,body:h},s=1===l.length&&\\\"ordgroup\\\"===l[0].type?l[0]:{type:\\\"ordgroup\\\",mode:this.mode,body:l},[\\\"\\\\\\\\\\\\\\\\abovefrac\\\"===e?this.callFunction(e,[o,t[r],s],[]):this.callFunction(e,[o,s],[])]}return t},e.handleSupSubscript=function(e){var r=this.nextToken,a=r.text;this.consume(),this.consumeSpaces();var n=this.parseGroup(e,!1,t.SUPSUB_GREEDINESS);if(!n)throw new i(\\\"Expected group after '\\\"+a+\\\"'\\\",r);return n},e.handleUnsupportedCmd=function(){for(var t=this.nextToken.text,e=[],r=0;r<t.length;r++)e.push({type:\\\"textord\\\",mode:\\\"text\\\",text:t[r]});var a={type:\\\"text\\\",mode:this.mode,body:e},n={type:\\\"color\\\",mode:this.mode,color:this.settings.errorColor,body:[a]};return this.consume(),n},e.parseAtom=function(t){var e,r,a=this.parseGroup(\\\"atom\\\",!1,null,t);if(\\\"text\\\"===this.mode)return a;for(;;){this.consumeSpaces();var n=this.nextToken;if(\\\"\\\\\\\\limits\\\"===n.text||\\\"\\\\\\\\nolimits\\\"===n.text){var o=Pt(a,\\\"op\\\");if(!o)throw new i(\\\"Limit controls must follow a math operator\\\",n);var s=\\\"\\\\\\\\limits\\\"===n.text;o.limits=s,o.alwaysHandleSupSub=!0,this.consume()}else if(\\\"^\\\"===n.text){if(e)throw new i(\\\"Double superscript\\\",n);e=this.handleSupSubscript(\\\"superscript\\\")}else if(\\\"_\\\"===n.text){if(r)throw new i(\\\"Double subscript\\\",n);r=this.handleSupSubscript(\\\"subscript\\\")}else{if(\\\"'\\\"!==n.text)break;if(e)throw new i(\\\"Double superscript\\\",n);var h={type:\\\"textord\\\",mode:this.mode,text:\\\"\\\\\\\\prime\\\"},l=[h];for(this.consume();\\\"'\\\"===this.nextToken.text;)l.push(h),this.consume();\\\"^\\\"===this.nextToken.text&&l.push(this.handleSupSubscript(\\\"superscript\\\")),e={type:\\\"ordgroup\\\",mode:this.mode,body:l}}}return e||r?{type:\\\"supsub\\\",mode:this.mode,base:a,sup:e,sub:r}:a},e.parseFunction=function(t,e,r){var a=this.nextToken,n=a.text,o=Kr[n];if(!o)return null;if(null!=r&&o.greediness<=r)throw new i(\\\"Got function '\\\"+n+\\\"' with no arguments\\\"+(e?\\\" as \\\"+e:\\\"\\\"),a);if(\\\"text\\\"===this.mode&&!o.allowedInText)throw new i(\\\"Can't use function '\\\"+n+\\\"' in text mode\\\",a);if(\\\"math\\\"===this.mode&&!1===o.allowedInMath)throw new i(\\\"Can't use function '\\\"+n+\\\"' in math mode\\\",a);if(o.argTypes&&\\\"url\\\"===o.argTypes[0]&&this.gullet.lexer.setCatcode(\\\"%\\\",13),o.consumeMode){var s=this.mode;this.switchMode(o.consumeMode),this.consume(),this.switchMode(s)}else this.consume();var h=this.parseArguments(n,o),l=h.args,m=h.optArgs;return this.callFunction(n,l,m,a,t)},e.callFunction=function(t,e,r,a,n){var o={funcName:t,parser:this,token:a,breakOnTokenText:n},s=Kr[t];if(s&&s.handler)return s.handler(o,e,r);throw new i(\\\"No function handler for \\\"+t)},e.parseArguments=function(t,e){var r=e.numArgs+e.numOptionalArgs;if(0===r)return{args:[],optArgs:[]};for(var a=e.greediness,n=[],o=[],s=0;s<r;s++){var h=e.argTypes&&e.argTypes[s],l=s<e.numOptionalArgs;s>0&&!l&&this.consumeSpaces(),0!==s||l||\\\"math\\\"!==this.mode||this.consumeSpaces();var m=this.nextToken,c=this.parseGroupOfType(\\\"argument to '\\\"+t+\\\"'\\\",h,l,a);if(!c){if(l){o.push(null);continue}throw new i(\\\"Expected group after '\\\"+t+\\\"'\\\",m)}(l?o:n).push(c)}return{args:n,optArgs:o}},e.parseGroupOfType=function(t,e,r,a){switch(e){case\\\"color\\\":return this.parseColorGroup(r);case\\\"size\\\":return this.parseSizeGroup(r);case\\\"url\\\":return this.parseUrlGroup(r);case\\\"math\\\":case\\\"text\\\":return this.parseGroup(t,r,a,void 0,e);case\\\"raw\\\":if(r&&\\\"{\\\"===this.nextToken.text)return null;var n=this.parseStringGroup(\\\"raw\\\",r,!0);if(n)return{type:\\\"raw\\\",mode:\\\"text\\\",string:n.text};throw new i(\\\"Expected raw group\\\",this.nextToken);case\\\"original\\\":case null:case void 0:return this.parseGroup(t,r,a);default:throw new i(\\\"Unknown group type as \\\"+t,this.nextToken)}},e.consumeSpaces=function(){for(;\\\" \\\"===this.nextToken.text;)this.consume()},e.parseStringGroup=function(t,e,r){var a=e?\\\"[\\\":\\\"{\\\",n=e?\\\"]\\\":\\\"}\\\",o=this.nextToken;if(o.text!==a){if(e)return null;if(r&&\\\"EOF\\\"!==o.text&&/[^{}[\\\\]]/.test(o.text))return this.gullet.lexer.setCatcode(\\\"%\\\",14),this.consume(),o}var s=this.mode;this.mode=\\\"text\\\",this.expect(a);for(var h=\\\"\\\",l=this.nextToken,m=0,c=l;r&&m>0||this.nextToken.text!==n;){switch(this.nextToken.text){case\\\"EOF\\\":throw new i(\\\"Unexpected end of input in \\\"+t,l.range(c,h));case a:m++;break;case n:m--}h+=(c=this.nextToken).text,this.consume()}return this.mode=s,this.gullet.lexer.setCatcode(\\\"%\\\",14),this.expect(n),l.range(c,h)},e.parseRegexGroup=function(t,e){var r=this.mode;this.mode=\\\"text\\\";for(var a=this.nextToken,n=a,o=\\\"\\\";\\\"EOF\\\"!==this.nextToken.text&&t.test(o+this.nextToken.text);)o+=(n=this.nextToken).text,this.consume();if(\\\"\\\"===o)throw new i(\\\"Invalid \\\"+e+\\\": '\\\"+a.text+\\\"'\\\",a);return this.mode=r,a.range(n,o)},e.parseColorGroup=function(t){var e=this.parseStringGroup(\\\"color\\\",t);if(!e)return null;var r=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(e.text);if(!r)throw new i(\\\"Invalid color: '\\\"+e.text+\\\"'\\\",e);var a=r[0];return/^[0-9a-f]{6}$/i.test(a)&&(a=\\\"#\\\"+a),{type:\\\"color-token\\\",mode:this.mode,color:a}},e.parseSizeGroup=function(t){var e,r=!1;if(!(e=t||\\\"{\\\"===this.nextToken.text?this.parseStringGroup(\\\"size\\\",t):this.parseRegexGroup(/^[-+]? *(?:$|\\\\d+|\\\\d+\\\\.\\\\d*|\\\\.\\\\d*) *[a-z]{0,2} *$/,\\\"size\\\")))return null;t||0!==e.text.length||(e.text=\\\"0pt\\\",r=!0);var a=/([-+]?) *(\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+) *([a-z]{2})/.exec(e.text);if(!a)throw new i(\\\"Invalid size: '\\\"+e.text+\\\"'\\\",e);var n,o={number:+(a[1]+a[2]),unit:a[3]};if(\\\"string\\\"!=typeof(n=o)&&(n=n.unit),!(n in kt||n in St||\\\"ex\\\"===n))throw new i(\\\"Invalid unit: '\\\"+o.unit+\\\"'\\\",e);return{type:\\\"size\\\",mode:this.mode,value:o,isBlank:r}},e.parseUrlGroup=function(t){var e=this.parseStringGroup(\\\"url\\\",t,!0);if(!e)return null;var r=e.text.replace(/\\\\\\\\([#$%&~_^{}])/g,\\\"$1\\\"),a=/^\\\\s*([^\\\\\\\\\\\\/#]*?)(?::|�*58|�*3a)/i.exec(r);a=null!=a?a[1]:\\\"_relative\\\";var n=this.settings.allowedProtocols;if(!c.contains(n,\\\"*\\\")&&!c.contains(n,a))throw new i(\\\"Forbidden protocol '\\\"+a+\\\"'\\\",e);return{type:\\\"url\\\",mode:this.mode,url:r}},e.parseGroup=function(e,r,n,o,s){var h,l,m=this.mode,c=this.nextToken,u=c.text;if(s&&this.switchMode(s),r?\\\"[\\\"===u:\\\"{\\\"===u||\\\"\\\\\\\\begingroup\\\"===u){h=t.endOfGroup[u],this.gullet.beginGroup(),this.consume();var d=this.parseExpression(!1,h),p=this.nextToken;this.gullet.endGroup(),l={type:\\\"ordgroup\\\",mode:this.mode,loc:a.range(c,p),body:d,semisimple:\\\"\\\\\\\\begingroup\\\"===u||void 0}}else if(r)l=null;else if(null==(l=this.parseFunction(o,e,n)||this.parseSymbol())&&\\\"\\\\\\\\\\\"===u[0]&&!ua.hasOwnProperty(u)){if(this.settings.throwOnError)throw new i(\\\"Undefined control sequence: \\\"+u,c);l=this.handleUnsupportedCmd()}return s&&this.switchMode(m),h&&this.expect(h),l},e.formLigatures=function(t){for(var e=t.length-1,r=0;r<e;++r){var n=t[r],o=n.text;\\\"-\\\"===o&&\\\"-\\\"===t[r+1].text&&(r+1<e&&\\\"-\\\"===t[r+2].text?(t.splice(r,3,{type:\\\"textord\\\",mode:\\\"text\\\",loc:a.range(n,t[r+2]),text:\\\"---\\\"}),e-=2):(t.splice(r,2,{type:\\\"textord\\\",mode:\\\"text\\\",loc:a.range(n,t[r+1]),text:\\\"--\\\"}),e-=1)),\\\"'\\\"!==o&&\\\"`\\\"!==o||t[r+1].text!==o||(t.splice(r,2,{type:\\\"textord\\\",mode:\\\"text\\\",loc:a.range(n,t[r+1]),text:o+o}),e-=1)}},e.parseSymbol=function(){var t=this.nextToken,e=t.text;if(/^\\\\\\\\verb[^a-zA-Z]/.test(e)){this.consume();var r=e.slice(5),n=\\\"*\\\"===r.charAt(0);if(n&&(r=r.slice(1)),r.length<2||r.charAt(0)!==r.slice(-1))throw new i(\\\"\\\\\\\\verb assertion failed --\\\\n please report what input caused this bug\\\");return{type:\\\"verb\\\",mode:\\\"text\\\",body:r=r.slice(1,-1),star:n}}fa.hasOwnProperty(e[0])&&!_[this.mode][e[0]]&&(this.settings.strict&&\\\"math\\\"===this.mode&&this.settings.reportNonstrict(\\\"unicodeTextInMathMode\\\",'Accented Unicode text character \\\"'+e[0]+'\\\" used in math mode',t),e=fa[e[0]]+e.substr(1));var o,s=Qr.exec(e);if(s&&(\\\"i\\\"===(e=e.substring(0,s.index))?e=\\\"\\\\u0131\\\":\\\"j\\\"===e&&(e=\\\"\\\\u0237\\\")),_[this.mode][e]){this.settings.strict&&\\\"math\\\"===this.mode&&\\\"\\\\xc7\\\\xd0\\\\xde\\\\xe7\\\\xfe\\\".indexOf(e)>=0&&this.settings.reportNonstrict(\\\"unicodeTextInMathMode\\\",'Latin-1/Unicode text character \\\"'+e[0]+'\\\" used in math mode',t);var h,l=_[this.mode][e].group,m=a.range(t);if(G.hasOwnProperty(l)){var c=l;h={type:\\\"atom\\\",mode:this.mode,family:c,loc:m,text:e}}else h={type:l,mode:this.mode,loc:m,text:e};o=h}else{if(!(e.charCodeAt(0)>=128))return null;this.settings.strict&&(z(e.charCodeAt(0))?\\\"math\\\"===this.mode&&this.settings.reportNonstrict(\\\"unicodeTextInMathMode\\\",'Unicode text character \\\"'+e[0]+'\\\" used in math mode',t):this.settings.reportNonstrict(\\\"unknownSymbol\\\",'Unrecognized Unicode character \\\"'+e[0]+'\\\" ('+e.charCodeAt(0)+\\\")\\\",t)),o={type:\\\"textord\\\",mode:this.mode,loc:a.range(t),text:e}}if(this.consume(),s)for(var u=0;u<s[0].length;u++){var d=s[0][u];if(!pa[d])throw new i(\\\"Unknown accent ' \\\"+d+\\\"'\\\",t);var p=pa[d][this.mode];if(!p)throw new i(\\\"Accent \\\"+d+\\\" unsupported in \\\"+this.mode+\\\" mode\\\",t);o={type:\\\"accent\\\",mode:this.mode,loc:a.range(t),label:p,isStretchy:!1,isShifty:!0,base:o}}return o},t}();ga.endOfExpression=[\\\"}\\\",\\\"\\\\\\\\endgroup\\\",\\\"\\\\\\\\end\\\",\\\"\\\\\\\\right\\\",\\\"&\\\"],ga.endOfGroup={\\\"[\\\":\\\"]\\\",\\\"{\\\":\\\"}\\\",\\\"\\\\\\\\begingroup\\\":\\\"\\\\\\\\endgroup\\\"},ga.SUPSUB_GREEDINESS=1;var xa=function(t,e){if(!(\\\"string\\\"==typeof t||t instanceof String))throw new TypeError(\\\"KaTeX can only parse string typed expression\\\");var r=new ga(t,e);delete r.gullet.macros.current[\\\"\\\\\\\\df@tag\\\"];var a=r.parse();if(r.gullet.macros.get(\\\"\\\\\\\\df@tag\\\")){if(!e.displayMode)throw new i(\\\"\\\\\\\\tag works only in display equations\\\");r.gullet.feed(\\\"\\\\\\\\df@tag\\\"),a=[{type:\\\"tag\\\",mode:\\\"text\\\",body:a,tag:r.parse()}]}return a},va=function(t,e,r){e.textContent=\\\"\\\";var a=ya(t,r).toNode();e.appendChild(a)};\\\"undefined\\\"!=typeof document&&\\\"CSS1Compat\\\"!==document.compatMode&&(\\\"undefined\\\"!=typeof console&&console.warn(\\\"Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype.\\\"),va=function(){throw new i(\\\"KaTeX doesn't work in quirks mode.\\\")});var ba=function(t,e,r){if(r.throwOnError||!(t instanceof i))throw t;var a=Lt.makeSpan([\\\"katex-error\\\"],[new E(e)]);return a.setAttribute(\\\"title\\\",t.toString()),a.setAttribute(\\\"style\\\",\\\"color:\\\"+r.errorColor),a},ya=function(t,e){var r=new u(e);try{var a=xa(t,r);return Se(a,t,r)}catch(e){return ba(e,t,r)}},wa={version:\\\"0.10.2\\\",render:va,renderToString:function(t,e){return ya(t,e).toMarkup()},ParseError:i,__parse:function(t,e){var r=new u(e);return xa(t,r)},__renderToDomTree:ya,__renderToHTMLTree:function(t,e){var r=new u(e);try{return function(t,e,r){var a=me(t,we(r)),n=Lt.makeSpan([\\\"katex\\\"],[a]);return ke(n,r)}(xa(t,r),0,r)}catch(e){return ba(e,t,r)}},__setFontMetrics:function(t,e){P[t]=e},__defineSymbol:W,__defineMacro:oa,__domTree:{Span:N,Anchor:I,SymbolNode:E,SvgNode:R,PathNode:L,LineNode:H}};e.default=wa}]).default});\\n\\n})(!$tw.browser ? $tw.fakeDocument : window.document)\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/katex/katex.min.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/katex/mhchem.min.js\": {\n \"text\": \"/* eslint-disable */\\n/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */\\n/* vim: set ts=2 et sw=2 tw=80: */\\n\\n/*************************************************************\\n *\\n * KaTeX mhchem.js\\n *\\n * This file implements a KaTeX version of mhchem version 3.3.0.\\n * It is adapted from MathJax/extensions/TeX/mhchem.js\\n * It differs from the MathJax version as follows:\\n * 1. The interface is changed so that it can be called from KaTeX, not MathJax.\\n * 2. \\\\rlap and \\\\llap are replaced with \\\\mathrlap and \\\\mathllap.\\n * 3. Four lines of code are edited in order to use \\\\raisebox instead of \\\\raise.\\n * 4. The reaction arrow code is simplified. All reaction arrows are rendered\\n * using KaTeX extensible arrows instead of building non-extensible arrows.\\n * 5. \\\\tripledash vertical alignment is slightly adjusted.\\n *\\n * This code, as other KaTeX code, is released under the MIT license.\\n * \\n * /*************************************************************\\n *\\n * MathJax/extensions/TeX/mhchem.js\\n *\\n * Implements the \\\\ce command for handling chemical formulas\\n * from the mhchem LaTeX package.\\n *\\n * ---------------------------------------------------------------------\\n *\\n * Copyright (c) 2011-2015 The MathJax Consortium\\n * Copyright (c) 2015-2018 Martin Hensel\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n//\\n// Coding Style\\n// - use '' for identifiers that can by minified/uglified\\n// - use \\\"\\\" for strings that need to stay untouched\\n\\n// version: \\\"3.3.0\\\" for MathJax and KaTeX\\n\\n/****************************************\\n*****************************************\\n* TiddlyWiki: moved the katex-module definitions to wrapper.js\\n*****************************************\\n*****************************************/\\n\\n //\\n // This is the main function for handing the \\\\ce and \\\\pu commands.\\n // It takes the argument to \\\\ce or \\\\pu and returns the corresponding TeX string.\\n //\\n\\n // TiddlyWiki: replaced `var chemParse =` with `module.exports =` ... no more modifications in this file\\n module.exports = function (tokens, stateMachine) {\\n // Recreate the argument string from KaTeX's array of tokens.\\n var str = \\\"\\\";\\n var expectedLoc = tokens[tokens.length - 1].loc.start\\n for (var i = tokens.length - 1; i >= 0; i--) {\\n if(tokens[i].loc.start > expectedLoc) {\\n // context.consumeArgs has eaten a space.\\n str += \\\" \\\";\\n expectedLoc = tokens[i].loc.start;\\n }\\n str += tokens[i].text;\\n expectedLoc += tokens[i].text.length;\\n }\\n var tex = texify.go(mhchemParser.go(str, stateMachine));\\n return tex;\\n };\\n\\n //\\n // Core parser for mhchem syntax (recursive)\\n //\\n /** @type {MhchemParser} */\\n var mhchemParser = {\\n //\\n // Parses mchem \\\\ce syntax\\n //\\n // Call like\\n // go(\\\"H2O\\\");\\n //\\n go: function (input, stateMachine) {\\n if (!input) { return []; }\\n if (stateMachine === undefined) { stateMachine = 'ce'; }\\n var state = '0';\\n\\n //\\n // String buffers for parsing:\\n //\\n // buffer.a == amount\\n // buffer.o == element\\n // buffer.b == left-side superscript\\n // buffer.p == left-side subscript\\n // buffer.q == right-side subscript\\n // buffer.d == right-side superscript\\n //\\n // buffer.r == arrow\\n // buffer.rdt == arrow, script above, type\\n // buffer.rd == arrow, script above, content\\n // buffer.rqt == arrow, script below, type\\n // buffer.rq == arrow, script below, content\\n //\\n // buffer.text_\\n // buffer.rm\\n // etc.\\n //\\n // buffer.parenthesisLevel == int, starting at 0\\n // buffer.sb == bool, space before\\n // buffer.beginsWithBond == bool\\n //\\n // These letters are also used as state names.\\n //\\n // Other states:\\n // 0 == begin of main part (arrow/operator unlikely)\\n // 1 == next entity\\n // 2 == next entity (arrow/operator unlikely)\\n // 3 == next atom\\n // c == macro\\n //\\n /** @type {Buffer} */\\n var buffer = {};\\n buffer['parenthesisLevel'] = 0;\\n\\n input = input.replace(/\\\\n/g, \\\" \\\");\\n input = input.replace(/[\\\\u2212\\\\u2013\\\\u2014\\\\u2010]/g, \\\"-\\\");\\n input = input.replace(/[\\\\u2026]/g, \\\"...\\\");\\n\\n //\\n // Looks through mhchemParser.transitions, to execute a matching action\\n // (recursive)\\n //\\n var lastInput;\\n var watchdog = 10;\\n /** @type {ParserOutput[]} */\\n var output = [];\\n while (true) {\\n if (lastInput !== input) {\\n watchdog = 10;\\n lastInput = input;\\n } else {\\n watchdog--;\\n }\\n //\\n // Find actions in transition table\\n //\\n var machine = mhchemParser.stateMachines[stateMachine];\\n var t = machine.transitions[state] || machine.transitions['*'];\\n iterateTransitions:\\n for (var i=0; i<t.length; i++) {\\n var matches = mhchemParser.patterns.match_(t[i].pattern, input);\\n if (matches) {\\n //\\n // Execute actions\\n //\\n var task = t[i].task;\\n for (var iA=0; iA<task.action_.length; iA++) {\\n var o;\\n //\\n // Find and execute action\\n //\\n if (machine.actions[task.action_[iA].type_]) {\\n o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);\\n } else if (mhchemParser.actions[task.action_[iA].type_]) {\\n o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option);\\n } else {\\n throw [\\\"MhchemBugA\\\", \\\"mhchem bug A. Please report. (\\\" + task.action_[iA].type_ + \\\")\\\"]; // Trying to use non-existing action\\n }\\n //\\n // Add output\\n //\\n mhchemParser.concatArray(output, o);\\n }\\n //\\n // Set next state,\\n // Shorten input,\\n // Continue with next character\\n // (= apply only one transition per position)\\n //\\n state = task.nextState || state;\\n if (input.length > 0) {\\n if (!task.revisit) {\\n input = matches.remainder;\\n }\\n if (!task.toContinue) {\\n break iterateTransitions;\\n }\\n } else {\\n return output;\\n }\\n }\\n }\\n //\\n // Prevent infinite loop\\n //\\n if (watchdog <= 0) {\\n throw [\\\"MhchemBugU\\\", \\\"mhchem bug U. Please report.\\\"]; // Unexpected character\\n }\\n }\\n },\\n concatArray: function (a, b) {\\n if (b) {\\n if (Array.isArray(b)) {\\n for (var iB=0; iB<b.length; iB++) {\\n a.push(b[iB]);\\n }\\n } else {\\n a.push(b);\\n }\\n }\\n },\\n\\n patterns: {\\n //\\n // Matching patterns\\n // either regexps or function that return null or {match_:\\\"a\\\", remainder:\\\"bc\\\"}\\n //\\n patterns: {\\n // property names must not look like integers (\\\"2\\\") for correct property traversal order, later on\\n 'empty': /^$/,\\n 'else': /^./,\\n 'else2': /^./,\\n 'space': /^\\\\s/,\\n 'space A': /^\\\\s(?=[A-Z\\\\\\\\$])/,\\n 'space$': /^\\\\s$/,\\n 'a-z': /^[a-z]/,\\n 'x': /^x/,\\n 'x$': /^x$/,\\n 'i$': /^i$/,\\n 'letters': /^(?:[a-zA-Z\\\\u03B1-\\\\u03C9\\\\u0391-\\\\u03A9?@]|(?:\\\\\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\\\s+|\\\\{\\\\}|(?![a-zA-Z]))))+/,\\n '\\\\\\\\greek': /^\\\\\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\\\s+|\\\\{\\\\}|(?![a-zA-Z]))/,\\n 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/,\\n '$one lowercase latin letter$ $': /^\\\\$(?:([a-z])(?:$|[^a-zA-Z]))\\\\$$/,\\n 'one lowercase greek letter $': /^(?:\\\\$?[\\\\u03B1-\\\\u03C9]\\\\$?|\\\\$?\\\\\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\\\s*\\\\$?)(?:\\\\s+|\\\\{\\\\}|(?![a-zA-Z]))$/,\\n 'digits': /^[0-9]+/,\\n '-9.,9': /^[+\\\\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\\\.[0-9]+))/,\\n '-9.,9 no missing 0': /^[+\\\\-]?[0-9]+(?:[.,][0-9]+)?/,\\n '(-)(9.,9)(e)(99)': function (input) {\\n var m = input.match(/^(\\\\+\\\\-|\\\\+\\\\/\\\\-|\\\\+|\\\\-|\\\\\\\\pm\\\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\\\.[0-9]+))?(\\\\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\\\.[0-9]+))\\\\))?(?:([eE]|\\\\s*(\\\\*|x|\\\\\\\\times|\\\\u00D7)\\\\s*10\\\\^)([+\\\\-]?[0-9]+|\\\\{[+\\\\-]?[0-9]+\\\\}))?/);\\n if (m && m[0]) {\\n return { match_: m.splice(1), remainder: input.substr(m[0].length) };\\n }\\n return null;\\n },\\n '(-)(9)^(-9)': function (input) {\\n var m = input.match(/^(\\\\+\\\\-|\\\\+\\\\/\\\\-|\\\\+|\\\\-|\\\\\\\\pm\\\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\\\.[0-9]+)?)\\\\^([+\\\\-]?[0-9]+|\\\\{[+\\\\-]?[0-9]+\\\\})/);\\n if (m && m[0]) {\\n return { match_: m.splice(1), remainder: input.substr(m[0].length) };\\n }\\n return null;\\n },\\n 'state of aggregation $': function (input) { // ... or crystal system\\n var a = mhchemParser.patterns.findObserveGroups(input, \\\"\\\", /^\\\\([a-z]{1,3}(?=[\\\\),])/, \\\")\\\", \\\"\\\"); // (aq), (aq,$\\\\infty$), (aq, sat)\\n if (a && a.remainder.match(/^($|[\\\\s,;\\\\)\\\\]\\\\}])/)) { return a; } // AND end of 'phrase'\\n var m = input.match(/^(?:\\\\((?:\\\\\\\\ca\\\\s?)?\\\\$[amothc]\\\\$\\\\))/); // OR crystal system ($o$) (\\\\ca$c$)\\n if (m) {\\n return { match_: m[0], remainder: input.substr(m[0].length) };\\n }\\n return null;\\n },\\n '_{(state of aggregation)}$': /^_\\\\{(\\\\([a-z]{1,3}\\\\))\\\\}/,\\n '{[(': /^(?:\\\\\\\\\\\\{|\\\\[|\\\\()/,\\n ')]}': /^(?:\\\\)|\\\\]|\\\\\\\\\\\\})/,\\n ', ': /^[,;]\\\\s*/,\\n ',': /^[,;]/,\\n '.': /^[.]/,\\n '. ': /^([.\\\\u22C5\\\\u00B7\\\\u2022])\\\\s*/,\\n '...': /^\\\\.\\\\.\\\\.(?=$|[^.])/,\\n '* ': /^([*])\\\\s*/,\\n '^{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"^{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '^($...$)': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"^\\\", \\\"$\\\", \\\"$\\\", \\\"\\\"); },\\n '^a': /^\\\\^([0-9]+|[^\\\\\\\\_])/,\\n '^\\\\\\\\x{}{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"^\\\", /^\\\\\\\\[a-zA-Z]+\\\\{/, \\\"}\\\", \\\"\\\", \\\"\\\", \\\"{\\\", \\\"}\\\", \\\"\\\", true); },\\n '^\\\\\\\\x{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"^\\\", /^\\\\\\\\[a-zA-Z]+\\\\{/, \\\"}\\\", \\\"\\\"); },\\n '^\\\\\\\\x': /^\\\\^(\\\\\\\\[a-zA-Z]+)\\\\s*/,\\n '^(-1)': /^\\\\^(-?\\\\d+)/,\\n '\\\\'': /^'/,\\n '_{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"_{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '_($...$)': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"_\\\", \\\"$\\\", \\\"$\\\", \\\"\\\"); },\\n '_9': /^_([+\\\\-]?[0-9]+|[^\\\\\\\\])/,\\n '_\\\\\\\\x{}{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"_\\\", /^\\\\\\\\[a-zA-Z]+\\\\{/, \\\"}\\\", \\\"\\\", \\\"\\\", \\\"{\\\", \\\"}\\\", \\\"\\\", true); },\\n '_\\\\\\\\x{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"_\\\", /^\\\\\\\\[a-zA-Z]+\\\\{/, \\\"}\\\", \\\"\\\"); },\\n '_\\\\\\\\x': /^_(\\\\\\\\[a-zA-Z]+)\\\\s*/,\\n '^_': /^(?:\\\\^(?=_)|\\\\_(?=\\\\^)|[\\\\^_]$)/,\\n '{}': /^\\\\{\\\\}/,\\n '{...}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\", \\\"{\\\", \\\"}\\\", \\\"\\\"); },\\n '{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '$...$': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\", \\\"$\\\", \\\"$\\\", \\\"\\\"); },\\n '${(...)}$': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"${\\\", \\\"\\\", \\\"\\\", \\\"}$\\\"); },\\n '$(...)$': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"$\\\", \\\"\\\", \\\"\\\", \\\"$\\\"); },\\n '=<>': /^[=<>]/,\\n '#': /^[#\\\\u2261]/,\\n '+': /^\\\\+/,\\n '-$': /^-(?=[\\\\s_},;\\\\]/]|$|\\\\([a-z]+\\\\))/, // -space -, -; -] -/ -$ -state-of-aggregation\\n '-9': /^-(?=[0-9])/,\\n '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\\\\s,;\\\\)\\\\]\\\\}]))/,\\n '-': /^-/,\\n 'pm-operator': /^(?:\\\\\\\\pm|\\\\$\\\\\\\\pm\\\\$|\\\\+-|\\\\+\\\\/-)/,\\n 'operator': /^(?:\\\\+|(?:[\\\\-=<>]|<<|>>|\\\\\\\\approx|\\\\$\\\\\\\\approx\\\\$)(?=\\\\s|$|-?[0-9]))/,\\n 'arrowUpDown': /^(?:v|\\\\(v\\\\)|\\\\^|\\\\(\\\\^\\\\))(?=$|[\\\\s,;\\\\)\\\\]\\\\}])/,\\n '\\\\\\\\bond{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\bond{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\\\\u2192\\\\u27F6\\\\u21CC])/,\\n 'CMT': /^[CMT](?=\\\\[)/,\\n '[(...)]': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"[\\\", \\\"\\\", \\\"\\\", \\\"]\\\"); },\\n '1st-level escape': /^(&|\\\\\\\\\\\\\\\\|\\\\\\\\hline)\\\\s*/,\\n '\\\\\\\\,': /^(?:\\\\\\\\[,\\\\ ;:])/, // \\\\\\\\x - but output no space before\\n '\\\\\\\\x{}{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\", /^\\\\\\\\[a-zA-Z]+\\\\{/, \\\"}\\\", \\\"\\\", \\\"\\\", \\\"{\\\", \\\"}\\\", \\\"\\\", true); },\\n '\\\\\\\\x{}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\", /^\\\\\\\\[a-zA-Z]+\\\\{/, \\\"}\\\", \\\"\\\"); },\\n '\\\\\\\\ca': /^\\\\\\\\ca(?:\\\\s+|(?![a-zA-Z]))/,\\n '\\\\\\\\x': /^(?:\\\\\\\\[a-zA-Z]+\\\\s*|\\\\\\\\[_&{}%])/,\\n 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, // only those with numbers in front, because the others will be formatted correctly anyway\\n 'others': /^[\\\\/~|]/,\\n '\\\\\\\\frac{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\frac{\\\", \\\"\\\", \\\"\\\", \\\"}\\\", \\\"{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '\\\\\\\\overset{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\overset{\\\", \\\"\\\", \\\"\\\", \\\"}\\\", \\\"{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '\\\\\\\\underset{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\underset{\\\", \\\"\\\", \\\"\\\", \\\"}\\\", \\\"{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '\\\\\\\\underbrace{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\underbrace{\\\", \\\"\\\", \\\"\\\", \\\"}_\\\", \\\"{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '\\\\\\\\color{(...)}0': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\color{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '\\\\\\\\color{(...)}{(...)}1': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\color{\\\", \\\"\\\", \\\"\\\", \\\"}\\\", \\\"{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '\\\\\\\\color(...){(...)}2': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\color\\\", \\\"\\\\\\\\\\\", \\\"\\\", /^(?=\\\\{)/, \\\"{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n '\\\\\\\\ce{(...)}': function (input) { return mhchemParser.patterns.findObserveGroups(input, \\\"\\\\\\\\ce{\\\", \\\"\\\", \\\"\\\", \\\"}\\\"); },\\n 'oxidation$': /^(?:[+-][IVX]+|\\\\\\\\pm\\\\s*0|\\\\$\\\\\\\\pm\\\\$\\\\s*0)$/,\\n 'd-oxidation$': /^(?:[+-]?\\\\s?[IVX]+|\\\\\\\\pm\\\\s*0|\\\\$\\\\\\\\pm\\\\$\\\\s*0)$/, // 0 could be oxidation or charge\\n 'roman numeral': /^[IVX]+/,\\n '1/2$': /^[+\\\\-]?(?:[0-9]+|\\\\$[a-z]\\\\$|[a-z])\\\\/[0-9]+(?:\\\\$[a-z]\\\\$|[a-z])?$/,\\n 'amount': function (input) {\\n var match;\\n // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing\\n match = input.match(/^(?:(?:(?:\\\\([+\\\\-]?[0-9]+\\\\/[0-9]+\\\\)|[+\\\\-]?(?:[0-9]+|\\\\$[a-z]\\\\$|[a-z])\\\\/[0-9]+|[+\\\\-]?[0-9]+[.,][0-9]+|[+\\\\-]?\\\\.[0-9]+|[+\\\\-]?[0-9]+)(?:[a-z](?=\\\\s*[A-Z]))?)|[+\\\\-]?[a-z](?=\\\\s*[A-Z])|\\\\+(?!\\\\s))/);\\n if (match) {\\n return { match_: match[0], remainder: input.substr(match[0].length) };\\n }\\n var a = mhchemParser.patterns.findObserveGroups(input, \\\"\\\", \\\"$\\\", \\\"$\\\", \\\"\\\");\\n if (a) { // e.g. $2n-1$, $-$\\n match = a.match_.match(/^\\\\$(?:\\\\(?[+\\\\-]?(?:[0-9]*[a-z]?[+\\\\-])?[0-9]*[a-z](?:[+\\\\-][0-9]*[a-z]?)?\\\\)?|\\\\+|-)\\\\$$/);\\n if (match) {\\n return { match_: match[0], remainder: input.substr(match[0].length) };\\n }\\n }\\n return null;\\n },\\n 'amount2': function (input) { return this['amount'](input); },\\n '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/,\\n 'formula$': function (input) {\\n if (input.match(/^\\\\([a-z]+\\\\)$/)) { return null; } // state of aggregation = no formula\\n var match = input.match(/^(?:[a-z]|(?:[0-9\\\\ \\\\+\\\\-\\\\,\\\\.\\\\(\\\\)]+[a-z])+[0-9\\\\ \\\\+\\\\-\\\\,\\\\.\\\\(\\\\)]*|(?:[a-z][0-9\\\\ \\\\+\\\\-\\\\,\\\\.\\\\(\\\\)]+)+[a-z]?)$/);\\n if (match) {\\n return { match_: match[0], remainder: input.substr(match[0].length) };\\n }\\n return null;\\n },\\n 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,\\n '/': /^\\\\s*(\\\\/)\\\\s*/,\\n '//': /^\\\\s*(\\\\/\\\\/)\\\\s*/,\\n '*': /^\\\\s*[*.]\\\\s*/\\n },\\n findObserveGroups: function (input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) {\\n /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */\\n var _match = function (input, pattern) {\\n if (typeof pattern === \\\"string\\\") {\\n if (input.indexOf(pattern) !== 0) { return null; }\\n return pattern;\\n } else {\\n var match = input.match(pattern);\\n if (!match) { return null; }\\n return match[0];\\n }\\n };\\n /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */\\n var _findObserveGroups = function (input, i, endChars) {\\n var braces = 0;\\n while (i < input.length) {\\n var a = input.charAt(i);\\n var match = _match(input.substr(i), endChars);\\n if (match !== null && braces === 0) {\\n return { endMatchBegin: i, endMatchEnd: i + match.length };\\n } else if (a === \\\"{\\\") {\\n braces++;\\n } else if (a === \\\"}\\\") {\\n if (braces === 0) {\\n throw [\\\"ExtraCloseMissingOpen\\\", \\\"Extra close brace or missing open brace\\\"];\\n } else {\\n braces--;\\n }\\n }\\n i++;\\n }\\n if (braces > 0) {\\n return null;\\n }\\n return null;\\n };\\n var match = _match(input, begExcl);\\n if (match === null) { return null; }\\n input = input.substr(match.length);\\n match = _match(input, begIncl);\\n if (match === null) { return null; }\\n var e = _findObserveGroups(input, match.length, endIncl || endExcl);\\n if (e === null) { return null; }\\n var match1 = input.substring(0, (endIncl ? e.endMatchEnd : e.endMatchBegin));\\n if (!(beg2Excl || beg2Incl)) {\\n return {\\n match_: match1,\\n remainder: input.substr(e.endMatchEnd)\\n };\\n } else {\\n var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl);\\n if (group2 === null) { return null; }\\n /** @type {string[]} */\\n var matchRet = [match1, group2.match_];\\n return {\\n match_: (combine ? matchRet.join(\\\"\\\") : matchRet),\\n remainder: group2.remainder\\n };\\n }\\n },\\n\\n //\\n // Matching function\\n // e.g. match(\\\"a\\\", input) will look for the regexp called \\\"a\\\" and see if it matches\\n // returns null or {match_:\\\"a\\\", remainder:\\\"bc\\\"}\\n //\\n match_: function (m, input) {\\n var pattern = mhchemParser.patterns.patterns[m];\\n if (pattern === undefined) {\\n throw [\\\"MhchemBugP\\\", \\\"mhchem bug P. Please report. (\\\" + m + \\\")\\\"]; // Trying to use non-existing pattern\\n } else if (typeof pattern === \\\"function\\\") {\\n return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser\\n } else { // RegExp\\n var match = input.match(pattern);\\n if (match) {\\n var mm;\\n if (match[2]) {\\n mm = [ match[1], match[2] ];\\n } else if (match[1]) {\\n mm = match[1];\\n } else {\\n mm = match[0];\\n }\\n return { match_: mm, remainder: input.substr(match[0].length) };\\n }\\n return null;\\n }\\n }\\n },\\n\\n //\\n // Generic state machine actions\\n //\\n actions: {\\n 'a=': function (buffer, m) { buffer.a = (buffer.a || \\\"\\\") + m; },\\n 'b=': function (buffer, m) { buffer.b = (buffer.b || \\\"\\\") + m; },\\n 'p=': function (buffer, m) { buffer.p = (buffer.p || \\\"\\\") + m; },\\n 'o=': function (buffer, m) { buffer.o = (buffer.o || \\\"\\\") + m; },\\n 'q=': function (buffer, m) { buffer.q = (buffer.q || \\\"\\\") + m; },\\n 'd=': function (buffer, m) { buffer.d = (buffer.d || \\\"\\\") + m; },\\n 'rm=': function (buffer, m) { buffer.rm = (buffer.rm || \\\"\\\") + m; },\\n 'text=': function (buffer, m) { buffer.text_ = (buffer.text_ || \\\"\\\") + m; },\\n 'insert': function (buffer, m, a) { return { type_: a }; },\\n 'insert+p1': function (buffer, m, a) { return { type_: a, p1: m }; },\\n 'insert+p1+p2': function (buffer, m, a) { return { type_: a, p1: m[0], p2: m[1] }; },\\n 'copy': function (buffer, m) { return m; },\\n 'rm': function (buffer, m) { return { type_: 'rm', p1: m || \\\"\\\"}; },\\n 'text': function (buffer, m) { return mhchemParser.go(m, 'text'); },\\n '{text}': function (buffer, m) {\\n var ret = [ \\\"{\\\" ];\\n mhchemParser.concatArray(ret, mhchemParser.go(m, 'text'));\\n ret.push(\\\"}\\\");\\n return ret;\\n },\\n 'tex-math': function (buffer, m) { return mhchemParser.go(m, 'tex-math'); },\\n 'tex-math tight': function (buffer, m) { return mhchemParser.go(m, 'tex-math tight'); },\\n 'bond': function (buffer, m, k) { return { type_: 'bond', kind_: k || m }; },\\n 'color0-output': function (buffer, m) { return { type_: 'color0', color: m[0] }; },\\n 'ce': function (buffer, m) { return mhchemParser.go(m); },\\n '1/2': function (buffer, m) {\\n /** @type {ParserOutput[]} */\\n var ret = [];\\n if (m.match(/^[+\\\\-]/)) {\\n ret.push(m.substr(0, 1));\\n m = m.substr(1);\\n }\\n var n = m.match(/^([0-9]+|\\\\$[a-z]\\\\$|[a-z])\\\\/([0-9]+)(\\\\$[a-z]\\\\$|[a-z])?$/);\\n n[1] = n[1].replace(/\\\\$/g, \\\"\\\");\\n ret.push({ type_: 'frac', p1: n[1], p2: n[2] });\\n if (n[3]) {\\n n[3] = n[3].replace(/\\\\$/g, \\\"\\\");\\n ret.push({ type_: 'tex-math', p1: n[3] });\\n }\\n return ret;\\n },\\n '9,9': function (buffer, m) { return mhchemParser.go(m, '9,9'); }\\n },\\n //\\n // createTransitions\\n // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] }\\n // with expansion of 'a|b' to 'a' and 'b' (at 2 places)\\n //\\n createTransitions: function (o) {\\n var pattern, state;\\n /** @type {string[]} */\\n var stateArray;\\n var i;\\n //\\n // 1. Collect all states\\n //\\n /** @type {Transitions} */\\n var transitions = {};\\n for (pattern in o) {\\n for (state in o[pattern]) {\\n stateArray = state.split(\\\"|\\\");\\n o[pattern][state].stateArray = stateArray;\\n for (i=0; i<stateArray.length; i++) {\\n transitions[stateArray[i]] = [];\\n }\\n }\\n }\\n //\\n // 2. Fill states\\n //\\n for (pattern in o) {\\n for (state in o[pattern]) {\\n stateArray = o[pattern][state].stateArray || [];\\n for (i=0; i<stateArray.length; i++) {\\n //\\n // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}]\\n // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).)\\n //\\n /** @type {any} */\\n var p = o[pattern][state];\\n if (p.action_) {\\n p.action_ = [].concat(p.action_);\\n for (var k=0; k<p.action_.length; k++) {\\n if (typeof p.action_[k] === \\\"string\\\") {\\n p.action_[k] = { type_: p.action_[k] };\\n }\\n }\\n } else {\\n p.action_ = [];\\n }\\n //\\n // 2.b Multi-insert\\n //\\n var patternArray = pattern.split(\\\"|\\\");\\n for (var j=0; j<patternArray.length; j++) {\\n if (stateArray[i] === '*') { // insert into all\\n for (var t in transitions) {\\n transitions[t].push({ pattern: patternArray[j], task: p });\\n }\\n } else {\\n transitions[stateArray[i]].push({ pattern: patternArray[j], task: p });\\n }\\n }\\n }\\n }\\n }\\n return transitions;\\n },\\n stateMachines: {}\\n };\\n\\n //\\n // Definition of state machines\\n //\\n mhchemParser.stateMachines = {\\n //\\n // \\\\ce state machines\\n //\\n //#region ce\\n 'ce': { // main parser\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': { action_: 'output' } },\\n 'else': {\\n '0|1|2': { action_: 'beginsWithBond=false', revisit: true, toContinue: true } },\\n 'oxidation$': {\\n '0': { action_: 'oxidation-output' } },\\n 'CMT': {\\n 'r': { action_: 'rdt=', nextState: 'rt' },\\n 'rd': { action_: 'rqt=', nextState: 'rdt' } },\\n 'arrowUpDown': {\\n '0|1|2|as': { action_: [ 'sb=false', 'output', 'operator' ], nextState: '1' } },\\n 'uprightEntities': {\\n '0|1|2': { action_: [ 'o=', 'output' ], nextState: '1' } },\\n 'orbital': {\\n '0|1|2|3': { action_: 'o=', nextState: 'o' } },\\n '->': {\\n '0|1|2|3': { action_: 'r=', nextState: 'r' },\\n 'a|as': { action_: [ 'output', 'r=' ], nextState: 'r' },\\n '*': { action_: [ 'output', 'r=' ], nextState: 'r' } },\\n '+': {\\n 'o': { action_: 'd= kv', nextState: 'd' },\\n 'd|D': { action_: 'd=', nextState: 'd' },\\n 'q': { action_: 'd=', nextState: 'qd' },\\n 'qd|qD': { action_: 'd=', nextState: 'qd' },\\n 'dq': { action_: [ 'output', 'd=' ], nextState: 'd' },\\n '3': { action_: [ 'sb=false', 'output', 'operator' ], nextState: '0' } },\\n 'amount': {\\n '0|2': { action_: 'a=', nextState: 'a' } },\\n 'pm-operator': {\\n '0|1|2|a|as': { action_: [ 'sb=false', 'output', { type_: 'operator', option: '\\\\\\\\pm' } ], nextState: '0' } },\\n 'operator': {\\n '0|1|2|a|as': { action_: [ 'sb=false', 'output', 'operator' ], nextState: '0' } },\\n '-$': {\\n 'o|q': { action_: [ 'charge or bond', 'output' ], nextState: 'qd' },\\n 'd': { action_: 'd=', nextState: 'd' },\\n 'D': { action_: [ 'output', { type_: 'bond', option: \\\"-\\\" } ], nextState: '3' },\\n 'q': { action_: 'd=', nextState: 'qd' },\\n 'qd': { action_: 'd=', nextState: 'qd' },\\n 'qD|dq': { action_: [ 'output', { type_: 'bond', option: \\\"-\\\" } ], nextState: '3' } },\\n '-9': {\\n '3|o': { action_: [ 'output', { type_: 'insert', option: 'hyphen' } ], nextState: '3' } },\\n '- orbital overlap': {\\n 'o': { action_: [ 'output', { type_: 'insert', option: 'hyphen' } ], nextState: '2' },\\n 'd': { action_: [ 'output', { type_: 'insert', option: 'hyphen' } ], nextState: '2' } },\\n '-': {\\n '0|1|2': { action_: [ { type_: 'output', option: 1 }, 'beginsWithBond=true', { type_: 'bond', option: \\\"-\\\" } ], nextState: '3' },\\n '3': { action_: { type_: 'bond', option: \\\"-\\\" } },\\n 'a': { action_: [ 'output', { type_: 'insert', option: 'hyphen' } ], nextState: '2' },\\n 'as': { action_: [ { type_: 'output', option: 2 }, { type_: 'bond', option: \\\"-\\\" } ], nextState: '3' },\\n 'b': { action_: 'b=' },\\n 'o': { action_: { type_: '- after o/d', option: false }, nextState: '2' },\\n 'q': { action_: { type_: '- after o/d', option: false }, nextState: '2' },\\n 'd|qd|dq': { action_: { type_: '- after o/d', option: true }, nextState: '2' },\\n 'D|qD|p': { action_: [ 'output', { type_: 'bond', option: \\\"-\\\" } ], nextState: '3' } },\\n 'amount2': {\\n '1|3': { action_: 'a=', nextState: 'a' } },\\n 'letters': {\\n '0|1|2|3|a|as|b|p|bp|o': { action_: 'o=', nextState: 'o' },\\n 'q|dq': { action_: ['output', 'o='], nextState: 'o' },\\n 'd|D|qd|qD': { action_: 'o after d', nextState: 'o' } },\\n 'digits': {\\n 'o': { action_: 'q=', nextState: 'q' },\\n 'd|D': { action_: 'q=', nextState: 'dq' },\\n 'q': { action_: [ 'output', 'o=' ], nextState: 'o' },\\n 'a': { action_: 'o=', nextState: 'o' } },\\n 'space A': {\\n 'b|p|bp': {} },\\n 'space': {\\n 'a': { nextState: 'as' },\\n '0': { action_: 'sb=false' },\\n '1|2': { action_: 'sb=true' },\\n 'r|rt|rd|rdt|rdq': { action_: 'output', nextState: '0' },\\n '*': { action_: [ 'output', 'sb=true' ], nextState: '1'} },\\n '1st-level escape': {\\n '1|2': { action_: [ 'output', { type_: 'insert+p1', option: '1st-level escape' } ] },\\n '*': { action_: [ 'output', { type_: 'insert+p1', option: '1st-level escape' } ], nextState: '0' } },\\n '[(...)]': {\\n 'r|rt': { action_: 'rd=', nextState: 'rd' },\\n 'rd|rdt': { action_: 'rq=', nextState: 'rdq' } },\\n '...': {\\n 'o|d|D|dq|qd|qD': { action_: [ 'output', { type_: 'bond', option: \\\"...\\\" } ], nextState: '3' },\\n '*': { action_: [ { type_: 'output', option: 1 }, { type_: 'insert', option: 'ellipsis' } ], nextState: '1' } },\\n '. |* ': {\\n '*': { action_: [ 'output', { type_: 'insert', option: 'addition compound' } ], nextState: '1' } },\\n 'state of aggregation $': {\\n '*': { action_: [ 'output', 'state of aggregation' ], nextState: '1' } },\\n '{[(': {\\n 'a|as|o': { action_: [ 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' },\\n '0|1|2|3': { action_: [ 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' },\\n '*': { action_: [ 'output', 'o=', 'output', 'parenthesisLevel++' ], nextState: '2' } },\\n ')]}': {\\n '0|1|2|3|b|p|bp|o': { action_: [ 'o=', 'parenthesisLevel--' ], nextState: 'o' },\\n 'a|as|d|D|q|qd|qD|dq': { action_: [ 'output', 'o=', 'parenthesisLevel--' ], nextState: 'o' } },\\n ', ': {\\n '*': { action_: [ 'output', 'comma' ], nextState: '0' } },\\n '^_': { // ^ and _ without a sensible argument\\n '*': { } },\\n '^{(...)}|^($...$)': {\\n '0|1|2|as': { action_: 'b=', nextState: 'b' },\\n 'p': { action_: 'b=', nextState: 'bp' },\\n '3|o': { action_: 'd= kv', nextState: 'D' },\\n 'q': { action_: 'd=', nextState: 'qD' },\\n 'd|D|qd|qD|dq': { action_: [ 'output', 'd=' ], nextState: 'D' } },\\n '^a|^\\\\\\\\x{}{}|^\\\\\\\\x{}|^\\\\\\\\x|\\\\'': {\\n '0|1|2|as': { action_: 'b=', nextState: 'b' },\\n 'p': { action_: 'b=', nextState: 'bp' },\\n '3|o': { action_: 'd= kv', nextState: 'd' },\\n 'q': { action_: 'd=', nextState: 'qd' },\\n 'd|qd|D|qD': { action_: 'd=' },\\n 'dq': { action_: [ 'output', 'd=' ], nextState: 'd' } },\\n '_{(state of aggregation)}$': {\\n 'd|D|q|qd|qD|dq': { action_: [ 'output', 'q=' ], nextState: 'q' } },\\n '_{(...)}|_($...$)|_9|_\\\\\\\\x{}{}|_\\\\\\\\x{}|_\\\\\\\\x': {\\n '0|1|2|as': { action_: 'p=', nextState: 'p' },\\n 'b': { action_: 'p=', nextState: 'bp' },\\n '3|o': { action_: 'q=', nextState: 'q' },\\n 'd|D': { action_: 'q=', nextState: 'dq' },\\n 'q|qd|qD|dq': { action_: [ 'output', 'q=' ], nextState: 'q' } },\\n '=<>': {\\n '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { action_: [ { type_: 'output', option: 2 }, 'bond' ], nextState: '3' } },\\n '#': {\\n '0|1|2|3|a|as|o': { action_: [ { type_: 'output', option: 2 }, { type_: 'bond', option: \\\"#\\\" } ], nextState: '3' } },\\n '{}': {\\n '*': { action_: { type_: 'output', option: 1 }, nextState: '1' } },\\n '{...}': {\\n '0|1|2|3|a|as|b|p|bp': { action_: 'o=', nextState: 'o' },\\n 'o|d|D|q|qd|qD|dq': { action_: [ 'output', 'o=' ], nextState: 'o' } },\\n '$...$': {\\n 'a': { action_: 'a=' }, // 2$n$\\n '0|1|2|3|as|b|p|bp|o': { action_: 'o=', nextState: 'o' }, // not 'amount'\\n 'as|o': { action_: 'o=' },\\n 'q|d|D|qd|qD|dq': { action_: [ 'output', 'o=' ], nextState: 'o' } },\\n '\\\\\\\\bond{(...)}': {\\n '*': { action_: [ { type_: 'output', option: 2 }, 'bond' ], nextState: \\\"3\\\" } },\\n '\\\\\\\\frac{(...)}': {\\n '*': { action_: [ { type_: 'output', option: 1 }, 'frac-output' ], nextState: '3' } },\\n '\\\\\\\\overset{(...)}': {\\n '*': { action_: [ { type_: 'output', option: 2 }, 'overset-output' ], nextState: '3' } },\\n '\\\\\\\\underset{(...)}': {\\n '*': { action_: [ { type_: 'output', option: 2 }, 'underset-output' ], nextState: '3' } },\\n '\\\\\\\\underbrace{(...)}': {\\n '*': { action_: [ { type_: 'output', option: 2 }, 'underbrace-output' ], nextState: '3' } },\\n '\\\\\\\\color{(...)}{(...)}1|\\\\\\\\color(...){(...)}2': {\\n '*': { action_: [ { type_: 'output', option: 2 }, 'color-output' ], nextState: '3' } },\\n '\\\\\\\\color{(...)}0': {\\n '*': { action_: [ { type_: 'output', option: 2 }, 'color0-output' ] } },\\n '\\\\\\\\ce{(...)}': {\\n '*': { action_: [ { type_: 'output', option: 2 }, 'ce' ], nextState: '3' } },\\n '\\\\\\\\,': {\\n '*': { action_: [ { type_: 'output', option: 1 }, 'copy' ], nextState: '1' } },\\n '\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x': {\\n '0|1|2|3|a|as|b|p|bp|o|c0': { action_: [ 'o=', 'output' ], nextState: '3' },\\n '*': { action_: ['output', 'o=', 'output' ], nextState: '3' } },\\n 'others': {\\n '*': { action_: [ { type_: 'output', option: 1 }, 'copy' ], nextState: '3' } },\\n 'else2': {\\n 'a': { action_: 'a to o', nextState: 'o', revisit: true },\\n 'as': { action_: [ 'output', 'sb=true' ], nextState: '1', revisit: true },\\n 'r|rt|rd|rdt|rdq': { action_: [ 'output' ], nextState: '0', revisit: true },\\n '*': { action_: [ 'output', 'copy' ], nextState: '3' } }\\n }),\\n actions: {\\n 'o after d': function (buffer, m) {\\n var ret;\\n if ((buffer.d || \\\"\\\").match(/^[0-9]+$/)) {\\n var tmp = buffer.d;\\n buffer.d = undefined;\\n ret = this['output'](buffer);\\n buffer.b = tmp;\\n } else {\\n ret = this['output'](buffer);\\n }\\n mhchemParser.actions['o='](buffer, m);\\n return ret;\\n },\\n 'd= kv': function (buffer, m) {\\n buffer.d = m;\\n buffer.dType = 'kv';\\n },\\n 'charge or bond': function (buffer, m) {\\n if (buffer['beginsWithBond']) {\\n /** @type {ParserOutput[]} */\\n var ret = [];\\n mhchemParser.concatArray(ret, this['output'](buffer));\\n mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, \\\"-\\\"));\\n return ret;\\n } else {\\n buffer.d = m;\\n }\\n },\\n '- after o/d': function (buffer, m, isAfterD) {\\n var c1 = mhchemParser.patterns.match_('orbital', buffer.o || \\\"\\\");\\n var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || \\\"\\\");\\n var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || \\\"\\\");\\n var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || \\\"\\\");\\n var hyphenFollows = m===\\\"-\\\" && ( c1 && c1.remainder===\\\"\\\" || c2 || c3 || c4 );\\n if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) {\\n buffer.o = '$' + buffer.o + '$';\\n }\\n /** @type {ParserOutput[]} */\\n var ret = [];\\n if (hyphenFollows) {\\n mhchemParser.concatArray(ret, this['output'](buffer));\\n ret.push({ type_: 'hyphen' });\\n } else {\\n c1 = mhchemParser.patterns.match_('digits', buffer.d || \\\"\\\");\\n if (isAfterD && c1 && c1.remainder==='') {\\n mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m));\\n mhchemParser.concatArray(ret, this['output'](buffer));\\n } else {\\n mhchemParser.concatArray(ret, this['output'](buffer));\\n mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, \\\"-\\\"));\\n }\\n }\\n return ret;\\n },\\n 'a to o': function (buffer) {\\n buffer.o = buffer.a;\\n buffer.a = undefined;\\n },\\n 'sb=true': function (buffer) { buffer.sb = true; },\\n 'sb=false': function (buffer) { buffer.sb = false; },\\n 'beginsWithBond=true': function (buffer) { buffer['beginsWithBond'] = true; },\\n 'beginsWithBond=false': function (buffer) { buffer['beginsWithBond'] = false; },\\n 'parenthesisLevel++': function (buffer) { buffer['parenthesisLevel']++; },\\n 'parenthesisLevel--': function (buffer) { buffer['parenthesisLevel']--; },\\n 'state of aggregation': function (buffer, m) {\\n return { type_: 'state of aggregation', p1: mhchemParser.go(m, 'o') };\\n },\\n 'comma': function (buffer, m) {\\n var a = m.replace(/\\\\s*$/, '');\\n var withSpace = (a !== m);\\n if (withSpace && buffer['parenthesisLevel'] === 0) {\\n return { type_: 'comma enumeration L', p1: a };\\n } else {\\n return { type_: 'comma enumeration M', p1: a };\\n }\\n },\\n 'output': function (buffer, m, entityFollows) {\\n // entityFollows:\\n // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb)\\n // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1)\\n // 2 = 1 + the entity can have an amount, so output a\\\\, instead of converting it to o (can only apply to states a|as)\\n /** @type {ParserOutput | ParserOutput[]} */\\n var ret;\\n if (!buffer.r) {\\n ret = [];\\n if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) {\\n //ret = [];\\n } else {\\n if (buffer.sb) {\\n ret.push({ type_: 'entitySkip' });\\n }\\n if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows!==2) {\\n buffer.o = buffer.a;\\n buffer.a = undefined;\\n } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) {\\n buffer.o = buffer.a;\\n buffer.d = buffer.b;\\n buffer.q = buffer.p;\\n buffer.a = buffer.b = buffer.p = undefined;\\n } else {\\n if (buffer.o && buffer.dType==='kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || \\\"\\\")) {\\n buffer.dType = 'oxidation';\\n } else if (buffer.o && buffer.dType==='kv' && !buffer.q) {\\n buffer.dType = undefined;\\n }\\n }\\n ret.push({\\n type_: 'chemfive',\\n a: mhchemParser.go(buffer.a, 'a'),\\n b: mhchemParser.go(buffer.b, 'bd'),\\n p: mhchemParser.go(buffer.p, 'pq'),\\n o: mhchemParser.go(buffer.o, 'o'),\\n q: mhchemParser.go(buffer.q, 'pq'),\\n d: mhchemParser.go(buffer.d, (buffer.dType === 'oxidation' ? 'oxidation' : 'bd')),\\n dType: buffer.dType\\n });\\n }\\n } else { // r\\n /** @type {ParserOutput[]} */\\n var rd;\\n if (buffer.rdt === 'M') {\\n rd = mhchemParser.go(buffer.rd, 'tex-math');\\n } else if (buffer.rdt === 'T') {\\n rd = [ { type_: 'text', p1: buffer.rd || \\\"\\\" } ];\\n } else {\\n rd = mhchemParser.go(buffer.rd);\\n }\\n /** @type {ParserOutput[]} */\\n var rq;\\n if (buffer.rqt === 'M') {\\n rq = mhchemParser.go(buffer.rq, 'tex-math');\\n } else if (buffer.rqt === 'T') {\\n rq = [ { type_: 'text', p1: buffer.rq || \\\"\\\"} ];\\n } else {\\n rq = mhchemParser.go(buffer.rq);\\n }\\n ret = {\\n type_: 'arrow',\\n r: buffer.r,\\n rd: rd,\\n rq: rq\\n };\\n }\\n for (var p in buffer) {\\n if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') {\\n delete buffer[p];\\n }\\n }\\n return ret;\\n },\\n 'oxidation-output': function (buffer, m) {\\n var ret = [ \\\"{\\\" ];\\n mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation'));\\n ret.push(\\\"}\\\");\\n return ret;\\n },\\n 'frac-output': function (buffer, m) {\\n return { type_: 'frac-ce', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) };\\n },\\n 'overset-output': function (buffer, m) {\\n return { type_: 'overset', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) };\\n },\\n 'underset-output': function (buffer, m) {\\n return { type_: 'underset', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) };\\n },\\n 'underbrace-output': function (buffer, m) {\\n return { type_: 'underbrace', p1: mhchemParser.go(m[0]), p2: mhchemParser.go(m[1]) };\\n },\\n 'color-output': function (buffer, m) {\\n return { type_: 'color', color1: m[0], color2: mhchemParser.go(m[1]) };\\n },\\n 'r=': function (buffer, m) { buffer.r = m; },\\n 'rdt=': function (buffer, m) { buffer.rdt = m; },\\n 'rd=': function (buffer, m) { buffer.rd = m; },\\n 'rqt=': function (buffer, m) { buffer.rqt = m; },\\n 'rq=': function (buffer, m) { buffer.rq = m; },\\n 'operator': function (buffer, m, p1) { return { type_: 'operator', kind_: (p1 || m) }; }\\n }\\n },\\n 'a': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': {} },\\n '1/2$': {\\n '0': { action_: '1/2' } },\\n 'else': {\\n '0': { nextState: '1', revisit: true } },\\n '$(...)$': {\\n '*': { action_: 'tex-math tight', nextState: '1' } },\\n ',': {\\n '*': { action_: { type_: 'insert', option: 'commaDecimal' } } },\\n 'else2': {\\n '*': { action_: 'copy' } }\\n }),\\n actions: {}\\n },\\n 'o': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': {} },\\n '1/2$': {\\n '0': { action_: '1/2' } },\\n 'else': {\\n '0': { nextState: '1', revisit: true } },\\n 'letters': {\\n '*': { action_: 'rm' } },\\n '\\\\\\\\ca': {\\n '*': { action_: { type_: 'insert', option: 'circa' } } },\\n '\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x': {\\n '*': { action_: 'copy' } },\\n '${(...)}$|$(...)$': {\\n '*': { action_: 'tex-math' } },\\n '{(...)}': {\\n '*': { action_: '{text}' } },\\n 'else2': {\\n '*': { action_: 'copy' } }\\n }),\\n actions: {}\\n },\\n 'text': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': { action_: 'output' } },\\n '{...}': {\\n '*': { action_: 'text=' } },\\n '${(...)}$|$(...)$': {\\n '*': { action_: 'tex-math' } },\\n '\\\\\\\\greek': {\\n '*': { action_: [ 'output', 'rm' ] } },\\n '\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x': {\\n '*': { action_: [ 'output', 'copy' ] } },\\n 'else': {\\n '*': { action_: 'text=' } }\\n }),\\n actions: {\\n 'output': function (buffer) {\\n if (buffer.text_) {\\n /** @type {ParserOutput} */\\n var ret = { type_: 'text', p1: buffer.text_ };\\n for (var p in buffer) { delete buffer[p]; }\\n return ret;\\n }\\n }\\n }\\n },\\n 'pq': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': {} },\\n 'state of aggregation $': {\\n '*': { action_: 'state of aggregation' } },\\n 'i$': {\\n '0': { nextState: '!f', revisit: true } },\\n '(KV letters),': {\\n '0': { action_: 'rm', nextState: '0' } },\\n 'formula$': {\\n '0': { nextState: 'f', revisit: true } },\\n '1/2$': {\\n '0': { action_: '1/2' } },\\n 'else': {\\n '0': { nextState: '!f', revisit: true } },\\n '${(...)}$|$(...)$': {\\n '*': { action_: 'tex-math' } },\\n '{(...)}': {\\n '*': { action_: 'text' } },\\n 'a-z': {\\n 'f': { action_: 'tex-math' } },\\n 'letters': {\\n '*': { action_: 'rm' } },\\n '-9.,9': {\\n '*': { action_: '9,9' } },\\n ',': {\\n '*': { action_: { type_: 'insert+p1', option: 'comma enumeration S' } } },\\n '\\\\\\\\color{(...)}{(...)}1|\\\\\\\\color(...){(...)}2': {\\n '*': { action_: 'color-output' } },\\n '\\\\\\\\color{(...)}0': {\\n '*': { action_: 'color0-output' } },\\n '\\\\\\\\ce{(...)}': {\\n '*': { action_: 'ce' } },\\n '\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x': {\\n '*': { action_: 'copy' } },\\n 'else2': {\\n '*': { action_: 'copy' } }\\n }),\\n actions: {\\n 'state of aggregation': function (buffer, m) {\\n return { type_: 'state of aggregation subscript', p1: mhchemParser.go(m, 'o') };\\n },\\n 'color-output': function (buffer, m) {\\n return { type_: 'color', color1: m[0], color2: mhchemParser.go(m[1], 'pq') };\\n }\\n }\\n },\\n 'bd': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': {} },\\n 'x$': {\\n '0': { nextState: '!f', revisit: true } },\\n 'formula$': {\\n '0': { nextState: 'f', revisit: true } },\\n 'else': {\\n '0': { nextState: '!f', revisit: true } },\\n '-9.,9 no missing 0': {\\n '*': { action_: '9,9' } },\\n '.': {\\n '*': { action_: { type_: 'insert', option: 'electron dot' } } },\\n 'a-z': {\\n 'f': { action_: 'tex-math' } },\\n 'x': {\\n '*': { action_: { type_: 'insert', option: 'KV x' } } },\\n 'letters': {\\n '*': { action_: 'rm' } },\\n '\\\\'': {\\n '*': { action_: { type_: 'insert', option: 'prime' } } },\\n '${(...)}$|$(...)$': {\\n '*': { action_: 'tex-math' } },\\n '{(...)}': {\\n '*': { action_: 'text' } },\\n '\\\\\\\\color{(...)}{(...)}1|\\\\\\\\color(...){(...)}2': {\\n '*': { action_: 'color-output' } },\\n '\\\\\\\\color{(...)}0': {\\n '*': { action_: 'color0-output' } },\\n '\\\\\\\\ce{(...)}': {\\n '*': { action_: 'ce' } },\\n '\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x': {\\n '*': { action_: 'copy' } },\\n 'else2': {\\n '*': { action_: 'copy' } }\\n }),\\n actions: {\\n 'color-output': function (buffer, m) {\\n return { type_: 'color', color1: m[0], color2: mhchemParser.go(m[1], 'bd') };\\n }\\n }\\n },\\n 'oxidation': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': {} },\\n 'roman numeral': {\\n '*': { action_: 'roman-numeral' } },\\n '${(...)}$|$(...)$': {\\n '*': { action_: 'tex-math' } },\\n 'else': {\\n '*': { action_: 'copy' } }\\n }),\\n actions: {\\n 'roman-numeral': function (buffer, m) { return { type_: 'roman numeral', p1: m || \\\"\\\" }; }\\n }\\n },\\n 'tex-math': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': { action_: 'output' } },\\n '\\\\\\\\ce{(...)}': {\\n '*': { action_: [ 'output', 'ce' ] } },\\n '{...}|\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x': {\\n '*': { action_: 'o=' } },\\n 'else': {\\n '*': { action_: 'o=' } }\\n }),\\n actions: {\\n 'output': function (buffer) {\\n if (buffer.o) {\\n /** @type {ParserOutput} */\\n var ret = { type_: 'tex-math', p1: buffer.o };\\n for (var p in buffer) { delete buffer[p]; }\\n return ret;\\n }\\n }\\n }\\n },\\n 'tex-math tight': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': { action_: 'output' } },\\n '\\\\\\\\ce{(...)}': {\\n '*': { action_: [ 'output', 'ce' ] } },\\n '{...}|\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x': {\\n '*': { action_: 'o=' } },\\n '-|+': {\\n '*': { action_: 'tight operator' } },\\n 'else': {\\n '*': { action_: 'o=' } }\\n }),\\n actions: {\\n 'tight operator': function (buffer, m) { buffer.o = (buffer.o || \\\"\\\") + \\\"{\\\"+m+\\\"}\\\"; },\\n 'output': function (buffer) {\\n if (buffer.o) {\\n /** @type {ParserOutput} */\\n var ret = { type_: 'tex-math', p1: buffer.o };\\n for (var p in buffer) { delete buffer[p]; }\\n return ret;\\n }\\n }\\n }\\n },\\n '9,9': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': {} },\\n ',': {\\n '*': { action_: 'comma' } },\\n 'else': {\\n '*': { action_: 'copy' } }\\n }),\\n actions: {\\n 'comma': function () { return { type_: 'commaDecimal' }; }\\n }\\n },\\n //#endregion\\n //\\n // \\\\pu state machines\\n //\\n //#region pu\\n 'pu': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': { action_: 'output' } },\\n 'space$': {\\n '*': { action_: [ 'output', 'space' ] } },\\n '{[(|)]}': {\\n '0|a': { action_: 'copy' } },\\n '(-)(9)^(-9)': {\\n '0': { action_: 'number^', nextState: 'a' } },\\n '(-)(9.,9)(e)(99)': {\\n '0': { action_: 'enumber', nextState: 'a' } },\\n 'space': {\\n '0|a': {} },\\n 'pm-operator': {\\n '0|a': { action_: { type_: 'operator', option: '\\\\\\\\pm' }, nextState: '0' } },\\n 'operator': {\\n '0|a': { action_: 'copy', nextState: '0' } },\\n '//': {\\n 'd': { action_: 'o=', nextState: '/' } },\\n '/': {\\n 'd': { action_: 'o=', nextState: '/' } },\\n '{...}|else': {\\n '0|d': { action_: 'd=', nextState: 'd' },\\n 'a': { action_: [ 'space', 'd=' ], nextState: 'd' },\\n '/|q': { action_: 'q=', nextState: 'q' } }\\n }),\\n actions: {\\n 'enumber': function (buffer, m) {\\n /** @type {ParserOutput[]} */\\n var ret = [];\\n if (m[0] === \\\"+-\\\" || m[0] === \\\"+/-\\\") {\\n ret.push(\\\"\\\\\\\\pm \\\");\\n } else if (m[0]) {\\n ret.push(m[0]);\\n }\\n if (m[1]) {\\n mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));\\n if (m[2]) {\\n if (m[2].match(/[,.]/)) {\\n mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9'));\\n } else {\\n ret.push(m[2]);\\n }\\n }\\n m[3] = m[4] || m[3];\\n if (m[3]) {\\n m[3] = m[3].trim();\\n if (m[3] === \\\"e\\\" || m[3].substr(0, 1) === \\\"*\\\") {\\n ret.push({ type_: 'cdot' });\\n } else {\\n ret.push({ type_: 'times' });\\n }\\n }\\n }\\n if (m[3]) {\\n ret.push(\\\"10^{\\\"+m[5]+\\\"}\\\");\\n }\\n return ret;\\n },\\n 'number^': function (buffer, m) {\\n /** @type {ParserOutput[]} */\\n var ret = [];\\n if (m[0] === \\\"+-\\\" || m[0] === \\\"+/-\\\") {\\n ret.push(\\\"\\\\\\\\pm \\\");\\n } else if (m[0]) {\\n ret.push(m[0]);\\n }\\n mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9'));\\n ret.push(\\\"^{\\\"+m[2]+\\\"}\\\");\\n return ret;\\n },\\n 'operator': function (buffer, m, p1) { return { type_: 'operator', kind_: (p1 || m) }; },\\n 'space': function () { return { type_: 'pu-space-1' }; },\\n 'output': function (buffer) {\\n /** @type {ParserOutput | ParserOutput[]} */\\n var ret;\\n var md = mhchemParser.patterns.match_('{(...)}', buffer.d || \\\"\\\");\\n if (md && md.remainder === '') { buffer.d = md.match_; }\\n var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || \\\"\\\");\\n if (mq && mq.remainder === '') { buffer.q = mq.match_; }\\n if (buffer.d) {\\n buffer.d = buffer.d.replace(/\\\\u00B0C|\\\\^oC|\\\\^{o}C/g, \\\"{}^{\\\\\\\\circ}C\\\");\\n buffer.d = buffer.d.replace(/\\\\u00B0F|\\\\^oF|\\\\^{o}F/g, \\\"{}^{\\\\\\\\circ}F\\\");\\n }\\n if (buffer.q) { // fraction\\n buffer.q = buffer.q.replace(/\\\\u00B0C|\\\\^oC|\\\\^{o}C/g, \\\"{}^{\\\\\\\\circ}C\\\");\\n buffer.q = buffer.q.replace(/\\\\u00B0F|\\\\^oF|\\\\^{o}F/g, \\\"{}^{\\\\\\\\circ}F\\\");\\n var b5 = {\\n d: mhchemParser.go(buffer.d, 'pu'),\\n q: mhchemParser.go(buffer.q, 'pu')\\n };\\n if (buffer.o === '//') {\\n ret = { type_: 'pu-frac', p1: b5.d, p2: b5.q };\\n } else {\\n ret = b5.d;\\n if (b5.d.length > 1 || b5.q.length > 1) {\\n ret.push({ type_: ' / ' });\\n } else {\\n ret.push({ type_: '/' });\\n }\\n mhchemParser.concatArray(ret, b5.q);\\n }\\n } else { // no fraction\\n ret = mhchemParser.go(buffer.d, 'pu-2');\\n }\\n for (var p in buffer) { delete buffer[p]; }\\n return ret;\\n }\\n }\\n },\\n 'pu-2': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '*': { action_: 'output' } },\\n '*': {\\n '*': { action_: [ 'output', 'cdot' ], nextState: '0' } },\\n '\\\\\\\\x': {\\n '*': { action_: 'rm=' } },\\n 'space': {\\n '*': { action_: [ 'output', 'space' ], nextState: '0' } },\\n '^{(...)}|^(-1)': {\\n '1': { action_: '^(-1)' } },\\n '-9.,9': {\\n '0': { action_: 'rm=', nextState: '0' },\\n '1': { action_: '^(-1)', nextState: '0' } },\\n '{...}|else': {\\n '*': { action_: 'rm=', nextState: '1' } }\\n }),\\n actions: {\\n 'cdot': function () { return { type_: 'tight cdot' }; },\\n '^(-1)': function (buffer, m) { buffer.rm += \\\"^{\\\"+m+\\\"}\\\"; },\\n 'space': function () { return { type_: 'pu-space-2' }; },\\n 'output': function (buffer) {\\n /** @type {ParserOutput | ParserOutput[]} */\\n var ret = [];\\n if (buffer.rm) {\\n var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || \\\"\\\");\\n if (mrm && mrm.remainder === '') {\\n ret = mhchemParser.go(mrm.match_, 'pu');\\n } else {\\n ret = { type_: 'rm', p1: buffer.rm };\\n }\\n }\\n for (var p in buffer) { delete buffer[p]; }\\n return ret;\\n }\\n }\\n },\\n 'pu-9,9': {\\n transitions: mhchemParser.createTransitions({\\n 'empty': {\\n '0': { action_: 'output-0' },\\n 'o': { action_: 'output-o' } },\\n ',': {\\n '0': { action_: [ 'output-0', 'comma' ], nextState: 'o' } },\\n '.': {\\n '0': { action_: [ 'output-0', 'copy' ], nextState: 'o' } },\\n 'else': {\\n '*': { action_: 'text=' } }\\n }),\\n actions: {\\n 'comma': function () { return { type_: 'commaDecimal' }; },\\n 'output-0': function (buffer) {\\n /** @type {ParserOutput[]} */\\n var ret = [];\\n buffer.text_ = buffer.text_ || \\\"\\\";\\n if (buffer.text_.length > 4) {\\n var a = buffer.text_.length % 3;\\n if (a === 0) { a = 3; }\\n for (var i=buffer.text_.length-3; i>0; i-=3) {\\n ret.push(buffer.text_.substr(i, 3));\\n ret.push({ type_: '1000 separator' });\\n }\\n ret.push(buffer.text_.substr(0, a));\\n ret.reverse();\\n } else {\\n ret.push(buffer.text_);\\n }\\n for (var p in buffer) { delete buffer[p]; }\\n return ret;\\n },\\n 'output-o': function (buffer) {\\n /** @type {ParserOutput[]} */\\n var ret = [];\\n buffer.text_ = buffer.text_ || \\\"\\\";\\n if (buffer.text_.length > 4) {\\n var a = buffer.text_.length - 3;\\n for (var i=0; i<a; i+=3) {\\n ret.push(buffer.text_.substr(i, 3));\\n ret.push({ type_: '1000 separator' });\\n }\\n ret.push(buffer.text_.substr(i));\\n } else {\\n ret.push(buffer.text_);\\n }\\n for (var p in buffer) { delete buffer[p]; }\\n return ret;\\n }\\n }\\n }\\n //#endregion\\n };\\n\\n //\\n // texify: Take MhchemParser output and convert it to TeX\\n //\\n /** @type {Texify} */\\n var texify = {\\n go: function (input, isInner) { // (recursive, max 4 levels)\\n if (!input) { return \\\"\\\"; }\\n var res = \\\"\\\";\\n var cee = false;\\n for (var i=0; i < input.length; i++) {\\n var inputi = input[i];\\n if (typeof inputi === \\\"string\\\") {\\n res += inputi;\\n } else {\\n res += texify._go2(inputi);\\n if (inputi.type_ === '1st-level escape') { cee = true; }\\n }\\n }\\n if (!isInner && !cee && res) {\\n res = \\\"{\\\" + res + \\\"}\\\";\\n }\\n return res;\\n },\\n _goInner: function (input) {\\n if (!input) { return input; }\\n return texify.go(input, true);\\n },\\n _go2: function (buf) {\\n /** @type {undefined | string} */\\n var res;\\n switch (buf.type_) {\\n case 'chemfive':\\n res = \\\"\\\";\\n var b5 = {\\n a: texify._goInner(buf.a),\\n b: texify._goInner(buf.b),\\n p: texify._goInner(buf.p),\\n o: texify._goInner(buf.o),\\n q: texify._goInner(buf.q),\\n d: texify._goInner(buf.d)\\n };\\n //\\n // a\\n //\\n if (b5.a) {\\n if (b5.a.match(/^[+\\\\-]/)) { b5.a = \\\"{\\\"+b5.a+\\\"}\\\"; }\\n res += b5.a + \\\"\\\\\\\\,\\\";\\n }\\n //\\n // b and p\\n //\\n if (b5.b || b5.p) {\\n res += \\\"{\\\\\\\\vphantom{X}}\\\";\\n res += \\\"^{\\\\\\\\hphantom{\\\"+(b5.b||\\\"\\\")+\\\"}}_{\\\\\\\\hphantom{\\\"+(b5.p||\\\"\\\")+\\\"}}\\\";\\n res += \\\"{\\\\\\\\vphantom{X}}\\\";\\n res += \\\"^{\\\\\\\\smash[t]{\\\\\\\\vphantom{2}}\\\\\\\\mathllap{\\\"+(b5.b||\\\"\\\")+\\\"}}\\\";\\n res += \\\"_{\\\\\\\\vphantom{2}\\\\\\\\mathllap{\\\\\\\\smash[t]{\\\"+(b5.p||\\\"\\\")+\\\"}}}\\\";\\n }\\n //\\n // o\\n //\\n if (b5.o) {\\n if (b5.o.match(/^[+\\\\-]/)) { b5.o = \\\"{\\\"+b5.o+\\\"}\\\"; }\\n res += b5.o;\\n }\\n //\\n // q and d\\n //\\n if (buf.dType === 'kv') {\\n if (b5.d || b5.q) {\\n res += \\\"{\\\\\\\\vphantom{X}}\\\";\\n }\\n if (b5.d) {\\n res += \\\"^{\\\"+b5.d+\\\"}\\\";\\n }\\n if (b5.q) {\\n res += \\\"_{\\\\\\\\smash[t]{\\\"+b5.q+\\\"}}\\\";\\n }\\n } else if (buf.dType === 'oxidation') {\\n if (b5.d) {\\n res += \\\"{\\\\\\\\vphantom{X}}\\\";\\n res += \\\"^{\\\"+b5.d+\\\"}\\\";\\n }\\n if (b5.q) {\\n res += \\\"{\\\\\\\\vphantom{X}}\\\";\\n res += \\\"_{\\\\\\\\smash[t]{\\\"+b5.q+\\\"}}\\\";\\n }\\n } else {\\n if (b5.q) {\\n res += \\\"{\\\\\\\\vphantom{X}}\\\";\\n res += \\\"_{\\\\\\\\smash[t]{\\\"+b5.q+\\\"}}\\\";\\n }\\n if (b5.d) {\\n res += \\\"{\\\\\\\\vphantom{X}}\\\";\\n res += \\\"^{\\\"+b5.d+\\\"}\\\";\\n }\\n }\\n break;\\n case 'rm':\\n res = \\\"\\\\\\\\mathrm{\\\"+buf.p1+\\\"}\\\";\\n break;\\n case 'text':\\n if (buf.p1.match(/[\\\\^_]/)) {\\n buf.p1 = buf.p1.replace(\\\" \\\", \\\"~\\\").replace(\\\"-\\\", \\\"\\\\\\\\text{-}\\\");\\n res = \\\"\\\\\\\\mathrm{\\\"+buf.p1+\\\"}\\\";\\n } else {\\n res = \\\"\\\\\\\\text{\\\"+buf.p1+\\\"}\\\";\\n }\\n break;\\n case 'roman numeral':\\n res = \\\"\\\\\\\\mathrm{\\\"+buf.p1+\\\"}\\\";\\n break;\\n case 'state of aggregation':\\n res = \\\"\\\\\\\\mskip2mu \\\"+texify._goInner(buf.p1);\\n break;\\n case 'state of aggregation subscript':\\n res = \\\"\\\\\\\\mskip1mu \\\"+texify._goInner(buf.p1);\\n break;\\n case 'bond':\\n res = texify._getBond(buf.kind_);\\n if (!res) {\\n throw [\\\"MhchemErrorBond\\\", \\\"mhchem Error. Unknown bond type (\\\" + buf.kind_ + \\\")\\\"];\\n }\\n break;\\n case 'frac':\\n var c = \\\"\\\\\\\\frac{\\\" + buf.p1 + \\\"}{\\\" + buf.p2 + \\\"}\\\";\\n res = \\\"\\\\\\\\mathchoice{\\\\\\\\textstyle\\\"+c+\\\"}{\\\"+c+\\\"}{\\\"+c+\\\"}{\\\"+c+\\\"}\\\";\\n break;\\n case 'pu-frac':\\n var d = \\\"\\\\\\\\frac{\\\" + texify._goInner(buf.p1) + \\\"}{\\\" + texify._goInner(buf.p2) + \\\"}\\\";\\n res = \\\"\\\\\\\\mathchoice{\\\\\\\\textstyle\\\"+d+\\\"}{\\\"+d+\\\"}{\\\"+d+\\\"}{\\\"+d+\\\"}\\\";\\n break;\\n case 'tex-math':\\n res = buf.p1 + \\\" \\\";\\n break;\\n case 'frac-ce':\\n res = \\\"\\\\\\\\frac{\\\" + texify._goInner(buf.p1) + \\\"}{\\\" + texify._goInner(buf.p2) + \\\"}\\\";\\n break;\\n case 'overset':\\n res = \\\"\\\\\\\\overset{\\\" + texify._goInner(buf.p1) + \\\"}{\\\" + texify._goInner(buf.p2) + \\\"}\\\";\\n break;\\n case 'underset':\\n res = \\\"\\\\\\\\underset{\\\" + texify._goInner(buf.p1) + \\\"}{\\\" + texify._goInner(buf.p2) + \\\"}\\\";\\n break;\\n case 'underbrace':\\n res = \\\"\\\\\\\\underbrace{\\\" + texify._goInner(buf.p1) + \\\"}_{\\\" + texify._goInner(buf.p2) + \\\"}\\\";\\n break;\\n case 'color':\\n res = \\\"{\\\\\\\\color{\\\" + buf.color1 + \\\"}{\\\" + texify._goInner(buf.color2) + \\\"}}\\\";\\n break;\\n case 'color0':\\n res = \\\"\\\\\\\\color{\\\" + buf.color + \\\"}\\\";\\n break;\\n case 'arrow':\\n var b6 = {\\n rd: texify._goInner(buf.rd),\\n rq: texify._goInner(buf.rq)\\n };\\n var arrow = \\\"\\\\\\\\x\\\" + texify._getArrow(buf.r);\\n if (b6.rq) { arrow += \\\"[{\\\" + b6.rq + \\\"}]\\\"; }\\n if (b6.rd) {\\n arrow += \\\"{\\\" + b6.rd + \\\"}\\\";\\n } else {\\n arrow += \\\"{}\\\";\\n }\\n res = arrow;\\n break;\\n case 'operator':\\n res = texify._getOperator(buf.kind_);\\n break;\\n case '1st-level escape':\\n res = buf.p1+\\\" \\\"; // &, \\\\\\\\\\\\\\\\, \\\\\\\\hlin\\n break;\\n case 'space':\\n res = \\\" \\\";\\n break;\\n case 'entitySkip':\\n res = \\\"~\\\";\\n break;\\n case 'pu-space-1':\\n res = \\\"~\\\";\\n break;\\n case 'pu-space-2':\\n res = \\\"\\\\\\\\mkern3mu \\\";\\n break;\\n case '1000 separator':\\n res = \\\"\\\\\\\\mkern2mu \\\";\\n break;\\n case 'commaDecimal':\\n res = \\\"{,}\\\";\\n break;\\n case 'comma enumeration L':\\n res = \\\"{\\\"+buf.p1+\\\"}\\\\\\\\mkern6mu \\\";\\n break;\\n case 'comma enumeration M':\\n res = \\\"{\\\"+buf.p1+\\\"}\\\\\\\\mkern3mu \\\";\\n break;\\n case 'comma enumeration S':\\n res = \\\"{\\\"+buf.p1+\\\"}\\\\\\\\mkern1mu \\\";\\n break;\\n case 'hyphen':\\n res = \\\"\\\\\\\\text{-}\\\";\\n break;\\n case 'addition compound':\\n res = \\\"\\\\\\\\,{\\\\\\\\cdot}\\\\\\\\,\\\";\\n break;\\n case 'electron dot':\\n res = \\\"\\\\\\\\mkern1mu \\\\\\\\bullet\\\\\\\\mkern1mu \\\";\\n break;\\n case 'KV x':\\n res = \\\"{\\\\\\\\times}\\\";\\n break;\\n case 'prime':\\n res = \\\"\\\\\\\\prime \\\";\\n break;\\n case 'cdot':\\n res = \\\"\\\\\\\\cdot \\\";\\n break;\\n case 'tight cdot':\\n res = \\\"\\\\\\\\mkern1mu{\\\\\\\\cdot}\\\\\\\\mkern1mu \\\";\\n break;\\n case 'times':\\n res = \\\"\\\\\\\\times \\\";\\n break;\\n case 'circa':\\n res = \\\"{\\\\\\\\sim}\\\";\\n break;\\n case '^':\\n res = \\\"uparrow\\\";\\n break;\\n case 'v':\\n res = \\\"downarrow\\\";\\n break;\\n case 'ellipsis':\\n res = \\\"\\\\\\\\ldots \\\";\\n break;\\n case '/':\\n res = \\\"/\\\";\\n break;\\n case ' / ':\\n res = \\\"\\\\\\\\,/\\\\\\\\,\\\";\\n break;\\n default:\\n assertNever(buf);\\n throw [\\\"MhchemBugT\\\", \\\"mhchem bug T. Please report.\\\"]; // Missing texify rule or unknown MhchemParser output\\n }\\n assertString(res);\\n return res;\\n },\\n _getArrow: function (a) {\\n switch (a) {\\n case \\\"->\\\": return \\\"rightarrow\\\";\\n case \\\"\\\\u2192\\\": return \\\"rightarrow\\\";\\n case \\\"\\\\u27F6\\\": return \\\"rightarrow\\\";\\n case \\\"<-\\\": return \\\"leftarrow\\\";\\n case \\\"<->\\\": return \\\"leftrightarrow\\\";\\n case \\\"<-->\\\": return \\\"rightleftarrows\\\";\\n case \\\"<=>\\\": return \\\"rightleftharpoons\\\";\\n case \\\"\\\\u21CC\\\": return \\\"rightleftharpoons\\\";\\n case \\\"<=>>\\\": return \\\"rightequilibrium\\\";\\n case \\\"<<=>\\\": return \\\"leftequilibrium\\\";\\n default:\\n assertNever(a);\\n throw [\\\"MhchemBugT\\\", \\\"mhchem bug T. Please report.\\\"];\\n }\\n },\\n _getBond: function (a) {\\n switch (a) {\\n case \\\"-\\\": return \\\"{-}\\\";\\n case \\\"1\\\": return \\\"{-}\\\";\\n case \\\"=\\\": return \\\"{=}\\\";\\n case \\\"2\\\": return \\\"{=}\\\";\\n case \\\"#\\\": return \\\"{\\\\\\\\equiv}\\\";\\n case \\\"3\\\": return \\\"{\\\\\\\\equiv}\\\";\\n case \\\"~\\\": return \\\"{\\\\\\\\tripledash}\\\";\\n case \\\"~-\\\": return \\\"{\\\\\\\\mathrlap{\\\\\\\\raisebox{-.1em}{$-$}}\\\\\\\\raisebox{.1em}{$\\\\\\\\tripledash$}}\\\";\\n case \\\"~=\\\": return \\\"{\\\\\\\\mathrlap{\\\\\\\\raisebox{-.2em}{$-$}}\\\\\\\\mathrlap{\\\\\\\\raisebox{.2em}{$\\\\\\\\tripledash$}}-}\\\";\\n case \\\"~--\\\": return \\\"{\\\\\\\\mathrlap{\\\\\\\\raisebox{-.2em}{$-$}}\\\\\\\\mathrlap{\\\\\\\\raisebox{.2em}{$\\\\\\\\tripledash$}}-}\\\";\\n case \\\"-~-\\\": return \\\"{\\\\\\\\mathrlap{\\\\\\\\raisebox{-.2em}{$-$}}\\\\\\\\mathrlap{\\\\\\\\raisebox{.2em}{$-$}}\\\\\\\\tripledash}\\\";\\n case \\\"...\\\": return \\\"{{\\\\\\\\cdot}{\\\\\\\\cdot}{\\\\\\\\cdot}}\\\";\\n case \\\"....\\\": return \\\"{{\\\\\\\\cdot}{\\\\\\\\cdot}{\\\\\\\\cdot}{\\\\\\\\cdot}}\\\";\\n case \\\"->\\\": return \\\"{\\\\\\\\rightarrow}\\\";\\n case \\\"<-\\\": return \\\"{\\\\\\\\leftarrow}\\\";\\n case \\\"<\\\": return \\\"{<}\\\";\\n case \\\">\\\": return \\\"{>}\\\";\\n default:\\n assertNever(a);\\n throw [\\\"MhchemBugT\\\", \\\"mhchem bug T. Please report.\\\"];\\n }\\n },\\n _getOperator: function (a) {\\n switch (a) {\\n case \\\"+\\\": return \\\" {}+{} \\\";\\n case \\\"-\\\": return \\\" {}-{} \\\";\\n case \\\"=\\\": return \\\" {}={} \\\";\\n case \\\"<\\\": return \\\" {}<{} \\\";\\n case \\\">\\\": return \\\" {}>{} \\\";\\n case \\\"<<\\\": return \\\" {}\\\\\\\\ll{} \\\";\\n case \\\">>\\\": return \\\" {}\\\\\\\\gg{} \\\";\\n case \\\"\\\\\\\\pm\\\": return \\\" {}\\\\\\\\pm{} \\\";\\n case \\\"\\\\\\\\approx\\\": return \\\" {}\\\\\\\\approx{} \\\";\\n case \\\"$\\\\\\\\approx$\\\": return \\\" {}\\\\\\\\approx{} \\\";\\n case \\\"v\\\": return \\\" \\\\\\\\downarrow{} \\\";\\n case \\\"(v)\\\": return \\\" \\\\\\\\downarrow{} \\\";\\n case \\\"^\\\": return \\\" \\\\\\\\uparrow{} \\\";\\n case \\\"(^)\\\": return \\\" \\\\\\\\uparrow{} \\\";\\n default:\\n assertNever(a);\\n throw [\\\"MhchemBugT\\\", \\\"mhchem bug T. Please report.\\\"];\\n }\\n }\\n };\\n\\n //\\n // Helpers for code anaylsis\\n // Will show type error at calling position\\n //\\n /** @param {number} a */\\n function assertNever(a) {}\\n /** @param {string} a */\\n function assertString(a) {}\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/katex/mhchem.min.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff\": {\n \"text\": \"d09GRgABAAAAAFZIAA4AAAAAhjAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAABLVAAAAFMAAABgRb1ZkWNtYXAAAEuoAAAA1wAAAZICN3XSY3Z0IAAAUowAAAAlAAAAOgIrDw9mcGdtAABMgAAABYsAAAuX2BTb8Gdhc3AAAFZAAAAACAAAAAgAAAAQZ2x5ZgAAAUQAAEekAABr0Nvu0tBoZWFkAABJ0AAAADYAAAA2FIl04WhoZWEAAEs0AAAAHwAAACQHRgOLaG10eAAASggAAAEpAAABjMKCDctsb2NhAABJCAAAAMgAAADILTBICm1heHAAAEjoAAAAIAAAACABlwyWbmFtZQAAUrQAAALAAAAG/5pHBENwb3N0AABVdAAAAMkAAAFIkbrRonByZXAAAFIMAAAAfgAAAIqSjPzKeNqEWAVgG0myraru4REPiGksySKD0BRHTuyA7cD+5DbreDl0y4HPzMzMzJhlPsbPzMzMDPbvGSk+vgvOdHWPu6pevVfdQNABgPeQDQwUUJ+XOQLNNbuxbqzWjXmdb7zc6ZD9f3/TwaeBYHf/X+Fn6WmIQQ4ub92un71nlAQEAqTrABDZAiJ2LzAWZtuZrdvzwm4f2AkYsQf9abCdGaUBEG4CEt4EYowuTJYSO7uz88LUtFvmcrKZ6A26HdtSZEWRvSrVelXmjzi2JXvl6lUrX2UUT8gaZhGNUtItlZxkmR6vFLvJgvPaKwzxyxI8/H/vFgY35U0BEKh4G95BL0IC8nBsZFphgxHiZgLp+NijKACEfE9wFxAjJDZr39ks4QVApF0gpDM7z1cy00x2m4lqtd8bDDtiZ65j22K3tjfsBfu2vXK/JCfUGCpkGaRr5Dywruu6gc9lvzOdjMoYZtnM7o7C/zrllq9d1AiAwfz+v9Hv0SvwFHwufB38zMhasomUE8jZZVQ522wiw5Nbt9tit/OgAIEi4ovEGL4RCBgndnnshKrKuyDL1hZwLu2CJFnSncTMfKSFHCQuPfCB62URhCaAIoKgkHLzIyx53+ydnZH1RV/w8TffePXB+0+fWju8MFevtTTZbiaCSA26w47Iovgzya3ruOJtICz9Xq1aq1a9sqIMe8O+mOIEM4dDS7aFqWz7yVeU8YphsGJ+OPmQAIWYUhv/3+8J67Dnf0q2rcn3xW9mBQv7VTE1MP5iZmvRZMQIVWoPi/nzMak2t1JnKKvkkqZH0rl8wUBUKJo3tPPZz06HmVkazGnTWUmp1+SwZc67OpKlJ6realLttDTt1MmnFpdGhf7TUxknnguZDGO2VDIj/3Hf8elW2ekcr8koVbr4FcujjQd1QhzUOs1Wx6Cjd2/M6mG53U/oqXDcZBS3iCEiIc4gMSS3On2loKh1naToyaKCJGO4fLQ2TUZNVborh86d72cKr+baEWdYn24aYe6k83uvnrzuxLhz7NpdkWwNAGEDn4MvFFUQhlSA+uf9fIu6fBYAHtl5toR+rnp+7cmKVfaT0t/w8hkW1TX61txU+O0mkXbxvlRQGPvHsEJ/BAWwR/EsAoMTMYTj/pfy/nfQFpkZ52CcNdv2/BxPUjTASt04bBI3O3YkpiFPGOXF8DRGzuboj+K56Pk/bDTWj713NW1EVEWWYkdqj//u8fA/vaEIgLCzv4EW/QGkQH42DDjXdPv+Jyc4qvWd4Gf64JB3zL4zpVEuv66Uo2fLFssnTrwak+zaoddax1+6davCbcPof8PFz4v91KdsbwJCGd8Kf0XPwQZkRsn1wwvz7XLGjRgqmXDCd64+jbLVTPS7toiSJZy0hwJhjuM7GwDUdWRFuFmzHfHkef1Bv+9bysLvAJkiAIOh64iJvc9Io4SGOSthCJmWmtbMRC2GEVLmNY0YkRxjoUwujHrDtnuxSEg19Lxh0E9JwsZl1nJDmlblGEMmh7OKGk4bmEC5rsipGVfloZVMSLdThoUsGwqRp2kYVXQtraknAWF2/yfpnXQ32NAa1RkQnDA0QpE/hvAGYEDI6CEAwB1AwFO2E7d8bkbhbKykKKWYcKnfL/nOD0t4RckqOFDkvd+wbNz7aY4ScqzRCabR3jsS1t7Padr3fa/OwqQDIFzaX4Nfg8egIPIXZSJ/ouh9Gs3TuKCDYI3zGdTrJU8lrmrFKMnJvoy6HNJimmWY0mrBJC53GllbSVa3KUJMtWwvFbeykbgJgDADf0tvwwQYUBzlCAERLhAeeMVAlsBgOvNT2iv5fg18j1bxCB5R5P/7FA2RIcbRSjjIFAZi+f4/wXvgKmiQCEQj0Iswbntxkh3hyKDjBDJ1oTBX9pJOsZkulee8KR9Z+5v4y/RLYEBkZEo4hlM6qLl4V8BBAcXyan/+DtL0RHzvK9GxMYxvJ+L1//1xRASCxv6/4HvwbyEJs9B5to54YiwHhu/XLgCEfZGNgu/ghckYwpmd51ptf3OJQcfH3fux5iTMyoQc/eqZYT47Cvu/h+TQ4YfCPFPaWFzK5bsrSnxtuL69Xkovz0wvMokxlGIlV43jnylS8vLhhDsYHOs2zMQjJ7zs9urgPaduRqcePr08G0VENF076kGAuz38WfxV6MGtUWIqScSqyKmLgGxTQen42KMycELkQmyI7QJj0S3fnXsBwNqScaxoo+KdSQyIM7r0IVN2RmEA6EHvgaOZ8l2iLJqS0BLhutK/oyITPej7A0IqOj0BwwPaEuLRtRQb31b/7M2Lzbi2uUU6MtmMFPJhtNzTWjlDyDTGZE466yZWwoiMc4ZtMRr6mk9aExCVwyHGCDW5feLKNyd1CZkRcgFhBRD/FH8b2n79cURWQkLaBAYIDP3GKvCZLgKRRdsN++JC0Bv51BIkTQika00otuNXof+qlA6YUHgl30TOqLK+IBmNFVJy32IpWNssf7XMTHPv+uz9U17M6hQS2/gUqpzzdFfFxZoTv/DtDkqEhJwxVihGWzvNRsnLljtlQKgJFP8E/hZswMpo8bCuAieYQS7RJgASgt/zSUjSkyBxlPiTwIFx9iAgRnH7QsNtLnZkOd1EsT8faEq1FjjjezPpCwo0eZS92gwJhA7dCTyDVPmc2g18xPlejYXVqquEtbUlnbTeQpgapWoESf7iNFHkS3cfUJJxRYmuNE7UB16+fYSHWER5uGkrhCeaHYpYXFcWNao01MRyrZRQOEf2aYab1D7u8TgZGpIZUjP1hbtmjphxLOvNZFIGAn1/Df8IfxdmRRZnRy1foo8DcaSrwDnsBBAERHYRGLPY9uKgNV0q5LNJSdS6VBsIkhCiUOqL6jtMjtCRQEhEGn0MdrpDX329soiP7drMCwjR6nZFdeLQZIS491v41V99l4TEmFeVdMYU1MjRm3TR1E+f8tQbN5U3m+oitwv6nMJU6dd+LSMhZ2bY0s6e/WmZI9UY4fZZiULmpS9YSuDJl5eDyjyBL+FPwxxcHsVcm4DVVJlJUEEusc2t2zVRl2lgABKDSyABl/gDQIQ7fm4pqEcEYkgPvW8S59IFkCS+688+szPS6tV61y77CKgETZpSq8VKliIc9nwoC9H0ke3nP2Co2nDYdSZNH54+cqg/q2kanjfML/gChZDJ+sLoWHttdOqLu0NdlogU1q7dM9dIrZ2Z0WQJT1G1hhLDiztEPFkc3H3foRM2N0NIGFnqAkFbMOpv0GswC6vwxMgoILClJvloHvNQQUYQXoB0CRijXSAKbSnI+YT1hdPZgxliHJDjAwczmSAgd34OYWEwtzq/OlVOuYYGszirCrnBcff6gUTsE04wLiIyblODoHRXiXUE/gP4B00wrm6c18Nr9flhrnh4/fMevskVVJlRUTnT7Zyj1O7OnlS8+kZkZS09fTS/aaNRLeEn379RyDU33bRuf97uT3/eNQdR4fEyR+Yv73n3fIWWTDp7P7w9ak8vFuzQJw5bgFDZ38J/FoydhvWRriMBbnKEifREAQlvAVGgPwEM7PGQP3YBAPxYgH9uWrA3gnPToD8Qctdxu7ZCiuL1BAEEjblXXs4jzx+i7/v61F9+vHmSWde++BLDH/xB/KzTnEmMolN7z/9FSpGzX/Mb38o4Asgwvf/v+HP0VpiDdTgOp+AcvBHOjcy1akC6mxjscz44sRIwIHZ9fMRhLMighf5+D0wMkGFwCAKROv3hB/u9dDLOfYUeig0fMJRz8Hhw5gh8UORATvx3109WTZHvaInry+ywrPgnnMH4X1dQuRLYHfdAf/8+qtr5Q9kixu+PhmMb8eraoTNR65NasUrxlJVw6tQItw1KFn/2QV3XrbgpMxY5bfZi6g4hR0IiOfg3olpcXXBTxVS2ci4fLaXoFQWVULbSTchnDxmGOW+3ls8vdky6pzZ9pOm1zVgcS1SKtLuqNe+1b+1GCCOhUNSMx/TFZW1q3vkE4kQ4/ue8ZDApXywPptejsdVitT6TB4Ks3+Hgr4EHQxiMuiChLwHX5aAw4EkAhsCeDIJNE0WoTLWaU8PKoFTL1BShb5UA9UFcJ5Ec+BQwCbcX6Hat8z4tkCfhwysceXJp1pSlyOHCciJ2/FxUe2T2eGvnnxPqLy8Yjy+tbiwLKTZwujmoh0P3opmNcKaVlh9cqU31pxW1tfF1V+5+ycy+q6UsLtx13SQ0zg2WHghJAAQdcQfyw/he0MGB+7Zue+M7DhyDfivoUg4uQOrCmAAAJMBL728aJQ9GDy4/hI3YGf/yY8o7uPyYtJCJ97v16GScbLWacnMs42Yr9ZSdxa92vPJcqbT3XKpSTTuFIgAJDj8Kz+JPgw4tWBhTdhQI6dbBZieI94eCbnjSwgKKCvWmyn6Fxt/3c5n/eIB2/2BzcM7y5Uso2Ww+mZqqJF2ytZBZMjgq9QpnJmOmEc87TGH4SXNeOZkq7u1zLeS1TMvg00uznCmkxZ1KJtHyUDZiGsoABAP4fPo1vA4mpKA8KgAGmLkEjIhdmBArozPdXrfrBwtlRbFLxb7Q01LRfv8X8RXO957fex5V3MKtD3x5EmMxIvTw3XceAAhm9v8Nr9DzMA+H4KmROZfLMMIFZESbH5Tx0EHGrSDj7Q+XcetjZHykrywNeq1GNeCXMdTv3I0cHJ19nwLT+PcE9cIiT8Ah++A4UzITDwwPbaBWycxWnFhGNkx3HuWMW+24dr2kRadaxTLlnWSJco7t4V8nm0m72l8/FJfbnal6QZxwiwmOiha1ZlRmFbNeozV9dkmnqWyumNjrOuVC2vFKAAjO/p/T2+kluAXLo4VrDy/PW5pMDDePr0YZHgdiyEgkEPEGMAa7HAEibBvhDec2jjYbcAtvSoH6Ba7JgZqJAnaFd0OBqr7QQOF1wJtK0IPfucFxw6xvid5XUKdPDZPeIQjLgTJa76Poai0YPuDjLibPnWc1OXcjq6azGT3XnvIy0miVYUjLhYkhR66WTCkcY3KUa/nVRjEaxcuXSZpdMM32qq6qpU9YPpL2uoNRY4M0w+3VM9OaSVqfKaWcrvbP3aCfuO+ei+eNzBNZYg6mtFw2acdefn1NnZtFFbV0utB67HO2B6H0hqQhqTHFnS8gnaxWTm5qp2KsIkty6kL3/0t7C/g4siRNPCMeJkNlVhYzqEBSqUAsW2ZZlszdpmachul2d0/3DjPDMg79ZpaZ95hv4ZiZb5n+zDT+Z2ZVWd4+vpOpSgmqfC/eF198EfG8uTB56ObyaL1uWW52Umm3CwGTKGstyb1aMRd4g9WLClEG936LjPEXlNeUTylfV35pN3j9KYVwooPC3wSpfPcBoqT7UzQ6rghGmIg9HGeEv6JwhfEYjyVT5CuKioBqNGdSJmphIujGjI1GrwDSMWLs/OfdgSqoUnx6fqf59ZEu+LWvfP6zH//o3VdibXBjtd4vajzswSyCsUn6Pv/nc/Sf0Z9YC1g9mubpzM9lpSMnHB8/mu0pl0qsaoZfiYdtpoNwFhwlp059DczUwvi1mNKrWfBHlimIUckwqnUb1IVDPxsI4b7azFeqDf4z7eEZqhIEK3f+eHbFc3Xj1JC7i0FaWmFBF+1c2wM0jZ4k3LK6gllG/cwJR310l2srw6VeI+04uikNO/eNr1MonTw9slyiSV5xyr20BcrzV0tuDlCm2Pa63WoUz6/XuD7eQpoCIIGrynSgQ7vQ2hgOHNW8ZaoqHu8gR8iC22/5nWrzuZPjnUMdsvlAczL5emCbrXbOl5rM1wwj8NZC18wW8tUdFZ9U1aUwdIzDdUMKp3P6mBbWMxQznWDV0O1auvmN7zx8mHFirC9oy10kmiymOVyL8WDr3u/i4/hTymPK4m730Svbmxuea0sFYX+t0ya4F5O/12dKesyYV8dbNwhP92DmuWPKGzv5YRDMpj6alogPT1aPYxLUziZzFgUkp01RUHB/ZgDR63p7JhglBjAB88SJL7wv7bEUsf3DFNwtoFvripRBPvJZUmPuufVAT5f7vcscwfYF04wSnu00FiiwDFUts7Z8BTmiYZaLbqzHjvmb1z75NQcB1LZmmmdDpAwg9dPfqV6/YBqjgsa1MEiXydJYUFXTKyx7hnvc3l5byR6r9W0AG6hacPuNk/1cIOMYP3/vt/D3onF7Qjm/e/axLeTsNBB+HpDkswiU7iucEcbJ3fvqBmPKnWm+ZRp/xCvr0Ts3H7540Gt0qyLmDrGx08C3cc6gphYuppLB2mh1bvzzdRILkUIkUxEcLSjxgMx+dIvJ6htXf3RTh7WRKK3WjzWC0/uXl8N6y9WEkOGgyM3VKxId26kKIusvapxR1NIjYI0FCV79jL1559FUvtoOG397cuKzB6dt0DWOd65C+f98/0e90iQ/zJcCs5GyNSlF7USa4VJNY17dT3UMoTmp/TVGKAXp7PhAwR1vZInIFIctVa/VM+Xe8Tf+2bp1cuNdjHH7Y7HBPRxZ5nujEX5ZWdsdP3OzSBSytOjawEDB/dsnkOwpRCH3bTOJ2Sw8uHxxbdJpL8ReGUQtHquZtc39zdzIxvHAzJIMa9GBQPBpPHcEQmuR1T5ovtGrYOqdxvGZ3A/j41O9Gp86D0ySoqMSPYuljxtSasWiq/kawXxmYfHZG+9xpdG+GA7XDdWtNH/88nqL6ns7AQu4efKZHILlC66bKRX10YJWGFNBPF3TxcqQ8UJThScWCMdAJ7r2aIBSEJnS85Xdc/WsZxDTf+HED1w/DeC3cna5rVKk9N1XP/HoNVWOyxrRUe019cWx4IIELMMxdQWQopZZXdzYKZeB81bI44HU7z2Pz+BPKx+ONIQn1wFwAwgczyAlly40CKN3QLJ3gSL4vsKopExGXkdQKV5RhEKFEscGlBH6tBIHd/zx+bTYcPDB97/x2vPP3nx4Z2s0XOxVSq04sRSnh/yj4OnIrOM3tZnl1ubcKpxOQnw8mKoLs+nzp/JZ4o3q9xfNdDlMISm+b7xy4kPt9urcwaT/gjn0w+Vu380MFz2n2DmtWk9vEBWdYCdNwDb8O+dSYfHlRinHpN9yzUstP28vnCtniFNydvLcIb5PbGK7qnDrxBnmrGvHNjdL9aDGqeNmy0hoXRZzvpYyvA+lHvYOyla3v5ttDs7ttspBeWG1J0BucpDF52wNMr0Tl7kYZTzkLTfvPm0JfrxZmCyAk3c2q6rvkFwpIA6RBRKcWq1mTz5Tztte+YpzJhVmPE/XMU1tzrycgsrJiOf9Kv68shXlIz++640FgvLEDSQU9zdDjcRxtZ4IQvHymSOSE0fWs4UUE+PCf+SMNMb8eLb6FEqAPn10KM4lmg9dO9jvLpRyaT+hjP507qKZTUji3KnH+DVKJCNu4wNySnzSMJklLsb1KaNOMO5BMVGIcDrF0aSuJeg4W9yr8KZH2MnMlrZRrNcg/ipMNBo6DH4EK6mL3T7b1/qXvfp+UX74c8sXL0IRNtYRtMnDwMV6bpk9fPJhx31uo+dnxudTGR1On8oxKZCEy5ypFiIOgreWvDEvbJTLCAQ2PHQC+DZcXjn+7HW9uGrlwfmF73rv7vLAaja0xSYi2qX158T3XN2NBnfnoLWY6lF0+OkzDhcSgHd9y7UWFnbqOTXJfcC99+HH8YvKJ5Ubu9dXAMECoXzgJjJB9jsLLQJ7isIFV8RdRTAuEsWWJ4otfW2m5D2tcD7V3/nBRz/ywvOP3rly6eTuYq9W6Uoe9MJooNdmiyHh8EeLcPa9eMJin32UpL3P3RKHlC7jA6wvyj5gNHElPHI+s8XI46XoW1MUnn9TBxWQ46mK0Cp1KQvI8yuhOlq+ZsPGcYOZKyEEN8v1fUtTZU1HIqwQvZ0bjvPIcY0FFcndg1ZgZ3yq8kyo6mlbFwNTgLlU7nmpnSGFPAABRgSeqBlu6Fs65W7VQRMQObmgI1aFLLRsnh7eOplPLx7f2NY3CLC6q+nBQxVBmd5Z0KRtFisTdDZXVdbl4UP7n76Z0uwzvgo6cobliqkbJPPU6NrYfLES8PQVQc4MuFQZp4Jo5HrDdENdoCjFMWopWpV+hK+VKHC/u2ucSjFClIeBUdyfrsemghBHnDFtiJX3u/MUlX2/GsCKcyf/GeelWSyCXb3U6NeW2pxne5DEbPMZSearPQfCZKZhHBvE/DtHFCIBz4RthLOw1ucPJO5R03auGPV3VzU+buk+BcpU1mu0N7u3NjwvXS5+o4VEK+1RJg3J/YHN6/maJgGGZ00pjQ1p1LsXH2LpFK/UZA6/asNOT5iLIDftnomE2d/U6nTyoDvh//cQcIHmwh5rldQyarXFxxf3H9Z5CvWdgUrQ3GrVB1dXz15vnDEA1aLwFLz3v997E7VozHuRtnhy93gdCMC+ggooSaBLFIg1La4kYRGNfr8yLY2YVb3EEc/25milUkpXRZyFezAiSUBnyhzarZnPSvhBK1lBJKIfU881813JaM7Gcz7QR4n2mWg+oyw/VMqHuXw/zAQGtcIulQTrtzMaLy4NSsixejwtCOMsV09/B1BIX84tWBLQCrPV4VrWZQJAjvYYApiUrxjols6eufxoTnLVMP0Mfl9gW3XfVBF9pACBu6hS4I0mhc2WhoQRc6eT+//+OOok3c3Zw81Nxz1/bPzC6cJSSAzU9FPbDAQysbkkUtVb35W7evbMdtA/bZoKKm7EjX8cfzSiA59W/txuKQOUbC0iU986gZI9cXhAuHwZhML2XwARJQwzkd3vKkhViupdRWVUjbEsZhevKJJTmYSrNAlXBVVENFnkyNQzFxQh0iJaEicVSpDQOIGlElSjqJaR6Z3I9E5keicyvRN58E7Tm8QJx9fvdlrLjY12drmm8WIvYoCjKeU+knGS+ZxHrtGxSWsm6oQJmCahcGwcySIRMURO3wdHwug8EBbxXeaoOF6DB6nLcHUtObMd/3XZquZPCNUusOyw4J58xG3JyxUqGFcB1Jvnr9y2iL38WJ1r9YrBCoGuM6h3DuqoCduVxWK1IprVUmBoeUsyPZN1MgsrQCHIRGq+pvfKFXiXxg17fVlSlRH4BwBo6kiIlZIvVhv02cpKefR4TdWPbZbMVRWsgZfNLkhOQSMbm9cvjlqavXKcwfJSUKSQAidV1YGZ9XPtfuDLpudxd8Frnh2rPNAbaTNfSq15BPVFbMA7kfn7hlEq2+Q6IJp1JkVRowoo1QgrPx6t22eUP7PrXdeQK0/eqdgU+CoQJDO87CsK40zhdxXglEOEgxQ5xVem6gXnztuq23L/RdekYw1w8f7pHBiHVxSgDGKQQDa/6Oj8mPgYt29ePmj3T3VbIkbd8X19i8d2w4WYAm4MB0mMER6B6RKZRWvzjNIRAieeeCowBn46HadfarG+soTwz1musLxxiWKvDZlxR/D0+y8Rl62f8DVJLUD0s+WbXvrKh9Syl9NVmW5KSmXGcy32Zoq2xxcv3BWSndgRpunZFKycMUzpOvxNfdtaTaVOLC89fL3rFSYducKh3vEKmgqq8XR3iPqYWIJTfcekTAM6bGRSkFrTjXD/yd7OwZ6ElZ3mSBomQgCUE1MXaWUaO9NMVKPzd5Tf2i09euEEYfLbPvrYgCrsPcAVsv9Xf/lnfvgHv/KWKfkMHSaKIEBEBNdMxpJV5O24VOLVzF+b6VyzQCOufksYjy0P8lMBffQfu5gokhH59B+9SayYjRSK9PX/jEuPrornPvXHf+kLn3vphUduX7967szOZien8nTMs9pHotaDYfnbZLCZVDZzEvejlCMhLLn6QVUsnMHKURpq5pB4rLO2Z9LbDEmOBIWZ1xF8xseSRH5yZvIz5h9wRtxiXj691mJN5MgzuXxIRH1ZG2QWT7ePNXMhSLOeNVCkVuscfMoHGjRrpiCTEzeEeWJUsai6clFEEkdgUMiZ9Y0Fg+dTlqtqmhtmrZWWTgp6Rpd6n3DEc05TVbFYBAooaGkJ0GLMTKlGulSqhoxI0vK4KsvWliy7hu1nKaetkq26bt6rZ/zUsZRbcDjQU/zaVa4t5IjghiFNajpooNbM5jn01VLt7E9+6WwzzHiWm+2WysJMWa1WaAEhuSbh/uJi1nGHk1MqdAtNqW67mA7KguaMbJtjylop6iqojsg3dL772b3dpusDAQjGRl6IyeTue/NU7/JuD0BoanNVGn6uo7qDwRvvGmua3nTPi5zgXM0KS12qSYLUM/Lf8urn1jYMr2aQzNpfeEvf2ydqi8VDoBMrWTe/QzYiRPw+5Xt3w/eDgBdBEd/3hYuH5yQnCtn/TsDZgllRKAdOY34jOIjE3wmF3J1DXOLwUn8k2tsdvv0aofA4pE+40StHVx5dFPvL973n9btPPdHvLLdykmfjqoBZ0q/+oMHxt4vDUQ7Zn5vreGbw9/WY+cmifX8tjGeudWr4JRIG87DlKJAMgqN8bTo6Or9JXHKDbxDJhy7qDlNNN69b9Ua9qoLaUdXUyyWNF/Isu0WJN/BS7TKFi/mqn7HtbJuo9QHyxYnjqCvtwNZ46oUdKsCgm4tLWUAAOAYLm6l83kv5piks28xicTlP7aJtCdsrEbgr1QzPEPlS9ptqT7jajkuAaUsbFi+Vz6ZI69a3XUrpzm2JHmbIZeRreubgAs2rf+eJiqUx0c3pMtvdyFCtsFzRHF6sZga5XOBZ3upjAqBSO4WMEIDrsGhREDzfaHFDZSiDWt67ePONzYokSEJdB3KZiQVtgdkxAhsRQ/td/KfKi8p37hpnTyFVlvqIZB6FVBQaxxWxeInR71cYzKIL88J9bSD9Hz9vrhCU3naKAgwUGucE5zqBS5WnnugsNGqmrrxIX+SxVlBLrGTGtuLamtk0H1nR1LymznLmKWe2MveVYcj52zMNQXo0M5d59Rj8pL6pbvuMsEKZCqkydeXwYGnvdNeqtZ+/HhYObzbyakMu5NGuuVmb13umVao5pdKGQ6RGc6wW2pmQcWKeNAjVDg6WF0rbjwTFheYyXicVw/SzBQ6eYELTBLdz733+Y9dL7dI1j5KGwxH1BtrQD3I2WuNKqpjrDgrmQn+xrTFG06xRLCwWWl3TsVVjsqMhQKEkxYnhqXde+kC+qSQ5+xZpRL70U8pPK7++W/vKmQmh8ke/r1rIBVyhP/Y5JFz52HteIEzQ/Y+8juzc1CmuaCB4rBrcVUGJ1zl/+t/jQ2OCnbqQVKDP86SL9y+MQyiJ8HTsCCmRTx7d6IGLdvtH5zP22n/0GhpbQ/EznwblB7726Z/+zE9/4H1PPnbq5NbGyrKuKp+CT+mRZTSH4WyW54RqrvLNKtEelDAecJoPRmHRuxKGU9b19kTUEkngIonGanyelZjMYGz2M9jwbUrJ2n1KnwhVwk34HeSyGcp9b7denTDKeLchoJMLCpZAyysia+QN5MapaLb32nWTMt764EbJT6tU6pqbFpDAy5LfcYmueaEkoF5ZXRSGpeVUq6lrKsAjEKCqcnPgu35pUaNcDLey8HhjBKK1IFC1lqTImyohVob7aqNfz/ONl0JUvyi/8JXspFXpdIum7a4tBkQUtjzP5BQ1p+wzbi1XK8JKe40LQdiur5lMDK463n7eZTHaxJBDsk61KnQvTBXqNcPV2ZMnekCpRphJKX/kUNLTGsjiQxvnfGJp5naMjU/ltNtLNUFba+tZg5qpcocLwzeXunkVeK+5Yn7ju1N1AokO/aeJFeHTJ5Q/ths++VidMGV/sUeQnlvCmPyvADk3haq2wuJwPSHxSszHkUS/X+FHSHSf+6f/c09PaH/z33+mAhwUFuPXnO6nqPKB9505dXyns2CbyifoJ8QRgo3XjuHaH4GwowKBqSIwk9cEr89d4ExIi6PDyBL/26ENCQlyTLuPbZ8HY93TZT018rhZrgrQV8YUvGsdDVBvVSPIe6gYZCPBmVMqnXzd+i/FPOZwmitx/Qj1xn+xJl9/sqyJYtgRGFDTFIUc8mJdck9SUjckWxSESb/esv4rcTB/77fJesSNvqj8SeUv7NZfBk5+6Nu+9QuPMoVfPkRUBChE4BBAsP2FVonAjCltqiAZYfIoNa5w5EkZrOAYsyDgIg76YBZpzHhQKu6u2XrbxUd5dWRKbDKCTW/B3n6LWJvLfPlLX/qTX/6T3/s9H3zfm6+/8PzO1mK/UVvWeNBrBpzH9P1BDbVeC7hIJPJ67ah8Yo5wD2b75hxqbmntI2CchRVHtYozzeLBNPtqrLrHDItPU4lhkA5mCgaZBw++iNO7k/qSaC8Rsg4fAahUAAXK0k5xoDEEdHuR8bwH0OikGyUppBz3PI1rbt7FzEoqfKWQ72WKywVNRXtYVVHT9JyqE1lqMCQdozDaoQJ1un0rRZGsu8MxTQ1TGiNcb1CDEgqAiCDkw4fuILqccdK0afN/LRbzNQnA0vnB+XMgdckJBQrIzextB56Czc1g4O00HG3BIAStd+6ZZvAOvVOTUmon0zJO8nqt1TMf/+UtK5Mvlic139W5KbrtPKIqhOc6KVU4C8MUN4YrTtiVAPsTlclts61Cy19rqiYAAKUUkNDqlsGzXDOqj9bDQwurxewpx5DZcU/VUs0GICWSGCzF0qWap4ByMmJl/2vky28pe7tnHl5CILDfyiHdUyiJYlECJE61wOsKT7h5rPkKpog4tTzPu1w82D934vjq+NhCrSrjCis/yVoO59TpwXrHUXg/nzZOhwlXnqdL31bXeN8E5xCUDjgsH8898kR1uVnIovM3v+tLh5cn53+wWAFMf1eHuT7vOcRA6uysWmFvfLKdzbjqytKFL77Hyb65tTha5Ona/uFCxfULxeyqOYCf3PaDbGplwXU+9C2PPfGtL91830gK0C+rgMZIBQ2NlfU0I0GpaeuoL5750Of/rIM7g73V0ypYNpftfLOWDVQSJp0av4U/iH9WeVZ5ePdaCkDJA4pnJhXCcREI399Dyti+56CyF6vAPEmUJNmTpxUh5ll6QugthVKLHjz+6KWLp07ubK0sd2prMq6BnWdIRjMMTwdzcW+eIjlCejEf5Fly/igsmi3htdEc3+N71udLWFzooDk++5bYfvJKuVOvQb3Ksyu9ZUM7p8Lisq0JtZRqaO7lpkoHxzSpXT3HtIVjZb/sS9rd1DhThyv2w+Xe6rpORHDZxhM3r/Vyxyvwav1sKLcnZ4nnhEXC9cVFYkoU0RoTpfF6xXc8y29ky6raBrGpmsi0O03EuGdIBd6Pl8qga/ijdHlntyL90w87uV6uuZWLe7vu/U409t+Hf1J5Q7m5az7x2NmToyKHvWcBZ/46PbVghSivUyBIXp8FFP/eA+k4xLQVJbrbG6++8/bNrY04k7hmEdGa6udzXDtK2I/8t9O6ZAYezGckCeD01OJ9XsAI3u5LJ6Ngug7a81qAZK6ErTpUXWg7jmyxkGjtFScYVEu6BlohyAkWVnTOqdkekHwuyF5MNde6lGiQfiggOspcQABoLS1ppgAU4azb0NRdKFSHge0E3cur2bAJmupRkyz1icFaor5kW+1zh90g3xyUA2GDDLONpus7gxOLQbGUctyldUBNaKXNxWzq2q/fZPa2jRxl4cSELp/ZPtXH3pMSXcCZHvEpzNeGLmNYTlOm0NhbJkrCc8pnlW+JulW/ups9AwI+8Oqls8vtVlkq9GPAFQTJ6SwkXFEEUBAxHZoVAydSWEyD3ia/HSWp/guvSRJWqU9/8q03n3nykdunTx7bHg+7rVhAW2vNXN2D9YIPzjIPkkj/vjnE584m/CiZFdy3jKMw8oF8i+BT8SK6pv4ADAqRVDrOa2qaq/W6P6oHw9so7dFYY3aqmKlr4slqfSmXMqywqElg20uaM9RJdY1gb//1d/cFkvLBtmH2eiUtk7FMrRS2DMmgreZHDc12M5V8f/2JFjc2hwZuaBKzQ5lbaWd0XfBMtRxINqSF9eL59y9E0f833gWIKUrz1HDWqkKo2eqp3ukvrzjFlO8GuXw9lbJAQu54jjvlvBRh81ilv/r4S7ny5RQp+8xkjghLo+O1g36f66dWrXQzo+pMNasTDkPjJzLf5ZRrWmGTlLOCIK9Weo7/+cdkdiC6Z6utAQAoRKlEGm4psqAPKj+l/DXlM7uf/BOf+mSv4dpCqi8B1XH/OChwfgEgrtJRFRJndmT0+xVFk0JqkfNihm4w/a4iFWFI8XRiCiYcpTF1PSlitC4ohpG0KKf5ASi/+stf/N7v/I6PfuSb3nz+2Scfv3P7oajgYmW5WlY+CB+04jbA2tskpHZEwWcYMTeGaeHUXFQtyWE0sUI8mIb7I7ZRj41g+vq+Oj+vyJqXNbLZoaOrQ/9tWdQZ80qCRTFO4sXEuvyY1AX+/VP/cmdC1PaCaW5kNF21XNeuFhyVrOy/eKzdcoPFiW+eyrm3VnW1dQY1IomgQkgW2oQy1vYzVCvTpUo7XSwtdg/Tqaxa7ZV1Z3e/kpaGycpdXQBF6NfKhnF+ZbPtb+NZJi21N+AAOZTWgonMKjY3O0VHNFM2ZyBZS7pYai7/Tr9NHRqUogMVtr5WUjfXUuGx4Ta+q9vUtVxvsRIE6bFBYxdh5Nx0u1JK+StrV2rNUbC44Fhne+4jNumDAAYEAISuU1Ys1083a4cnbtV5J1OwpVfiHJ3AF72UJKi1dQ0ZIF2qZjW2dvzrr07CugHU2VM9Y+cDj6nSXnMQVKOQQr2Vv7Syfbzd8+22Gr0NS//f4XvKqGFQymjmzR8cqd0uQsAazBocV0ApRL7qV/Bnlfcr79p97f1lHSkoL985PEEp4n7NYUTfU3RFn5WYqQSl+g4FKYn7xAShMbPnRPDIpBVJtDgVoBAVSFx1YV2YAtq733r9tZdefOH5xx99+PrZ01sbw5XB0kI7DIzYVBNUC9NzgT+K6x6Q8JMu5NiSgpGwiBCJuDBVMKawFoh5NjEpq+b321nisrU5VK5NErusJ20Yk7nIKp4w+LlJVrvSCHzG2xdTiyAK3ErrPuGItdPpbbOQWmM/6yGnFCBzss9jIN/b4DVebZnwqpF1LPNYSzUJIcX15nZP44t1ViqovbytFcqTUMXMuN11EC3mfJZky8NyRVsRcE/jBxs50JbyZ1z94sBMW1uqpyY9uqkFdSMdFq4+Y/lEMIoAEraNg7cMAJFRg9tUUPvQ7RhGcb24aOAiJ41qWCYi33+ss5KmSInNU+VXuqNADLVplqmFvxkh1CeUp3Yff+J2N5vxuQKvPY9M+ciHkIvzQDndXwLcUwAVBOWuBEURXJlhkcIYvzOdSkqT9J5HDiCK9d968+UXDy+c3G01VKF8Aj6hxpxk1Y1H998tbo64RpK+m0qZ8ffjV9PjR0hzxK2P5i7GjHnNjRAzOJsZSHS5eKBGdCZMrX3pV0gudaZ1LiAoi30OqdJpJ9fqTU4UB+et8SRssKVT/YZXyPmWg0bf2x68vJgKT3aE22zyjX67tVRrphr5oJZT7bxX9NiaZi+ulzqTbLNuAqVmPtMIqJE/diu70WOcktrEfq8JUr80aS+vStMS+do4R0SY73Qdf7EwPJYt3wla0i+t9JdWanY2SBs6XP7c7fSPPL2w0d9RaZ2HFNsL3S0/s7A0euavfupKUDOZ6jmlmqZ/yzOu3V6Wfq5ugORuLVdHWlw4JizBVwbWtF7xTfQjneiJSPvMI6iYAkXNgiSXgMvJGAXrAxU84jBqwmG4ZILHDceSx6k7oVBBn1BUdcZEtFlrOZjx7FtsrhoN4wslZ3f/C67cHdy/CDRI2mD+g1cnl8RaUh6Uxx65eHDm1HZUFt5dKORsjVHlCXhCn+LFZG2UmNcseJ8b0INNPrMwZMaRxLw99yhPcj+714p58IxDJ4b7nSN+xhHSGXkX3eFEgmp3+luZ2uMDi5jbnrF3o9tuLphcC/yMquvLHS9UPSkIADdrln34UH35wrDHmSgKtnjTVPu1jHcNL2KdP5FihrRZsUnVTKXb6Xf4xDYHo7vPl7S1lJRYnFiOJxxZN7nkqfqiniL2Nz/3UG0xIFLraUAvdPJ+oYIynvM3730Q0vibSloZ7C4CKCjjv/YdwD0T4Ny8YH3WG/VIHFZcbjeGcWcUCDcetngvizg/6rqjOI/uQ/AWYS8hOuvHs8BSF7fw14z/93c5qBoKhF+AXyBgGgrc+3/vfUD5Gv66klHGuysqKJABouB+Csi5KYTElkXeiLEEb8x6KlG51FpJNeNup3A1mgg3JhSTUcxl43f1+B3gO4GtblCRNUvetoXIJzv950EjGULjn4H/75c4BPGzK/DL8D/gv1Lc+c4L7mriQcKE6SQKdfdHIox85VVP09/xjsfG2ykH/s7iLy4a2ut3DSFfevGR4bYnk/rQfwn/E/wjZVU5VNq7jXUABfaDFCp7506tDPrlnIBz89LqFw4v9DHucjpGgiM7mhbdxnBXxvQocl7TirLWuC2SuutZUNY+QsRwFHcJtSaTeuthvb6/AkgxlS1JKjEjQhrrtOB6sAxsZ4toRgBw4wY0uwLAIO91iCwjEFYOuH4tAGsRXhLhoAQACKamMzCJQTH7yOXzx2PRylpbdfyGLInjxxdW9MBaf/JMvsXM5U+lFlwiK2kcWaZ4/WUSz9CNe/8W/lRUab6uXIn3mTh5YrNbkAIk7M1iUsVVDvbOtlsYr8LQT+A55PcJ4zwTGYZ+el6935p1MG1jaxKPQ6pd41Mgf0CkbU/arVdcRuz+jgt1XJaIxO2Ulzhj7m0AF8PTy5dVettGnYNU/2QAXp5pWc3vZw1uVmWGmTZ+dR8Q9ErfwDIsX7dObSOxamEDibZoYt/52OO61c8u4kO2d/IHf+lDzJASkQJ+459J1URui7/n9w1WsJefuVjlPFlhe/d+A56Dv6dMFH83WiIplbHpzjCTMcQjED/01BDmMlLo8xkrbk2m0z6OhyRp/OQ2abV/LkRD3xSg5YcOIgH8qqm5VxAQkfJrV5CxSr5lWFnGji/DJxfuesdMU99gQNSiSqOvOI1qXeeMOXJhuJ5Z83A0BmEF4KXbgMuogGLe+9fwk/ikcqBUd0tL1ZKhMAVgPwPKufk0vrC/d3wHp1Aaf8DppAWzWeNJa9oyxp+/PZ60k1kehuHwfmgwm7u5a44ZGc+b8HyBQHvhzhMmVPB2akXX2ahSDIACAjSO1SUSCpwWHFMTRnGpyjSjZwZnzi41AlFB20Qcm1pq4UCz6MD5pSvitNWSsp0pBvrlq/0UQ0IjITFAAEkbbru6vrLDzXw+lT54z7Whf6bhE0NB5ey9X4eX4e8rPWUn3tFnfVivFXN8tudNO562pp8O5h067fvLc7aMwyR4uW+bpDVt5090q4RiwpMs6C+tIwQlLZNHKijR9J53uXXCVl+87IFZ7WuSLfvfR4GgT2orVcsOs7zyPJrgVCsNv6hlKtbC6OT6khC8oA+HA1195oxlmWY1xwIN+hTR/6IMK1VLs31WUEAp3avDKfwxZTeu2+wAQdeJ2fd+KR8Q3NvdQeXcbDerpxVg8Z4pNNnX4MkY/W/FlnyYynd6tZDzXIS+kykfjnlYtO7a04rW6S5VsQULEcFXrV1vx0YRjJJvxBr4vJbmRhMQ4Om0UanoaaJWhppey1iORgBLRXuhDkiI9EJK32WZjwIwQi4AZUL/Jx9HDMy/+ssZHQZXi6q5MtFlVjIgiFCrogTY6W42JEfH/Zmf10qW+QUqAGIhzL23DL8WYfQosuk7ysru0ghii7517vT2+uqwWctn0h5YsIcwa2z1lIOLh4d3Lt5Z6pNoxsO1VmTOR5Vk05leXfMjm+c84EFQxiR16s9LeaHV5jNETwYmbpMZT9ZqZDirrE+C3LT7EbLELECNIrus1z0Vuxt2ZkAQ4jIGeSZ13CoL5ly4YtZh8dwlH4GCpg0Q1lYlsFGt6XI8dmadHH7sVbYuXCuz9vRhBeWK8E0KOYeaBYgxgmH/z121nqvhtWCPE4b6jurB/6zmJgtqYXdbN/RBve499hjTCflGvlbWqrcyfGkyIIfxzN8bwc9Hsd3DSnE3N1islDNpruxdv7a5IGZgdvEQYuI+C/MnU0AeT3eFi4BhGqvfh/kgzuQl5e7zgs24qyTec+Ztpe4iSIf/kF4gYHppQMkAkMeCS6UgfcYcqGNDZz7fWlUrp1xgIFR982EdQSUaQKMBRc0mAgYNKv0VO7SG7ExYqZli8Yc/9vRr1FSRAw5zbsbnFqEaNOjiSurqOYf22qwS8uDpS3e2rvoXHtZQogbFMlROXX21330CGsgr6r9opGJ/Z937Q9Dx64qjbCnylxbTOsFBL5XwRD8GxKQYtTaNKeK3c/89PGpxjinm0VPv9aUEsB3N2LA6CItcGO3Vuq0RTTJdi/Gvi8AOFxhm80IAuoRl8IWOkOB6mrFt9gn8H4JrlWHdENk7h+uVnONRQlIOsOP1ZuvYwYVLDg8sRcF7/8e9gfLL+DXFU9aiz14NNIg/+1oC5DN1Pd50RgyjQKqMznT5zqsB4lR+637I9GyZC80yzUDaJgmJoEv4HHYNFQQx8NNugaQ2VamnQHBPInE8Ez9eENK2LCtQbRPzRGWAf/go1lW+9I17z9Y9+j1emgCYI13Lrv+l6ov50OaaEVdEZ+79DryIP6dcVB5VdnY3SxmHUWXvxMZ4QOGcQgkq9B3/oa27Hrp28fDC+eWlfpcl21y1YkIxipArmLeoCQtFkFjrNAqI34twxEU9iIclIScx8E87/seTcUzB2pGVr3EugqPuq0dJUiin6uOWQVy0yoUM0azLItA6HA2w0np/cUl63+IEJW1lAJxqBxfpCxSgXlO97nd2C4Qea7hEBiY8At/2Rc0AaFSJUHuhQA5mobLVk0IfMVPv1jUWpMDO6kugp3/JDjIyk+HcHq09pHoOpkqWc8bugJb+meDYmXCSzerCD8wY0Z+KbNePuNpyxICrerz32NowaYGMf89JV9yIvjZLi8bHAz7rkQzS6X+5hAhSFMygS2RNguQoBKOqQLfbyYDO5UpXstpB6AAXGd2tozE2ql/94Hs+VOGcUNfM+tHA2Bpw0X3qWv5/TpdETQFFRtXK/xP8c+WD0ee6GH+uVFz5H7OLMEbdwB8lsxUmdur7MfomODsDmiAdzNL9sy7p9kwcnJH72Kojlz2fqfh47Jb8WbO9hZPkqsmUVPoGvAyGmYXjx0+uQtHPN21jX7UMSJyONBwtoFzl8J6SYRJTEm5n27bWYRpANA3thdBCQgCQ6JIAC5yqZywbQJYYC1UrpRKiszQXOXjVgDu6lQ3TK8OOk0ql7FTREE3CKQNp8q6obG7VcrrvUI0QChbAOxYd1zh7sLye0aSpUZYh4rU3CK3XeLXWTiEjCMhXD3eu+sB1qXKRFy+9V+4AZSlp2AIY99UmdQ/2XykkfWn+vd9HjEb9aozyl3U1XlUX99abNU8TU5QfDxPKmkgrMWUNYruI8TwsseFobXUYzgd+bYr+MTWo1du16eDHO3nEIzsb21Z8VPCyPl6RrMm+VT0ed1MTQQhSQoI04ta2aeeBAwHQazXKGTbqAO3rSZzipqmG6AjXg7sawlJPsCLdfJl3dHvhY8+7TGMM0dA1MZmkwo5RO3VwijkaxOoABMHd1wkf434MD8UcZSdvpB52FhypaTGmn7r3m/Bl+DdKQZnE/K9RQGUvhOkYDAeQSFRrR809U7Fg2swaG1MzMps4epsFa0cx3im0zTNXVQJw9pjBPaK9esNjzsQVYKBoXc6inVFBOJ2WSplaSb/nEy8w0T4mYdGh2VtPPqUjP9sU1Bqk5d87LgUtqPnJxaUtTXU6OlErLytUMe714aexqJxUbkQk5nHlsd3cTQCE/csHzUouTFucabgXNaYPqHJuqsek5ordfOMiX4mbEY++Cwo+dBSA39pVH7p+cncyItyf5ZIm90vq0/E6jH0HD5OYNhbXyuj7M3Vu2qweRIYz1Usmdc5iU5ncX6I8CKJ13m5Hg9qqp0NJwo6eyrn5gg6G2xYAAOI5YVOGcqtlAk3DqUiE8yUAucBVECDzoOcJN42BrVVrBmj9yz8gAHMucbOSBS35v+cb0sh1irqEglPrSFsVeIWZhIJoW4wSk0+Of3wb19dqllzbOGl3Ocn9jFdGuv7GyROSsxSnZlZdyT+2R9soEApBoKCyfa8JPwD/WhkrlyJPev5Yn+EgChLCgE/T0pNZV1M7juiSvc4ShjAoYWw/yWoaJaesjuNhicfpSP0cJUMJ3yKHWU3DeOeBRx1gzQWEFNUf79oAlDBcKOi1ehKNSsYuAxJ1/aRNAGkJwRuCkAVjkvrsGstZqnSf+0xHW9zSkHUXpVYROf7O27YYV3UEAqHAMANIjP4r79X9y2OTM59pJz+5wlhqRJkjk71P3Ht/AB+DfxZ54dZu/WyrxmgseoQahQg2NtfwAcWjv5TsuBiDxcyzHqWI/XAWR81ROE7eTGX5UTo9tZkHKpdjM6nzuCHsJWnW/IlRFELkA86lET85eL50A8MOAo04wkGmFzK02wcgUF04n1/3UVCg6BmuB6CzEvx9YVbsSk9LM64ONMIBgVLheNIRqi+JJewnL2W1IBfZL7gQFsbepu+urSzu9jlFYqlCgqCspsC9/z6K878b/qXygnJp96AOlFy+sFejSMt5VJDsY6KmUYVi3PjAqBI3UwFls1ImQim5MauSIPTw2ae3o0RcptHiPOxFTz7PruEDJSQzgtaOt3iInd7RXh1TF+jP+ujqM2FlNJXK0/MmBIvUxbyhnwuuEu4OLb+Y8az1PlW5agZMdx02Hgjd5nBQ7yIi8fOu5YZdxsk1gfruSRcA1SzR1OsdN6sTQBvSp9anZdSMT7qq6eQsh+lE9UZS46xRytSXenULJRbyqpPXV4/p/jAsAAAQ3basGmXgADnHAEROEOo1rrgIrRQLVG5VCldWmFasAEEAypdtoqoGm+Yn/hAewQ8rk3gPwjGistfIpcl/eAvX4crykleisVnGlG+aGoo5nh8moziKxzvwk4759pToJcFuNNS/STWbUw4EEDi8oPqHAGbdMUSlAuR0rQaPU4AbGX0V1vDDTFqcSqIxj09OLBmZS0+kGmbBBNsJcCXMXKTb+5UzPTAyRvdDHQUU9d7vIUSr6jDeCfNUExFg/+DsmY21lWUTVWXvaM/waalHYymXaLFT7TCJK6YwHE/+dHKPllftfiaEi7hrILaHaQQ28uNQduqUJ6vwg5QQQ9hSU8sWcOuKq1KaFinCu4tNl1F/2DIAiSW8KjNzRE+d90ppIFynsDLYLlNchH9AaO7lZ9dGGQNMbqB5xlYBls1qLleznJZJKUkV1l54rMa5BRLsTbvpXH08v9WxIB3WHHXxpfAdrpGNHc5a5It/Hj1lpFxXcrvh1XEvTDmWUPaqM4e8eywhJYlCNkr7ScRN/Cll9RO/M18p8fMt43xTOn+KrvM1NWs5nWWoA/+ZAAEJMCobGsD58+5GB8ASgrzwol+tWgRQpgRBdpdQ7tJG2UxnygJIuIScIFiNog7/Rx7i5eGaha7uOjCZ6A3LwiXvU5EXJ2sbfjVv8Pyzj2ebRs7kHLX0t+uPO001cEnJKy+/q7Njom8CAPcCIbxkh8bfxJ9FX3lK+UC849QtAOX5Z+5sTgYpgYD7D13aPxeB71BFPEfgQUt5IXp9t1FVnoKnaLLj1APD0mpF5j0Pu5dEbdpLJWYqMz/C36PSoOE8jA3Tfky5Ex4eDKf5V9HmNgZHYBQb3ZSG40/SCqXw6O0gf8KUU1UCQm4JjQrKKNGzPUAgmuaK3NArqygJaCFFy69rVGW6Zpg6gNM8ozU2skA+g0HJWPuq44c9AK4GvaqBgSe4BIbIivDd1z7xnEVgODCduqAIha6x1Lq2gDZVGScxVmUJPPWUFnhBWs0OW1XV2r5+o5MyS6Yk0q80NaKlXJkKLZ0F3MhuizCve94zaHislGOaEWSeuuaknTLHql3rnlqtBox68QrV7p2Gl+CfKA/H+7bpKsdoVna2V1qSPeAVr1xOuZhYbhx2hkGQJADqs4CaizlznGkn0VueHG2350s9DEJxNCkzEXwWj7eswRrdoPrLrUyphFILNTXnc6BAzYapar6vphgDoN8CUquEujYsZcPQgA19NR8Y6ZFBgHDDV5nroQrvGfXJEFXHubnpZLPELGX9TnllL6caVc6oplMNCWMafVaqJVdVx91wQZMMGWsQOxvmnHxvy2J66dLz60L3pQpcgciWW/Az6CiH8d7inopKpEFGvHTBnscaI5gNzigdhxjTKtwI3abVuPcTvtOQ4mjzsweUo9h0E0gbT6Zh3qI7sgCZNPMUcW//TF0HGgiD/iAS1Khnnyuk9ZTEbY9YuY7dcB/qMN0G5IxaDL5veIaA9Gwj16Dgp1ZXuyYlggfaJysfv5y3+NcAKErZ7FV6B99x/lyhJoys9m/76XPHhXX6DXuJUV6UQvharLz8X/e6sAn/WJkoF2OPtVuvEgKwz+MEOgJGBkKihUvIXIk8d2Zl0G6VCnRW6nAkT3AepOcxyLy0ZnUtIZCTtaN05KxL8ahq6z6TWJbE2V6z9As2qniR8f4QjRBOn1aXFsfq5Ou03QtIbyR5Jy8Np/WdutRPtH0OQuZL9aplqUKFS5LaWwsabwwkdQx8FBDtgr6y+8wZtrGRLfae/zq1bKM9MDUzs8Jk4W/oKNWNzXKWxV2yXtAeXqweCjW2Cvii8lX8ZSWrOLsmzvYFT7mJKQzD5NMfVSTN628/T1Ve5Vj0AbOqcP26mcVftoytjLB5aqlCqJGxeWXSD3Ir8epbgc8pPxBVBteV0i/YEIdB7en2//bR9v+1ZCvyeaPL0U7sc+UrwcPYskZY0A0jbWu2U9FttBA4GtwrBwTwiyLl5DthOleq9s20DgRV6tvVEneX6yYIFLF/u3Dv38BP408oy8peFDkcG9YkDnowy6LU4/nBWSFdDM90Mt2d56gwQtSmdRJH0zoVbVrwE6RGbt5AeTKTNwGNQY8LQjNmzTDIrkE58pBq/b1vta/jR5E7JULAOSxJMUIA+EW6rX3+Ne3kCTIKsqbZ6O0/06pyCqjxwC2lzp4ykIMsNx2jXF4K8PRS+fhjvaLDmXVCjP5MxyZCKKDUI078s/gO5Xyk42R5rOOME9Oddw8dNaDx+DnncVGiiyZHjqpPZ0m+ZYzxr03dzsAlx169aFGAMqdqf/cYZ7uklgbQ0GSBdxrBpdQWGUkMSRznErAcKyO4T71hlrCNjkzZLL24Z2k5t/Z9T3tC1Lt93CDlsOi3bl3zdObZQwmUOiKrGa29x0uabU0GxoVPj9Ku+2Sbxc9XvNeBa/ijysno+TaDZO9+nMySIgkuxw9zVD4Zk0suYoCaec8RTyinEPG/tWlJ2yfVJ3ytUgFgTLdWshrP1XXKVQ1gEMpcIVdHc7S+QV36UADG2JAOCl/wdAl4nfk66NZuo5pLF8YcM1JKApyvFmSumnPF8AqwgHV//Vv1zJNZgtm1YTup26rAMfwRZS96hq0CDOZFf/c/XvSO87lQH7OF2RbFieo5f9BpyVXSki34rL7vF/0CYbsMXqYWvY0AIGTOqNgaJ+BZlBBc7OeMXI4yD9RTPgedHG/xMEcBaSrj4LOFQOrOW47gAau1irK5lvpAa3mYnmQpIqz2+5Xv+nWPgq+Dn7niaGx900Wos6UlEHVbU1AZRxj7FyOM3VKuRSvr8um2HcfkvD6Lwmdb6sVbUgzDJHFzZJBzaBmPRg9sNTKO1n3Co/lRBjOaX7j285hKd4gN+VsVo9xu84vAYm6IHqI13BThxrWTmRbj1OrfWdxVdeTm5qEPlIJOzEzWv5R66sNBbllkLr37hPCOeSJlWx2I1mbhlZPWB2whDW/thAiHLmW3IXBPTHrZwYUu/m0igGa5ZrPOo8cbws4FRt9QQMlFsdAW/rRyOZrRCcQzGs8Ln6E/96dOdN6FnuypHWfnYo8ahNMcXlAT08PtiH7M9O1oCIazvabe8z6OFupswbEYIIxGdWFktKIpqWnk3jCNGwilCgVeq0V+xPPVLkVAVipX7JQGOgAKYuJDtwSqtFrIVFnagYWFbS/VMGuCOJXjzPVWVuvpQSmbQ9fLDJZdT20gIvvXJyBtrH9tk1Pmy3qyAv8AbuMJZTV61uVc/Kw8mAdy8wRzDCeJ7S5h0hUwe5x4fhOkCXz+t7X3S+8J8IMCElEqEKBQbp5qq2kLVQBcXMoYE1hYAJSAg7OPMjP36PNG6LgBuI4DmcK4KlMGSqL/wBuQMc+0qiRIU0BkCRuc6aoPR5/xlIw/Y0xY+DTdEE55TJB+IP5anZWCzDd89dPpmXoWr7V28GC12pz1CM4zIAiBtUIeKlLHLFnvlHcJWusWiVUtktJJNo8E3dqqpXHX42CuHvMldxazviSsKLHETJ6Ct4AThH4YQlNIs3L4xnlB3LxTEvUrjXdnbVERlGSuP3/Y8FqqDsA52vmJKayFvMaFKfIj26yYGiveLdSeL3NO1NjLRV/QV56Z/R9bbPp/bK1MRsEo+vPM9Os//zxQ4q9nkvP4L4AC03PiY/8/5I+WvAABAAAAYwDRAAYAAAAAAAIAHAAsAHcAAACaC5cAAAAAAAAAFgAWABYAFgB4AMoB+wIhAl8CjQMBAz8DdAOdA7oD2wQ9BMEFHQWfBgoGhAcWB2QIKwiYCOwJTAmKCh0K4QwlDMENcg4sDxEP8hDcEZYSTxNyFF8V+xcgGAUZcBqJG+scjx1NHiAfQSCjIZIihCN+I7sj/CQhJKclLyWKJgkmcybzJ5EoHyh9KNgpfSnJKoQrCStmLCIsmy0jLeIuRi7PL1UwKTC7MToxxjHGMfgyPzKtMx0zfzPsNGg03jUwNbI1xjXaNegAAQAAAAEAAHA9A6xfDzz1AAsD6AAAAADYspj8AAAAANiymPz/5/8gBB4C5AAAAAgAAgAAAAAAAHjaLZCzXvBxFIef83tt27aZbWx5ytjSHYS5JXclXUPmmm3z3zcMz+eYbPMTwBJAOvaeDAY474b5QS8RVkmJSLO7vHSrfJPMlvwqmWLrvBQfxTfhL96Jiyf2F/FGvBePGeSn+Kbav1bEV9fO3VNlfHe5+J0K5pGrI9llc+nUDUJdJ+Y+8tS999ZdMzdcIy9OP+TRqWDhx+VT/jyWvCT56FSA8lu0W5U3cSqIR6fv8tx1KB6inulcsruU211v11ZBhDrT3pVE2wpXrIZIi+SpbWrGBRLsHlftgbeh+H27T5bz9Idr3LYpwlR7WdJfsRvW6s1bgvqf4YKDf6fO6tZK3b0iWe1tsQ0M8EX8sCXibJlXyn9iMTy2DX5Lf2iJstdU8xkE5MABCOBPzwAAAHjaY2BkYGB68l+BIYpF6v/z/29Z5IAiqCAZAKMXBtcAeNpjYGKcxTiBgZWBgamLaQ8DA0MPhGZ8wGDIyMSABBoYGN4LMLx5C+MHpLmmMDgwKLz/z6zw34IhiukJwwMFBob+OGag7hdMN4FKFBgYAT4MEt0AeNp0imW5wgAUht/5ru+6u1e4gqTAvQC/yUAIShAGtwBLwHMY7kc/A7TJ3qEAUPSYMuI6eeAKBw2bF375x0+MJAVKT9c9yxUR4ImPkRMkQcZzrnq4fc/qSVta0pSG1KUq5bbvPuzkUNhaisnMVlRAXQ2AphuAadk7u3v7B4dHzvHJ6dn5xeXV9c0td9zz8Pj0/PL69v7x+fU9mJa2jq6evoGhkbGJqZm5BYOlFQODtY2tnb2Do5Ozi6ubu4enl7ePr59/QGBQcAgDdUEonBUWTrwuAJArMF4AeNqsVeWa60YMHYeW4TK4IN+52W7jsS8z23HSy4vfZxftpd/l9hn8NHLK//poPXKyTKWFaEajkY6OpAkrQ6yW4yghevm7mpx/yY3Fj2O+afNskm5QvhxzpZn9MayG1eqqXrEdh1XCKtTtnrJUmAYeW4Yp3fC4YmiN+M85rs183Ju1RsNoNVr4JHa0Y+cx8dxc7PDTxCa+K6u7SUJF3yhb41moBjviq3J+FZZwFhNA5Bnx6FycQkNyNiqr27K6ndppkiQ2W26SaFZz8XqSeFw1BD+1ZgZA9XAu5roOuKEDwE/YSj2uGQ1ctFbUVwKSk35w+cR5tMrVlgN9SDnl8F1crTeR1nycztnZQhLrBKdPF2Mc2ZLUILLHdcNDodtTlT41DWx1oEGxDjKurGywtQr/XG95PGRIQI6Fq7/X1AqJB36aJmKStkuQw6Y3NKbCKGg5W2SPmN3kj/a9WK6GHhmnFOU6o7UBU8oWNplsgNxEydWmztr9EGOHXOfLuKVw66BL46ZMqDc2Wo1ix9ZO0nI8njBFpRLxWtb2eNLAkIjHwxdyHQsdJDwhuwXsJrDzeApupktKCAysIi5PhinlKfEkSPN42rxciovaWju5zBPr+kePT5iX8/HLxb7SdqA/VepPmkJNhctxMTWF+mUBT7nSpGjdoBiXjwl8sHVWE/KYiwshD9kGeU5l2JajcW1zbffPcQX/pSZBJl3g70K7u1SHFLBQ6pQGWyGrxz3LsspanTKqUJVoKeYpHVDEYzrgUQROA0oR/pfpaUtNqiDI0+Jkw+XvXPsSaDqN3E65Hp8xhSXyLHgWec4UVZHnTVETecEUdZEXTdEQaZtiSOQ7phgW+a4pRkR+aMhn6zOPW+XiK4/dcvG1x+8ZxRPuv8D4PjC+B98EjCIdYBR5CRhFamAUeRkYRTaBUeQMMIr8ABhFzgKjSGPoYdlqnkHY6ZRCgRBKOSDZSL/5hj2XPUzSFUPUpUMqobO7Wp6xIy3QSh5f3SqPdZavtIq6dSaKryZlgtdKZg49vm7oVon3BuysaH8QTBiCH6xXZ39W8tN+rO8W160zyOgm8gfgg/GyCrO7Ht8y/rmHHt8+zhRNuArzOyiJOtskn7oyvKDyeZ53dRfTHq8gf7Yw0bct68xpxL9rgAoDgr/ShEdCdz33NdHDHL7ubR+T3/fBNR2IFXEq8/50Pv6pQlWyf6rMVC8mgbyBwyEGrLTWHUwfqrkHLYGN/mNfCdM1zdUwW5uLsclsrFN5g/beyTQh9IzuoIYaETrIC6KMktJBQbRE0ThJIbmOhqrv8wqPklGzBIHPuf4rtx0LJb8vHBA09ZkBB/ohqHkgauSqA5x1dFeCSbUeir5MYMCoWop9eqgdG5pNJZxtU95oYvd857dvv1AHdfCgMlra+NEAQbhZmlS+nvemuFnKx0aTL6x18DA/TPzCt05jAJ9sqed2qp/utj7Q5pnhu+6BTgPD99wcgaVZgHa/Dcrisw/TcKvDwO5WC2q0uq/vDty18WjgDf8Xrdj9v7pP4Gd3AUvjCdlRbycZYIyEjM38O5K/owcE6Lu7U+4i5TP94ewpmcNTPt/ELH50iP65KZR1+hTfwvqF4TsQL4W1CLxSJweKQdhXRtqRX2L52vTwzmDxBgtLFm9Nzyo1f/VY12YOA0AUhI+hj4sEDRxzLDOzZWYuS9Cgd1aQzfP3JxY7EvpLBvMnkcUQOQyRxxAFzJdEEUOUMEQZQ1QwPxJVDFHDEHUM0cD8SzQxRAtDtDFEB/Mt0cUQPQzRxxCu5T2nh3nA8N6lhlofUiO9nmR8yhhb3kuqJwzVU0r1jFI6t7zXlC4YSpeU0hWldG15byndMJRutaA7LejeCh9vrpKPp2/Te3C96yfnlLxT7DMrcU1jAHjaY/DewXAiKGIjI2Nf5AbGnRwMHAzJBRsZ2Jw2STAyaIEYm7k5GDkgLFE2MIvdaRczAwMjAyeQzeG0i8EBwmZmcNmowtgRGLHBoSNiI3OKy0Y1EG8XRwMDI4tDR3JIBEhJJBBs5uVg5NHawfi/dQNL70YmoD7WFBcAd1kkywAAeNpjwATeQAgETIf/v2Baznj9/+P/ekyiYP5TIP8ejA8AHscPQQAAAHjaTMwhDsJAEIXhf2baEsQurQCxHoMGwRVwDR6H4SjcgZCg8SgkB+EcGBJ4Yp/68sQPLCxj/DeCbCRG2ZlwkIMlR7lhzlluSVzlrvqTbbjLmWJvua/6w68fWDMFbvaRjeIX2cn+kIOdv+SGVczklhJbuav+5KfYy5l1+5T7qj98W6Oq7cZhKDjP/or7tuQosMxcZn7rUR01VsD2kRT6+50qJS/TMY3Gc+cS6P+xrObO9vIgd7N70mm1njc6rXZLPhlve4XsZ9YUmUlltchUUhdT9+hC/EzWc13I+0x3zWi+rg/MyemS04MwdnumNx5qt1QWYal0PSMd1ZIXUtM0LkXfJY+M87YspKVa6tEPak2/W6zcfTWdTtVIh7yvZ4rZ39z7rQYuAwek9IJZBKfJ1IZc9ow3bmK6ctGUbOmRqbejkuQgt37xe788D1PtjJAY2swUnoHjomuchNzI/uqGbFemWIg3FoJUrppuq7ai2U2s6Im2Q302NBJr0bL0fld0eJHkIVQvmk2fOVsFr7wdXhTd3F7a+PEffESJCnM4WPSQI0BwFxnu8dtBi9dzNCJq8xF8goGP2oKnfWTEhjiDQUpmNWKF5JfObTy6dn5Gbp0aHV3fIyPqwmDE+HXiA+ITnGIJjqcBvcZEe2R7RENyjv9KRof4deRNzKNi1S8gP/Fp1J3+QHnEk4OHjbmFuVR8Hv3hXNPfn2z0eYVpvBRG0Aj07/M7g7rs/Q3u/ccN1DMOLlW6prmdOUVCpY11SZyY5+MwgaFerjcl2IJmtPnpdhQSXgf0svC16H2ic6Ip1S66LBRDfrM4O3+ZcUzcjTVIrMrE6FVs8LuNCtTWnDdqDinkm023ocCnVlk9r0BjwseS1zjDMHI3c9Ex43vsRhzwAgn5wKsibvLydHOwPAdixYde15NuYpvxG38T8wWUF2BVeNpiYGIAg//NDEYM2EAyEDMCVQFqioeEAAIwAKPf2Nm2azyTbdvt866r1fHi39s8DR0DBxcPn4AKKqmimhpqqaOeBhppopkWWmmjnQ666KGPfgYYZIhhRhhljHEmCImISUjJyCkomWSKaWaYZY55FllilTXW2WCTLbbZYZc99jngkCOOOeGUM8654JIrrrnhljtF5Z0PRVN0xVBMxVJsxVFcxVN8JbDeXh+iaCn6eS2N/o/lRE7lTM7lQi5/X19fldfk9S+dIi6XAAAAAAEAAf//AA8=\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-BoldItalic.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-BoldItalic.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff\": {\n \"text\": \"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\",\n \"title\": \"$:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff\",\n \"type\": \"application/font-woff\"\n },\n \"$:/plugins/tiddlywiki/katex/katex-logo\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/katex-logo\",\n \"text\": \"$$\\\\KaTeX$$\\n\"\n },\n \"$:/plugins/tiddlywiki/katex/latex-parser.js\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/latex-parser.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/katex/latex-parser.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for LaTeX. For example:\\n\\n```\\n\\t$$latex-goes-here$$\\n```\\n\\nThis wikiparser can be modified using the rules eg:\\n\\n```\\n\\\\rules except latex-parser \\n\\\\rules only latex-parser \\n```\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nexports.name = \\\"latex-parser\\\";\\nexports.types = {inline: true};\\n\\nexports.init = function(parser) {\\n\\tthis.parser = parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp = /\\\\$\\\\$(?!\\\\$)/mg;\\n};\\n\\nexports.parse = function() {\\n\\t// Move past the match\\n\\tthis.parser.pos = this.matchRegExp.lastIndex;\\n\\tvar reEnd = /\\\\$\\\\$/mg;\\n\\t// Look for the end marker\\n\\treEnd.lastIndex = this.parser.pos;\\n\\tvar match = reEnd.exec(this.parser.source),\\n\\t\\ttext,\\n\\t\\tdisplayMode;\\n\\t// Process the text\\n\\tif(match) {\\n\\t\\ttext = this.parser.source.substring(this.parser.pos,match.index);\\n\\t\\tdisplayMode = text.indexOf('\\\\n') != -1;\\n\\t\\tthis.parser.pos = match.index + match[0].length;\\n\\t} else {\\n\\t\\ttext = this.parser.source.substr(this.parser.pos);\\n\\t\\tdisplayMode = false;\\n\\t\\tthis.parser.pos = this.parser.sourceLength;\\n\\t}\\n\\treturn [{\\n\\t\\ttype: \\\"latex\\\",\\n\\t\\tattributes: {\\n\\t\\t\\ttext: {\\n\\t\\t\\t\\ttype: \\\"text\\\",\\n\\t\\t\\t\\tvalue: text\\n\\t\\t\\t},\\n\\t\\t\\tdisplayMode: {\\n\\t\\t\\t\\ttype: \\\"text\\\",\\n\\t\\t\\t\\tvalue: displayMode ? \\\"true\\\" : \\\"false\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}];\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"wikirule\"\n },\n \"$:/plugins/tiddlywiki/katex/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/readme\",\n \"text\": \"This is a TiddlyWiki plugin for mathematical and chemical typesetting based on [ext[KaTeX from Khan Academy|http://khan.github.io/KaTeX/]] (v0.10.2) and [ext[mhchem|https://github.com/mhchem/MathJax-mhchem]] through a [ext[Katex extension|https://github.com/KaTeX/KaTeX/tree/master/contrib/mhchem]].\\n\\nIt is completely self-contained, and doesn't need an Internet connection in order to work. It works both in the browser and under Node.js.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/katex]]\\n\"\n },\n \"$:/plugins/tiddlywiki/katex/snippets/logo\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/snippets/logo\",\n \"tags\": \"$:/tags/KaTeX/Snippet\",\n \"text\": \"$$\\\\KaTeX$$\\n\"\n },\n \"$:/plugins/tiddlywiki/katex/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n/* KaTeX styles */\\n\\n{{$:/plugins/tiddlywiki/katex/katex.min.css}}\\n\\n/* Force text-rendering (see https://github.com/Jermolene/TiddlyWiki5/issues/2500) */\\n\\n.katex {\\n text-rendering: auto;\\n}\\n\\n/* Avoid TW5's max-width: 100% */\\n\\n.katex svg {\\n max-width: initial;\\n}\\n\\n/* Override font URLs */\\n\\n@font-face {\\n\\tfont-family: KaTeX_AMS;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Caligraphic;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff'>>) format('woff');\\n\\tfont-weight: 700;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Caligraphic;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Fraktur;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff'>>) format('woff');\\n\\tfont-weight: 700;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Fraktur;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Main;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff'>>) format('woff');\\n\\tfont-weight: 700;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Main;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff'>>) format('woff');\\n\\tfont-weight: 700;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Main;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Main;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Math;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_SansSerif;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff'>>) format('woff');\\n\\tfont-weight: 700;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_SansSerif;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_SansSerif;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Script;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Size1;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Size2;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Size3;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Size4;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Typewriter;\\n\\tsrc: url(<<datauri '$:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff'>>) format('woff');\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown\",\n \"text\": \"\\\\define toolbar-button-stamp-inner()\\n<$button tag=\\\"a\\\">\\n\\n<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"replace-selection\\\"\\n\\ttext={{$(snippetTitle)$}}\\n/>\\n\\n<$action-deletetiddler\\n\\t$tiddler=<<dropdown-state>>\\n/>\\n\\n<$view tiddler=<<snippetTitle>> field=\\\"caption\\\" mode=\\\"inline\\\">\\n\\n<$transclude tiddler=<<snippetTitle>> mode=\\\"inline\\\"/>\\n\\n</$view>\\n\\n</$button>\\n\\\\end\\n\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/KaTeX/Snippet]!has[draft.of]sort[caption]]\\\" variable=\\\"snippetTitle\\\">\\n\\n<<toolbar-button-stamp-inner>>\\n\\n</$list>\\n\\n----\\n\\n<$button tag=\\\"a\\\">\\n\\n<$action-sendmessage\\n\\t$message=\\\"tm-new-tiddler\\\"\\n\\ttags=\\\"$:/tags/KaTeX/Snippet\\\"\\n\\ttext=\\\"\\\"\\\"$$snippet$$\\\"\\\"\\\"\\n\\tcaption=\\\"description shown in dropdown\\\"\\n/>\\n\\n<$action-deletetiddler\\n\\t$tiddler=<<dropdown-state>>\\n/>\\n\\n<em>\\n\\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\\n\\n</em>\\n\\n</$button>\\n\\n[ext[KaTeX functions catalogue|https://khan.github.io/KaTeX/function-support.html]]\\n\\n[ext[Chemical equations reference|https://mhchem.github.io/MathJax-mhchem/]]\\n\"\n },\n \"$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/plugins/tiddlywiki/katex/katex-logo\",\n \"caption\": \"katex\",\n \"description\": \"create and insert preconfigured KaTeX snippets\",\n \"condition\": \"[<targetTiddler>!is[image]]\",\n \"dropdown\": \"$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown\",\n \"text\": \"\"\n },\n \"$:/plugins/tiddlywiki/katex/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/usage\",\n \"text\": \"!! Reference:\\n\\n# Mathematical typesetting: [ext[https://katex.org/docs/supported.html]]\\n# Chemical typesetting: [ext[https://mhchem.github.io/MathJax-mhchem/]]\\n\\n<hr>\\n\\nThe usual way to include ~LaTeX is to use `$$`. For example:\\n\\n```\\n$$\\\\displaystyle f(x) = \\\\int_{-\\\\infty}^\\\\infty\\\\hat f(\\\\xi)\\\\,e^{2 \\\\pi i \\\\xi x}\\\\,d\\\\xi$$\\n```\\n\\nSingle line equations will render in inline mode. If there are newlines between the `$$` delimiters, the equations will be rendered in display mode.\\n\\nThe underlying widget can also be used directly, giving more flexibility:\\n\\n```\\n<$latex text=\\\"f(x) = \\\\int_{-\\\\infty}^\\\\infty\\\\hat f(\\\\xi)\\\\,e^{2 \\\\pi i \\\\xi x}\\\\,d\\\\xi\\\" displayMode=\\\"true\\\"></$latex>\\n```\\n\\nThe KaTeX widget is provided under the name `<$latex>` and is also available under the alias `<$katex>`. It's better to use the generic `<$latex>` name unless you are running multiple ~LaTeX plugins and wish to specifically target KaTeX.\\n\"\n },\n \"$:/plugins/tiddlywiki/katex/wrapper.js\": {\n \"title\": \"$:/plugins/tiddlywiki/katex/wrapper.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/katex/wrapper.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWrapper for `katex.min.js` that provides a `<$latex>` widget. It is also available under the alias `<$katex>`\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar katex = require(\\\"$:/plugins/tiddlywiki/katex/katex.min.js\\\"),\\n chemParse = require(\\\"$:/plugins/tiddlywiki/katex/mhchem.min.js\\\"),\\n\\tWidget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n// Add \\\\ce, \\\\pu, and \\\\tripledash to the KaTeX macros.\\nkatex.__defineMacro(\\\"\\\\\\\\ce\\\", function(context) {\\n return chemParse(context.consumeArgs(1)[0], \\\"ce\\\")\\n});\\nkatex.__defineMacro(\\\"\\\\\\\\pu\\\", function(context) {\\n return chemParse(context.consumeArgs(1)[0], \\\"pu\\\");\\n});\\n// Needed for \\\\bond for the ~ forms\\n// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not \\n// a mathematical minus, U+2212. So we need that extra 0.56.\\nkatex.__defineMacro(\\\"\\\\\\\\tripledash\\\", \\\"{\\\\\\\\vphantom{-}\\\\\\\\raisebox{2.56mu}{$\\\\\\\\mkern2mu\\\"\\n+ \\\"\\\\\\\\tiny\\\\\\\\text{-}\\\\\\\\mkern1mu\\\\\\\\text{-}\\\\\\\\mkern1mu\\\\\\\\text{-}\\\\\\\\mkern2mu$}}\\\");\\n\\nvar KaTeXWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nKaTeXWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nKaTeXWidget.prototype.render = function(parent,nextSibling) {\\n\\t// Housekeeping\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Get the source text\\n\\tvar text = this.getAttribute(\\\"text\\\",this.parseTreeNode.text || \\\"\\\");\\n\\tvar displayMode = this.getAttribute(\\\"displayMode\\\",this.parseTreeNode.displayMode || \\\"false\\\") === \\\"true\\\";\\n\\t// Render it into a span\\n\\tvar span = this.document.createElement(\\\"span\\\"),\\n\\t\\toptions = {throwOnError: false, displayMode: displayMode};\\n\\ttry {\\n\\t\\tif(!this.document.isTiddlyWikiFakeDom) {\\n\\t\\t\\tkatex.render(text,span,options);\\n\\t\\t} else {\\n\\t\\t\\tspan.innerHTML = katex.renderToString(text,options);\\n\\t\\t}\\n\\t} catch(ex) {\\n\\t\\tspan.className = \\\"tc-error\\\";\\n\\t\\tspan.textContent = ex;\\n\\t}\\n\\t// Insert it into the DOM\\n\\tparent.insertBefore(span,nextSibling);\\n\\tthis.domNodes.push(span);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nKaTeXWidget.prototype.execute = function() {\\n\\t// Nothing to do for a katex widget\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nKaTeXWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.text) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\t\\n\\t}\\n};\\n\\nexports.latex = KaTeXWidget;\\nexports.katex = KaTeXWidget;\\n\\n})();\\n\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n }\n }\n}"},"$:/plugins/tiddlywiki/markdown":{"title":"$:/plugins/tiddlywiki/markdown","name":"Markdown","description":"Markdown parser based on remarkable by Jon Schlinkert","list":"readme usage","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/bold\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/bold\",\n \"list-after\": \"$:/core/ui/EditorToolbar/bold\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/bold\",\n \"caption\": \"{{$:/language/Buttons/Bold/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Bold/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((bold))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"wrap-selection\\\"\\n\\tprefix=\\\"**\\\"\\n\\tsuffix=\\\"**\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-1\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-1\",\n \"list-after\": \"$:/core/ui/EditorToolbar/heading-1\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/heading-1\",\n \"caption\": \"{{$:/language/Buttons/Heading1/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Heading1/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((heading-1))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\"#\\\"\\n\\tcount=\\\"1\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-2\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-2\",\n \"list-after\": \"$:/core/ui/EditorToolbar/heading-2\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/heading-2\",\n \"caption\": \"{{$:/language/Buttons/Heading2/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Heading2/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((heading-2))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\"#\\\"\\n\\tcount=\\\"2\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-3\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-3\",\n \"list-after\": \"$:/core/ui/EditorToolbar/heading-3\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/heading-3\",\n \"caption\": \"{{$:/language/Buttons/Heading3/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Heading3/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((heading-3))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\"#\\\"\\n\\tcount=\\\"3\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-4\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-4\",\n \"list-after\": \"$:/core/ui/EditorToolbar/heading-4\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/heading-4\",\n \"caption\": \"{{$:/language/Buttons/Heading4/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Heading4/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((heading-4))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\"#\\\"\\n\\tcount=\\\"4\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-5\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-5\",\n \"list-after\": \"$:/core/ui/EditorToolbar/heading-5\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/heading-5\",\n \"caption\": \"{{$:/language/Buttons/Heading5/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Heading5/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((heading-5))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\"#\\\"\\n\\tcount=\\\"5\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-6\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-6\",\n \"list-after\": \"$:/core/ui/EditorToolbar/heading-6\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/heading-6\",\n \"caption\": \"{{$:/language/Buttons/Heading6/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Heading6/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((heading-6))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\"#\\\"\\n\\tcount=\\\"6\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/italic\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/italic\",\n \"list-after\": \"$:/core/ui/EditorToolbar/italic\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/italic\",\n \"caption\": \"{{$:/language/Buttons/Italic/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Italic/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((italic))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"wrap-selection\\\"\\n\\tprefix=\\\"*\\\"\\n\\tsuffix=\\\"*\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/list-bullet\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/list-bullet\",\n \"list-after\": \"$:/core/ui/EditorToolbar/list-bullet\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/list-bullet\",\n \"caption\": \"{{$:/language/Buttons/ListBullet/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/ListBullet/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((list-bullet))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\"*\\\"\\n\\tcount=\\\"1\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/list-number\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/list-number\",\n \"list-after\": \"$:/core/ui/EditorToolbar/list-number\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/list-number\",\n \"caption\": \"{{$:/language/Buttons/ListNumber/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/ListNumber/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((list-number))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\"1.\\\"\\n\\tcount=\\\"1\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/mono-line\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/mono-line\",\n \"list-after\": \"$:/core/ui/EditorToolbar/mono-line\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/mono-line\",\n \"caption\": \"{{$:/language/Buttons/MonoLine/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/MonoLine/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((mono-line))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"wrap-selection\\\"\\n\\tprefix=\\\"`\\\"\\n\\tsuffix=\\\"`\\\"\\n/>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/EditorToolbar/quote\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/EditorToolbar/quote\",\n \"list-after\": \"$:/core/ui/EditorToolbar/quote\",\n \"tags\": \"$:/tags/EditorToolbar\",\n \"icon\": \"$:/core/images/quote\",\n \"caption\": \"{{$:/language/Buttons/Quote/Caption}} (Markdown)\",\n \"description\": \"{{$:/language/Buttons/Quote/Hint}}\",\n \"condition\": \"[<targetTiddler>type[text/x-markdown]]\",\n \"shortcuts\": \"((quote))\",\n \"text\": \"<$action-sendmessage\\n\\t$message=\\\"tm-edit-text-operation\\\"\\n\\t$param=\\\"prefix-lines\\\"\\n\\tcharacter=\\\">\\\"\\n\\tcount=\\\"1\\\"\\n/>\\n\"\n },\n \"$:/config/markdown/breaks\": {\n \"title\": \"$:/config/markdown/breaks\",\n \"text\": \"false\"\n },\n \"$:/config/markdown/linkNewWindow\": {\n \"title\": \"$:/config/markdown/linkNewWindow\",\n \"text\": \"true\"\n },\n \"$:/config/markdown/linkify\": {\n \"title\": \"$:/config/markdown/linkify\",\n \"text\": \"false\"\n },\n \"$:/config/markdown/quotes\": {\n \"title\": \"$:/config/markdown/quotes\",\n \"text\": \"“”‘’\"\n },\n \"$:/config/markdown/renderWikiText\": {\n \"title\": \"$:/config/markdown/renderWikiText\",\n \"text\": \"true\"\n },\n \"$:/config/markdown/renderWikiTextPragma\": {\n \"title\": \"$:/config/markdown/renderWikiTextPragma\",\n \"text\": \"\\\\rules only html image macrocallinline syslink transcludeinline wikilink filteredtranscludeblock macrocallblock transcludeblock\"\n },\n \"$:/config/markdown/typographer\": {\n \"title\": \"$:/config/markdown/typographer\",\n \"text\": \"false\"\n },\n \"$:/language/Docs/Types/text/x-markdown\": {\n \"title\": \"$:/language/Docs/Types/text/x-markdown\",\n \"description\": \"Markdown\",\n \"name\": \"text/x-markdown\",\n \"group\": \"Text\"\n },\n \"$:/plugins/tiddlywiki/markdown/remarkable.js\": {\n \"text\": \"!function(e,t){\\\"object\\\"==typeof exports&&\\\"undefined\\\"!=typeof module?t(exports):\\\"function\\\"==typeof define&&define.amd?define([\\\"exports\\\"],t):t((e=e||self).remarkable={})}(this,function(e){\\\"use strict\\\";var t={Aacute:\\\"Á\\\",aacute:\\\"á\\\",Abreve:\\\"Ă\\\",abreve:\\\"ă\\\",ac:\\\"∾\\\",acd:\\\"∿\\\",acE:\\\"∾̳\\\",Acirc:\\\"Â\\\",acirc:\\\"â\\\",acute:\\\"´\\\",Acy:\\\"А\\\",acy:\\\"а\\\",AElig:\\\"Æ\\\",aelig:\\\"æ\\\",af:\\\"\\\",Afr:\\\"𝔄\\\",afr:\\\"𝔞\\\",Agrave:\\\"À\\\",agrave:\\\"à\\\",alefsym:\\\"ℵ\\\",aleph:\\\"ℵ\\\",Alpha:\\\"Α\\\",alpha:\\\"α\\\",Amacr:\\\"Ā\\\",amacr:\\\"ā\\\",amalg:\\\"⨿\\\",AMP:\\\"&\\\",amp:\\\"&\\\",And:\\\"⩓\\\",and:\\\"∧\\\",andand:\\\"⩕\\\",andd:\\\"⩜\\\",andslope:\\\"⩘\\\",andv:\\\"⩚\\\",ang:\\\"∠\\\",ange:\\\"⦤\\\",angle:\\\"∠\\\",angmsd:\\\"∡\\\",angmsdaa:\\\"⦨\\\",angmsdab:\\\"⦩\\\",angmsdac:\\\"⦪\\\",angmsdad:\\\"⦫\\\",angmsdae:\\\"⦬\\\",angmsdaf:\\\"⦭\\\",angmsdag:\\\"⦮\\\",angmsdah:\\\"⦯\\\",angrt:\\\"∟\\\",angrtvb:\\\"⊾\\\",angrtvbd:\\\"⦝\\\",angsph:\\\"∢\\\",angst:\\\"Å\\\",angzarr:\\\"⍼\\\",Aogon:\\\"Ą\\\",aogon:\\\"ą\\\",Aopf:\\\"𝔸\\\",aopf:\\\"𝕒\\\",ap:\\\"≈\\\",apacir:\\\"⩯\\\",apE:\\\"⩰\\\",ape:\\\"≊\\\",apid:\\\"≋\\\",apos:\\\"'\\\",ApplyFunction:\\\"\\\",approx:\\\"≈\\\",approxeq:\\\"≊\\\",Aring:\\\"Å\\\",aring:\\\"å\\\",Ascr:\\\"𝒜\\\",ascr:\\\"𝒶\\\",Assign:\\\"≔\\\",ast:\\\"*\\\",asymp:\\\"≈\\\",asympeq:\\\"≍\\\",Atilde:\\\"Ã\\\",atilde:\\\"ã\\\",Auml:\\\"Ä\\\",auml:\\\"ä\\\",awconint:\\\"∳\\\",awint:\\\"⨑\\\",backcong:\\\"≌\\\",backepsilon:\\\"϶\\\",backprime:\\\"‵\\\",backsim:\\\"∽\\\",backsimeq:\\\"⋍\\\",Backslash:\\\"∖\\\",Barv:\\\"⫧\\\",barvee:\\\"⊽\\\",Barwed:\\\"⌆\\\",barwed:\\\"⌅\\\",barwedge:\\\"⌅\\\",bbrk:\\\"⎵\\\",bbrktbrk:\\\"⎶\\\",bcong:\\\"≌\\\",Bcy:\\\"Б\\\",bcy:\\\"б\\\",bdquo:\\\"„\\\",becaus:\\\"∵\\\",Because:\\\"∵\\\",because:\\\"∵\\\",bemptyv:\\\"⦰\\\",bepsi:\\\"϶\\\",bernou:\\\"ℬ\\\",Bernoullis:\\\"ℬ\\\",Beta:\\\"Β\\\",beta:\\\"β\\\",beth:\\\"ℶ\\\",between:\\\"≬\\\",Bfr:\\\"𝔅\\\",bfr:\\\"𝔟\\\",bigcap:\\\"⋂\\\",bigcirc:\\\"◯\\\",bigcup:\\\"⋃\\\",bigodot:\\\"⨀\\\",bigoplus:\\\"⨁\\\",bigotimes:\\\"⨂\\\",bigsqcup:\\\"⨆\\\",bigstar:\\\"★\\\",bigtriangledown:\\\"▽\\\",bigtriangleup:\\\"△\\\",biguplus:\\\"⨄\\\",bigvee:\\\"⋁\\\",bigwedge:\\\"⋀\\\",bkarow:\\\"⤍\\\",blacklozenge:\\\"⧫\\\",blacksquare:\\\"▪\\\",blacktriangle:\\\"▴\\\",blacktriangledown:\\\"▾\\\",blacktriangleleft:\\\"◂\\\",blacktriangleright:\\\"▸\\\",blank:\\\"␣\\\",blk12:\\\"▒\\\",blk14:\\\"░\\\",blk34:\\\"▓\\\",block:\\\"█\\\",bne:\\\"=⃥\\\",bnequiv:\\\"≡⃥\\\",bNot:\\\"⫭\\\",bnot:\\\"⌐\\\",Bopf:\\\"𝔹\\\",bopf:\\\"𝕓\\\",bot:\\\"⊥\\\",bottom:\\\"⊥\\\",bowtie:\\\"⋈\\\",boxbox:\\\"⧉\\\",boxDL:\\\"╗\\\",boxDl:\\\"╖\\\",boxdL:\\\"╕\\\",boxdl:\\\"┐\\\",boxDR:\\\"╔\\\",boxDr:\\\"╓\\\",boxdR:\\\"╒\\\",boxdr:\\\"┌\\\",boxH:\\\"═\\\",boxh:\\\"─\\\",boxHD:\\\"╦\\\",boxHd:\\\"╤\\\",boxhD:\\\"╥\\\",boxhd:\\\"┬\\\",boxHU:\\\"╩\\\",boxHu:\\\"╧\\\",boxhU:\\\"╨\\\",boxhu:\\\"┴\\\",boxminus:\\\"⊟\\\",boxplus:\\\"⊞\\\",boxtimes:\\\"⊠\\\",boxUL:\\\"╝\\\",boxUl:\\\"╜\\\",boxuL:\\\"╛\\\",boxul:\\\"┘\\\",boxUR:\\\"╚\\\",boxUr:\\\"╙\\\",boxuR:\\\"╘\\\",boxur:\\\"└\\\",boxV:\\\"║\\\",boxv:\\\"│\\\",boxVH:\\\"╬\\\",boxVh:\\\"╫\\\",boxvH:\\\"╪\\\",boxvh:\\\"┼\\\",boxVL:\\\"╣\\\",boxVl:\\\"╢\\\",boxvL:\\\"╡\\\",boxvl:\\\"┤\\\",boxVR:\\\"╠\\\",boxVr:\\\"╟\\\",boxvR:\\\"╞\\\",boxvr:\\\"├\\\",bprime:\\\"‵\\\",Breve:\\\"˘\\\",breve:\\\"˘\\\",brvbar:\\\"¦\\\",Bscr:\\\"ℬ\\\",bscr:\\\"𝒷\\\",bsemi:\\\"⁏\\\",bsim:\\\"∽\\\",bsime:\\\"⋍\\\",bsol:\\\"\\\\\\\\\\\",bsolb:\\\"⧅\\\",bsolhsub:\\\"⟈\\\",bull:\\\"•\\\",bullet:\\\"•\\\",bump:\\\"≎\\\",bumpE:\\\"⪮\\\",bumpe:\\\"≏\\\",Bumpeq:\\\"≎\\\",bumpeq:\\\"≏\\\",Cacute:\\\"Ć\\\",cacute:\\\"ć\\\",Cap:\\\"⋒\\\",cap:\\\"∩\\\",capand:\\\"⩄\\\",capbrcup:\\\"⩉\\\",capcap:\\\"⩋\\\",capcup:\\\"⩇\\\",capdot:\\\"⩀\\\",CapitalDifferentialD:\\\"ⅅ\\\",caps:\\\"∩︀\\\",caret:\\\"⁁\\\",caron:\\\"ˇ\\\",Cayleys:\\\"ℭ\\\",ccaps:\\\"⩍\\\",Ccaron:\\\"Č\\\",ccaron:\\\"č\\\",Ccedil:\\\"Ç\\\",ccedil:\\\"ç\\\",Ccirc:\\\"Ĉ\\\",ccirc:\\\"ĉ\\\",Cconint:\\\"∰\\\",ccups:\\\"⩌\\\",ccupssm:\\\"⩐\\\",Cdot:\\\"Ċ\\\",cdot:\\\"ċ\\\",cedil:\\\"¸\\\",Cedilla:\\\"¸\\\",cemptyv:\\\"⦲\\\",cent:\\\"¢\\\",CenterDot:\\\"·\\\",centerdot:\\\"·\\\",Cfr:\\\"ℭ\\\",cfr:\\\"𝔠\\\",CHcy:\\\"Ч\\\",chcy:\\\"ч\\\",check:\\\"✓\\\",checkmark:\\\"✓\\\",Chi:\\\"Χ\\\",chi:\\\"χ\\\",cir:\\\"○\\\",circ:\\\"ˆ\\\",circeq:\\\"≗\\\",circlearrowleft:\\\"↺\\\",circlearrowright:\\\"↻\\\",circledast:\\\"⊛\\\",circledcirc:\\\"⊚\\\",circleddash:\\\"⊝\\\",CircleDot:\\\"⊙\\\",circledR:\\\"®\\\",circledS:\\\"Ⓢ\\\",CircleMinus:\\\"⊖\\\",CirclePlus:\\\"⊕\\\",CircleTimes:\\\"⊗\\\",cirE:\\\"⧃\\\",cire:\\\"≗\\\",cirfnint:\\\"⨐\\\",cirmid:\\\"⫯\\\",cirscir:\\\"⧂\\\",ClockwiseContourIntegral:\\\"∲\\\",CloseCurlyDoubleQuote:\\\"”\\\",CloseCurlyQuote:\\\"’\\\",clubs:\\\"♣\\\",clubsuit:\\\"♣\\\",Colon:\\\"∷\\\",colon:\\\":\\\",Colone:\\\"⩴\\\",colone:\\\"≔\\\",coloneq:\\\"≔\\\",comma:\\\",\\\",commat:\\\"@\\\",comp:\\\"∁\\\",compfn:\\\"∘\\\",complement:\\\"∁\\\",complexes:\\\"ℂ\\\",cong:\\\"≅\\\",congdot:\\\"⩭\\\",Congruent:\\\"≡\\\",Conint:\\\"∯\\\",conint:\\\"∮\\\",ContourIntegral:\\\"∮\\\",Copf:\\\"ℂ\\\",copf:\\\"𝕔\\\",coprod:\\\"∐\\\",Coproduct:\\\"∐\\\",COPY:\\\"©\\\",copy:\\\"©\\\",copysr:\\\"℗\\\",CounterClockwiseContourIntegral:\\\"∳\\\",crarr:\\\"↵\\\",Cross:\\\"⨯\\\",cross:\\\"✗\\\",Cscr:\\\"𝒞\\\",cscr:\\\"𝒸\\\",csub:\\\"⫏\\\",csube:\\\"⫑\\\",csup:\\\"⫐\\\",csupe:\\\"⫒\\\",ctdot:\\\"⋯\\\",cudarrl:\\\"⤸\\\",cudarrr:\\\"⤵\\\",cuepr:\\\"⋞\\\",cuesc:\\\"⋟\\\",cularr:\\\"↶\\\",cularrp:\\\"⤽\\\",Cup:\\\"⋓\\\",cup:\\\"∪\\\",cupbrcap:\\\"⩈\\\",CupCap:\\\"≍\\\",cupcap:\\\"⩆\\\",cupcup:\\\"⩊\\\",cupdot:\\\"⊍\\\",cupor:\\\"⩅\\\",cups:\\\"∪︀\\\",curarr:\\\"↷\\\",curarrm:\\\"⤼\\\",curlyeqprec:\\\"⋞\\\",curlyeqsucc:\\\"⋟\\\",curlyvee:\\\"⋎\\\",curlywedge:\\\"⋏\\\",curren:\\\"¤\\\",curvearrowleft:\\\"↶\\\",curvearrowright:\\\"↷\\\",cuvee:\\\"⋎\\\",cuwed:\\\"⋏\\\",cwconint:\\\"∲\\\",cwint:\\\"∱\\\",cylcty:\\\"⌭\\\",Dagger:\\\"‡\\\",dagger:\\\"†\\\",daleth:\\\"ℸ\\\",Darr:\\\"↡\\\",dArr:\\\"⇓\\\",darr:\\\"↓\\\",dash:\\\"‐\\\",Dashv:\\\"⫤\\\",dashv:\\\"⊣\\\",dbkarow:\\\"⤏\\\",dblac:\\\"˝\\\",Dcaron:\\\"Ď\\\",dcaron:\\\"ď\\\",Dcy:\\\"Д\\\",dcy:\\\"д\\\",DD:\\\"ⅅ\\\",dd:\\\"ⅆ\\\",ddagger:\\\"‡\\\",ddarr:\\\"⇊\\\",DDotrahd:\\\"⤑\\\",ddotseq:\\\"⩷\\\",deg:\\\"°\\\",Del:\\\"∇\\\",Delta:\\\"Δ\\\",delta:\\\"δ\\\",demptyv:\\\"⦱\\\",dfisht:\\\"⥿\\\",Dfr:\\\"𝔇\\\",dfr:\\\"𝔡\\\",dHar:\\\"⥥\\\",dharl:\\\"⇃\\\",dharr:\\\"⇂\\\",DiacriticalAcute:\\\"´\\\",DiacriticalDot:\\\"˙\\\",DiacriticalDoubleAcute:\\\"˝\\\",DiacriticalGrave:\\\"`\\\",DiacriticalTilde:\\\"˜\\\",diam:\\\"⋄\\\",Diamond:\\\"⋄\\\",diamond:\\\"⋄\\\",diamondsuit:\\\"♦\\\",diams:\\\"♦\\\",die:\\\"¨\\\",DifferentialD:\\\"ⅆ\\\",digamma:\\\"ϝ\\\",disin:\\\"⋲\\\",div:\\\"÷\\\",divide:\\\"÷\\\",divideontimes:\\\"⋇\\\",divonx:\\\"⋇\\\",DJcy:\\\"Ђ\\\",djcy:\\\"ђ\\\",dlcorn:\\\"⌞\\\",dlcrop:\\\"⌍\\\",dollar:\\\"$\\\",Dopf:\\\"𝔻\\\",dopf:\\\"𝕕\\\",Dot:\\\"¨\\\",dot:\\\"˙\\\",DotDot:\\\"⃜\\\",doteq:\\\"≐\\\",doteqdot:\\\"≑\\\",DotEqual:\\\"≐\\\",dotminus:\\\"∸\\\",dotplus:\\\"∔\\\",dotsquare:\\\"⊡\\\",doublebarwedge:\\\"⌆\\\",DoubleContourIntegral:\\\"∯\\\",DoubleDot:\\\"¨\\\",DoubleDownArrow:\\\"⇓\\\",DoubleLeftArrow:\\\"⇐\\\",DoubleLeftRightArrow:\\\"⇔\\\",DoubleLeftTee:\\\"⫤\\\",DoubleLongLeftArrow:\\\"⟸\\\",DoubleLongLeftRightArrow:\\\"⟺\\\",DoubleLongRightArrow:\\\"⟹\\\",DoubleRightArrow:\\\"⇒\\\",DoubleRightTee:\\\"⊨\\\",DoubleUpArrow:\\\"⇑\\\",DoubleUpDownArrow:\\\"⇕\\\",DoubleVerticalBar:\\\"∥\\\",DownArrow:\\\"↓\\\",Downarrow:\\\"⇓\\\",downarrow:\\\"↓\\\",DownArrowBar:\\\"⤓\\\",DownArrowUpArrow:\\\"⇵\\\",DownBreve:\\\"̑\\\",downdownarrows:\\\"⇊\\\",downharpoonleft:\\\"⇃\\\",downharpoonright:\\\"⇂\\\",DownLeftRightVector:\\\"⥐\\\",DownLeftTeeVector:\\\"⥞\\\",DownLeftVector:\\\"↽\\\",DownLeftVectorBar:\\\"⥖\\\",DownRightTeeVector:\\\"⥟\\\",DownRightVector:\\\"⇁\\\",DownRightVectorBar:\\\"⥗\\\",DownTee:\\\"⊤\\\",DownTeeArrow:\\\"↧\\\",drbkarow:\\\"⤐\\\",drcorn:\\\"⌟\\\",drcrop:\\\"⌌\\\",Dscr:\\\"𝒟\\\",dscr:\\\"𝒹\\\",DScy:\\\"Ѕ\\\",dscy:\\\"ѕ\\\",dsol:\\\"⧶\\\",Dstrok:\\\"Đ\\\",dstrok:\\\"đ\\\",dtdot:\\\"⋱\\\",dtri:\\\"▿\\\",dtrif:\\\"▾\\\",duarr:\\\"⇵\\\",duhar:\\\"⥯\\\",dwangle:\\\"⦦\\\",DZcy:\\\"Џ\\\",dzcy:\\\"џ\\\",dzigrarr:\\\"⟿\\\",Eacute:\\\"É\\\",eacute:\\\"é\\\",easter:\\\"⩮\\\",Ecaron:\\\"Ě\\\",ecaron:\\\"ě\\\",ecir:\\\"≖\\\",Ecirc:\\\"Ê\\\",ecirc:\\\"ê\\\",ecolon:\\\"≕\\\",Ecy:\\\"Э\\\",ecy:\\\"э\\\",eDDot:\\\"⩷\\\",Edot:\\\"Ė\\\",eDot:\\\"≑\\\",edot:\\\"ė\\\",ee:\\\"ⅇ\\\",efDot:\\\"≒\\\",Efr:\\\"𝔈\\\",efr:\\\"𝔢\\\",eg:\\\"⪚\\\",Egrave:\\\"È\\\",egrave:\\\"è\\\",egs:\\\"⪖\\\",egsdot:\\\"⪘\\\",el:\\\"⪙\\\",Element:\\\"∈\\\",elinters:\\\"⏧\\\",ell:\\\"ℓ\\\",els:\\\"⪕\\\",elsdot:\\\"⪗\\\",Emacr:\\\"Ē\\\",emacr:\\\"ē\\\",empty:\\\"∅\\\",emptyset:\\\"∅\\\",EmptySmallSquare:\\\"◻\\\",emptyv:\\\"∅\\\",EmptyVerySmallSquare:\\\"▫\\\",emsp:\\\" \\\",emsp13:\\\" \\\",emsp14:\\\" \\\",ENG:\\\"Ŋ\\\",eng:\\\"ŋ\\\",ensp:\\\" \\\",Eogon:\\\"Ę\\\",eogon:\\\"ę\\\",Eopf:\\\"𝔼\\\",eopf:\\\"𝕖\\\",epar:\\\"⋕\\\",eparsl:\\\"⧣\\\",eplus:\\\"⩱\\\",epsi:\\\"ε\\\",Epsilon:\\\"Ε\\\",epsilon:\\\"ε\\\",epsiv:\\\"ϵ\\\",eqcirc:\\\"≖\\\",eqcolon:\\\"≕\\\",eqsim:\\\"≂\\\",eqslantgtr:\\\"⪖\\\",eqslantless:\\\"⪕\\\",Equal:\\\"⩵\\\",equals:\\\"=\\\",EqualTilde:\\\"≂\\\",equest:\\\"≟\\\",Equilibrium:\\\"⇌\\\",equiv:\\\"≡\\\",equivDD:\\\"⩸\\\",eqvparsl:\\\"⧥\\\",erarr:\\\"⥱\\\",erDot:\\\"≓\\\",Escr:\\\"ℰ\\\",escr:\\\"ℯ\\\",esdot:\\\"≐\\\",Esim:\\\"⩳\\\",esim:\\\"≂\\\",Eta:\\\"Η\\\",eta:\\\"η\\\",ETH:\\\"Ð\\\",eth:\\\"ð\\\",Euml:\\\"Ë\\\",euml:\\\"ë\\\",euro:\\\"€\\\",excl:\\\"!\\\",exist:\\\"∃\\\",Exists:\\\"∃\\\",expectation:\\\"ℰ\\\",ExponentialE:\\\"ⅇ\\\",exponentiale:\\\"ⅇ\\\",fallingdotseq:\\\"≒\\\",Fcy:\\\"Ф\\\",fcy:\\\"ф\\\",female:\\\"♀\\\",ffilig:\\\"ffi\\\",fflig:\\\"ff\\\",ffllig:\\\"ffl\\\",Ffr:\\\"𝔉\\\",ffr:\\\"𝔣\\\",filig:\\\"fi\\\",FilledSmallSquare:\\\"◼\\\",FilledVerySmallSquare:\\\"▪\\\",fjlig:\\\"fj\\\",flat:\\\"♭\\\",fllig:\\\"fl\\\",fltns:\\\"▱\\\",fnof:\\\"ƒ\\\",Fopf:\\\"𝔽\\\",fopf:\\\"𝕗\\\",ForAll:\\\"∀\\\",forall:\\\"∀\\\",fork:\\\"⋔\\\",forkv:\\\"⫙\\\",Fouriertrf:\\\"ℱ\\\",fpartint:\\\"⨍\\\",frac12:\\\"½\\\",frac13:\\\"⅓\\\",frac14:\\\"¼\\\",frac15:\\\"⅕\\\",frac16:\\\"⅙\\\",frac18:\\\"⅛\\\",frac23:\\\"⅔\\\",frac25:\\\"⅖\\\",frac34:\\\"¾\\\",frac35:\\\"⅗\\\",frac38:\\\"⅜\\\",frac45:\\\"⅘\\\",frac56:\\\"⅚\\\",frac58:\\\"⅝\\\",frac78:\\\"⅞\\\",frasl:\\\"⁄\\\",frown:\\\"⌢\\\",Fscr:\\\"ℱ\\\",fscr:\\\"𝒻\\\",gacute:\\\"ǵ\\\",Gamma:\\\"Γ\\\",gamma:\\\"γ\\\",Gammad:\\\"Ϝ\\\",gammad:\\\"ϝ\\\",gap:\\\"⪆\\\",Gbreve:\\\"Ğ\\\",gbreve:\\\"ğ\\\",Gcedil:\\\"Ģ\\\",Gcirc:\\\"Ĝ\\\",gcirc:\\\"ĝ\\\",Gcy:\\\"Г\\\",gcy:\\\"г\\\",Gdot:\\\"Ġ\\\",gdot:\\\"ġ\\\",gE:\\\"≧\\\",ge:\\\"≥\\\",gEl:\\\"⪌\\\",gel:\\\"⋛\\\",geq:\\\"≥\\\",geqq:\\\"≧\\\",geqslant:\\\"⩾\\\",ges:\\\"⩾\\\",gescc:\\\"⪩\\\",gesdot:\\\"⪀\\\",gesdoto:\\\"⪂\\\",gesdotol:\\\"⪄\\\",gesl:\\\"⋛︀\\\",gesles:\\\"⪔\\\",Gfr:\\\"𝔊\\\",gfr:\\\"𝔤\\\",Gg:\\\"⋙\\\",gg:\\\"≫\\\",ggg:\\\"⋙\\\",gimel:\\\"ℷ\\\",GJcy:\\\"Ѓ\\\",gjcy:\\\"ѓ\\\",gl:\\\"≷\\\",gla:\\\"⪥\\\",glE:\\\"⪒\\\",glj:\\\"⪤\\\",gnap:\\\"⪊\\\",gnapprox:\\\"⪊\\\",gnE:\\\"≩\\\",gne:\\\"⪈\\\",gneq:\\\"⪈\\\",gneqq:\\\"≩\\\",gnsim:\\\"⋧\\\",Gopf:\\\"𝔾\\\",gopf:\\\"𝕘\\\",grave:\\\"`\\\",GreaterEqual:\\\"≥\\\",GreaterEqualLess:\\\"⋛\\\",GreaterFullEqual:\\\"≧\\\",GreaterGreater:\\\"⪢\\\",GreaterLess:\\\"≷\\\",GreaterSlantEqual:\\\"⩾\\\",GreaterTilde:\\\"≳\\\",Gscr:\\\"𝒢\\\",gscr:\\\"ℊ\\\",gsim:\\\"≳\\\",gsime:\\\"⪎\\\",gsiml:\\\"⪐\\\",GT:\\\">\\\",Gt:\\\"≫\\\",gt:\\\">\\\",gtcc:\\\"⪧\\\",gtcir:\\\"⩺\\\",gtdot:\\\"⋗\\\",gtlPar:\\\"⦕\\\",gtquest:\\\"⩼\\\",gtrapprox:\\\"⪆\\\",gtrarr:\\\"⥸\\\",gtrdot:\\\"⋗\\\",gtreqless:\\\"⋛\\\",gtreqqless:\\\"⪌\\\",gtrless:\\\"≷\\\",gtrsim:\\\"≳\\\",gvertneqq:\\\"≩︀\\\",gvnE:\\\"≩︀\\\",Hacek:\\\"ˇ\\\",hairsp:\\\" \\\",half:\\\"½\\\",hamilt:\\\"ℋ\\\",HARDcy:\\\"Ъ\\\",hardcy:\\\"ъ\\\",hArr:\\\"⇔\\\",harr:\\\"↔\\\",harrcir:\\\"⥈\\\",harrw:\\\"↭\\\",Hat:\\\"^\\\",hbar:\\\"ℏ\\\",Hcirc:\\\"Ĥ\\\",hcirc:\\\"ĥ\\\",hearts:\\\"♥\\\",heartsuit:\\\"♥\\\",hellip:\\\"…\\\",hercon:\\\"⊹\\\",Hfr:\\\"ℌ\\\",hfr:\\\"𝔥\\\",HilbertSpace:\\\"ℋ\\\",hksearow:\\\"⤥\\\",hkswarow:\\\"⤦\\\",hoarr:\\\"⇿\\\",homtht:\\\"∻\\\",hookleftarrow:\\\"↩\\\",hookrightarrow:\\\"↪\\\",Hopf:\\\"ℍ\\\",hopf:\\\"𝕙\\\",horbar:\\\"―\\\",HorizontalLine:\\\"─\\\",Hscr:\\\"ℋ\\\",hscr:\\\"𝒽\\\",hslash:\\\"ℏ\\\",Hstrok:\\\"Ħ\\\",hstrok:\\\"ħ\\\",HumpDownHump:\\\"≎\\\",HumpEqual:\\\"≏\\\",hybull:\\\"⁃\\\",hyphen:\\\"‐\\\",Iacute:\\\"Í\\\",iacute:\\\"í\\\",ic:\\\"\\\",Icirc:\\\"Î\\\",icirc:\\\"î\\\",Icy:\\\"И\\\",icy:\\\"и\\\",Idot:\\\"İ\\\",IEcy:\\\"Е\\\",iecy:\\\"е\\\",iexcl:\\\"¡\\\",iff:\\\"⇔\\\",Ifr:\\\"ℑ\\\",ifr:\\\"𝔦\\\",Igrave:\\\"Ì\\\",igrave:\\\"ì\\\",ii:\\\"ⅈ\\\",iiiint:\\\"⨌\\\",iiint:\\\"∭\\\",iinfin:\\\"⧜\\\",iiota:\\\"℩\\\",IJlig:\\\"IJ\\\",ijlig:\\\"ij\\\",Im:\\\"ℑ\\\",Imacr:\\\"Ī\\\",imacr:\\\"ī\\\",image:\\\"ℑ\\\",ImaginaryI:\\\"ⅈ\\\",imagline:\\\"ℐ\\\",imagpart:\\\"ℑ\\\",imath:\\\"ı\\\",imof:\\\"⊷\\\",imped:\\\"Ƶ\\\",Implies:\\\"⇒\\\",in:\\\"∈\\\",incare:\\\"℅\\\",infin:\\\"∞\\\",infintie:\\\"⧝\\\",inodot:\\\"ı\\\",Int:\\\"∬\\\",int:\\\"∫\\\",intcal:\\\"⊺\\\",integers:\\\"ℤ\\\",Integral:\\\"∫\\\",intercal:\\\"⊺\\\",Intersection:\\\"⋂\\\",intlarhk:\\\"⨗\\\",intprod:\\\"⨼\\\",InvisibleComma:\\\"\\\",InvisibleTimes:\\\"\\\",IOcy:\\\"Ё\\\",iocy:\\\"ё\\\",Iogon:\\\"Į\\\",iogon:\\\"į\\\",Iopf:\\\"𝕀\\\",iopf:\\\"𝕚\\\",Iota:\\\"Ι\\\",iota:\\\"ι\\\",iprod:\\\"⨼\\\",iquest:\\\"¿\\\",Iscr:\\\"ℐ\\\",iscr:\\\"𝒾\\\",isin:\\\"∈\\\",isindot:\\\"⋵\\\",isinE:\\\"⋹\\\",isins:\\\"⋴\\\",isinsv:\\\"⋳\\\",isinv:\\\"∈\\\",it:\\\"\\\",Itilde:\\\"Ĩ\\\",itilde:\\\"ĩ\\\",Iukcy:\\\"І\\\",iukcy:\\\"і\\\",Iuml:\\\"Ï\\\",iuml:\\\"ï\\\",Jcirc:\\\"Ĵ\\\",jcirc:\\\"ĵ\\\",Jcy:\\\"Й\\\",jcy:\\\"й\\\",Jfr:\\\"𝔍\\\",jfr:\\\"𝔧\\\",jmath:\\\"ȷ\\\",Jopf:\\\"𝕁\\\",jopf:\\\"𝕛\\\",Jscr:\\\"𝒥\\\",jscr:\\\"𝒿\\\",Jsercy:\\\"Ј\\\",jsercy:\\\"ј\\\",Jukcy:\\\"Є\\\",jukcy:\\\"є\\\",Kappa:\\\"Κ\\\",kappa:\\\"κ\\\",kappav:\\\"ϰ\\\",Kcedil:\\\"Ķ\\\",kcedil:\\\"ķ\\\",Kcy:\\\"К\\\",kcy:\\\"к\\\",Kfr:\\\"𝔎\\\",kfr:\\\"𝔨\\\",kgreen:\\\"ĸ\\\",KHcy:\\\"Х\\\",khcy:\\\"х\\\",KJcy:\\\"Ќ\\\",kjcy:\\\"ќ\\\",Kopf:\\\"𝕂\\\",kopf:\\\"𝕜\\\",Kscr:\\\"𝒦\\\",kscr:\\\"𝓀\\\",lAarr:\\\"⇚\\\",Lacute:\\\"Ĺ\\\",lacute:\\\"ĺ\\\",laemptyv:\\\"⦴\\\",lagran:\\\"ℒ\\\",Lambda:\\\"Λ\\\",lambda:\\\"λ\\\",Lang:\\\"⟪\\\",lang:\\\"⟨\\\",langd:\\\"⦑\\\",langle:\\\"⟨\\\",lap:\\\"⪅\\\",Laplacetrf:\\\"ℒ\\\",laquo:\\\"«\\\",Larr:\\\"↞\\\",lArr:\\\"⇐\\\",larr:\\\"←\\\",larrb:\\\"⇤\\\",larrbfs:\\\"⤟\\\",larrfs:\\\"⤝\\\",larrhk:\\\"↩\\\",larrlp:\\\"↫\\\",larrpl:\\\"⤹\\\",larrsim:\\\"⥳\\\",larrtl:\\\"↢\\\",lat:\\\"⪫\\\",lAtail:\\\"⤛\\\",latail:\\\"⤙\\\",late:\\\"⪭\\\",lates:\\\"⪭︀\\\",lBarr:\\\"⤎\\\",lbarr:\\\"⤌\\\",lbbrk:\\\"❲\\\",lbrace:\\\"{\\\",lbrack:\\\"[\\\",lbrke:\\\"⦋\\\",lbrksld:\\\"⦏\\\",lbrkslu:\\\"⦍\\\",Lcaron:\\\"Ľ\\\",lcaron:\\\"ľ\\\",Lcedil:\\\"Ļ\\\",lcedil:\\\"ļ\\\",lceil:\\\"⌈\\\",lcub:\\\"{\\\",Lcy:\\\"Л\\\",lcy:\\\"л\\\",ldca:\\\"⤶\\\",ldquo:\\\"“\\\",ldquor:\\\"„\\\",ldrdhar:\\\"⥧\\\",ldrushar:\\\"⥋\\\",ldsh:\\\"↲\\\",lE:\\\"≦\\\",le:\\\"≤\\\",LeftAngleBracket:\\\"⟨\\\",LeftArrow:\\\"←\\\",Leftarrow:\\\"⇐\\\",leftarrow:\\\"←\\\",LeftArrowBar:\\\"⇤\\\",LeftArrowRightArrow:\\\"⇆\\\",leftarrowtail:\\\"↢\\\",LeftCeiling:\\\"⌈\\\",LeftDoubleBracket:\\\"⟦\\\",LeftDownTeeVector:\\\"⥡\\\",LeftDownVector:\\\"⇃\\\",LeftDownVectorBar:\\\"⥙\\\",LeftFloor:\\\"⌊\\\",leftharpoondown:\\\"↽\\\",leftharpoonup:\\\"↼\\\",leftleftarrows:\\\"⇇\\\",LeftRightArrow:\\\"↔\\\",Leftrightarrow:\\\"⇔\\\",leftrightarrow:\\\"↔\\\",leftrightarrows:\\\"⇆\\\",leftrightharpoons:\\\"⇋\\\",leftrightsquigarrow:\\\"↭\\\",LeftRightVector:\\\"⥎\\\",LeftTee:\\\"⊣\\\",LeftTeeArrow:\\\"↤\\\",LeftTeeVector:\\\"⥚\\\",leftthreetimes:\\\"⋋\\\",LeftTriangle:\\\"⊲\\\",LeftTriangleBar:\\\"⧏\\\",LeftTriangleEqual:\\\"⊴\\\",LeftUpDownVector:\\\"⥑\\\",LeftUpTeeVector:\\\"⥠\\\",LeftUpVector:\\\"↿\\\",LeftUpVectorBar:\\\"⥘\\\",LeftVector:\\\"↼\\\",LeftVectorBar:\\\"⥒\\\",lEg:\\\"⪋\\\",leg:\\\"⋚\\\",leq:\\\"≤\\\",leqq:\\\"≦\\\",leqslant:\\\"⩽\\\",les:\\\"⩽\\\",lescc:\\\"⪨\\\",lesdot:\\\"⩿\\\",lesdoto:\\\"⪁\\\",lesdotor:\\\"⪃\\\",lesg:\\\"⋚︀\\\",lesges:\\\"⪓\\\",lessapprox:\\\"⪅\\\",lessdot:\\\"⋖\\\",lesseqgtr:\\\"⋚\\\",lesseqqgtr:\\\"⪋\\\",LessEqualGreater:\\\"⋚\\\",LessFullEqual:\\\"≦\\\",LessGreater:\\\"≶\\\",lessgtr:\\\"≶\\\",LessLess:\\\"⪡\\\",lesssim:\\\"≲\\\",LessSlantEqual:\\\"⩽\\\",LessTilde:\\\"≲\\\",lfisht:\\\"⥼\\\",lfloor:\\\"⌊\\\",Lfr:\\\"𝔏\\\",lfr:\\\"𝔩\\\",lg:\\\"≶\\\",lgE:\\\"⪑\\\",lHar:\\\"⥢\\\",lhard:\\\"↽\\\",lharu:\\\"↼\\\",lharul:\\\"⥪\\\",lhblk:\\\"▄\\\",LJcy:\\\"Љ\\\",ljcy:\\\"љ\\\",Ll:\\\"⋘\\\",ll:\\\"≪\\\",llarr:\\\"⇇\\\",llcorner:\\\"⌞\\\",Lleftarrow:\\\"⇚\\\",llhard:\\\"⥫\\\",lltri:\\\"◺\\\",Lmidot:\\\"Ŀ\\\",lmidot:\\\"ŀ\\\",lmoust:\\\"⎰\\\",lmoustache:\\\"⎰\\\",lnap:\\\"⪉\\\",lnapprox:\\\"⪉\\\",lnE:\\\"≨\\\",lne:\\\"⪇\\\",lneq:\\\"⪇\\\",lneqq:\\\"≨\\\",lnsim:\\\"⋦\\\",loang:\\\"⟬\\\",loarr:\\\"⇽\\\",lobrk:\\\"⟦\\\",LongLeftArrow:\\\"⟵\\\",Longleftarrow:\\\"⟸\\\",longleftarrow:\\\"⟵\\\",LongLeftRightArrow:\\\"⟷\\\",Longleftrightarrow:\\\"⟺\\\",longleftrightarrow:\\\"⟷\\\",longmapsto:\\\"⟼\\\",LongRightArrow:\\\"⟶\\\",Longrightarrow:\\\"⟹\\\",longrightarrow:\\\"⟶\\\",looparrowleft:\\\"↫\\\",looparrowright:\\\"↬\\\",lopar:\\\"⦅\\\",Lopf:\\\"𝕃\\\",lopf:\\\"𝕝\\\",loplus:\\\"⨭\\\",lotimes:\\\"⨴\\\",lowast:\\\"∗\\\",lowbar:\\\"_\\\",LowerLeftArrow:\\\"↙\\\",LowerRightArrow:\\\"↘\\\",loz:\\\"◊\\\",lozenge:\\\"◊\\\",lozf:\\\"⧫\\\",lpar:\\\"(\\\",lparlt:\\\"⦓\\\",lrarr:\\\"⇆\\\",lrcorner:\\\"⌟\\\",lrhar:\\\"⇋\\\",lrhard:\\\"⥭\\\",lrm:\\\"\\\",lrtri:\\\"⊿\\\",lsaquo:\\\"‹\\\",Lscr:\\\"ℒ\\\",lscr:\\\"𝓁\\\",Lsh:\\\"↰\\\",lsh:\\\"↰\\\",lsim:\\\"≲\\\",lsime:\\\"⪍\\\",lsimg:\\\"⪏\\\",lsqb:\\\"[\\\",lsquo:\\\"‘\\\",lsquor:\\\"‚\\\",Lstrok:\\\"Ł\\\",lstrok:\\\"ł\\\",LT:\\\"<\\\",Lt:\\\"≪\\\",lt:\\\"<\\\",ltcc:\\\"⪦\\\",ltcir:\\\"⩹\\\",ltdot:\\\"⋖\\\",lthree:\\\"⋋\\\",ltimes:\\\"⋉\\\",ltlarr:\\\"⥶\\\",ltquest:\\\"⩻\\\",ltri:\\\"◃\\\",ltrie:\\\"⊴\\\",ltrif:\\\"◂\\\",ltrPar:\\\"⦖\\\",lurdshar:\\\"⥊\\\",luruhar:\\\"⥦\\\",lvertneqq:\\\"≨︀\\\",lvnE:\\\"≨︀\\\",macr:\\\"¯\\\",male:\\\"♂\\\",malt:\\\"✠\\\",maltese:\\\"✠\\\",Map:\\\"⤅\\\",map:\\\"↦\\\",mapsto:\\\"↦\\\",mapstodown:\\\"↧\\\",mapstoleft:\\\"↤\\\",mapstoup:\\\"↥\\\",marker:\\\"▮\\\",mcomma:\\\"⨩\\\",Mcy:\\\"М\\\",mcy:\\\"м\\\",mdash:\\\"—\\\",mDDot:\\\"∺\\\",measuredangle:\\\"∡\\\",MediumSpace:\\\" \\\",Mellintrf:\\\"ℳ\\\",Mfr:\\\"𝔐\\\",mfr:\\\"𝔪\\\",mho:\\\"℧\\\",micro:\\\"µ\\\",mid:\\\"∣\\\",midast:\\\"*\\\",midcir:\\\"⫰\\\",middot:\\\"·\\\",minus:\\\"−\\\",minusb:\\\"⊟\\\",minusd:\\\"∸\\\",minusdu:\\\"⨪\\\",MinusPlus:\\\"∓\\\",mlcp:\\\"⫛\\\",mldr:\\\"…\\\",mnplus:\\\"∓\\\",models:\\\"⊧\\\",Mopf:\\\"𝕄\\\",mopf:\\\"𝕞\\\",mp:\\\"∓\\\",Mscr:\\\"ℳ\\\",mscr:\\\"𝓂\\\",mstpos:\\\"∾\\\",Mu:\\\"Μ\\\",mu:\\\"μ\\\",multimap:\\\"⊸\\\",mumap:\\\"⊸\\\",nabla:\\\"∇\\\",Nacute:\\\"Ń\\\",nacute:\\\"ń\\\",nang:\\\"∠⃒\\\",nap:\\\"≉\\\",napE:\\\"⩰̸\\\",napid:\\\"≋̸\\\",napos:\\\"ʼn\\\",napprox:\\\"≉\\\",natur:\\\"♮\\\",natural:\\\"♮\\\",naturals:\\\"ℕ\\\",nbsp:\\\" \\\",nbump:\\\"≎̸\\\",nbumpe:\\\"≏̸\\\",ncap:\\\"⩃\\\",Ncaron:\\\"Ň\\\",ncaron:\\\"ň\\\",Ncedil:\\\"Ņ\\\",ncedil:\\\"ņ\\\",ncong:\\\"≇\\\",ncongdot:\\\"⩭̸\\\",ncup:\\\"⩂\\\",Ncy:\\\"Н\\\",ncy:\\\"н\\\",ndash:\\\"–\\\",ne:\\\"≠\\\",nearhk:\\\"⤤\\\",neArr:\\\"⇗\\\",nearr:\\\"↗\\\",nearrow:\\\"↗\\\",nedot:\\\"≐̸\\\",NegativeMediumSpace:\\\"\\\",NegativeThickSpace:\\\"\\\",NegativeThinSpace:\\\"\\\",NegativeVeryThinSpace:\\\"\\\",nequiv:\\\"≢\\\",nesear:\\\"⤨\\\",nesim:\\\"≂̸\\\",NestedGreaterGreater:\\\"≫\\\",NestedLessLess:\\\"≪\\\",NewLine:\\\"\\\\n\\\",nexist:\\\"∄\\\",nexists:\\\"∄\\\",Nfr:\\\"𝔑\\\",nfr:\\\"𝔫\\\",ngE:\\\"≧̸\\\",nge:\\\"≱\\\",ngeq:\\\"≱\\\",ngeqq:\\\"≧̸\\\",ngeqslant:\\\"⩾̸\\\",nges:\\\"⩾̸\\\",nGg:\\\"⋙̸\\\",ngsim:\\\"≵\\\",nGt:\\\"≫⃒\\\",ngt:\\\"≯\\\",ngtr:\\\"≯\\\",nGtv:\\\"≫̸\\\",nhArr:\\\"⇎\\\",nharr:\\\"↮\\\",nhpar:\\\"⫲\\\",ni:\\\"∋\\\",nis:\\\"⋼\\\",nisd:\\\"⋺\\\",niv:\\\"∋\\\",NJcy:\\\"Њ\\\",njcy:\\\"њ\\\",nlArr:\\\"⇍\\\",nlarr:\\\"↚\\\",nldr:\\\"‥\\\",nlE:\\\"≦̸\\\",nle:\\\"≰\\\",nLeftarrow:\\\"⇍\\\",nleftarrow:\\\"↚\\\",nLeftrightarrow:\\\"⇎\\\",nleftrightarrow:\\\"↮\\\",nleq:\\\"≰\\\",nleqq:\\\"≦̸\\\",nleqslant:\\\"⩽̸\\\",nles:\\\"⩽̸\\\",nless:\\\"≮\\\",nLl:\\\"⋘̸\\\",nlsim:\\\"≴\\\",nLt:\\\"≪⃒\\\",nlt:\\\"≮\\\",nltri:\\\"⋪\\\",nltrie:\\\"⋬\\\",nLtv:\\\"≪̸\\\",nmid:\\\"∤\\\",NoBreak:\\\"\\\",NonBreakingSpace:\\\" \\\",Nopf:\\\"ℕ\\\",nopf:\\\"𝕟\\\",Not:\\\"⫬\\\",not:\\\"¬\\\",NotCongruent:\\\"≢\\\",NotCupCap:\\\"≭\\\",NotDoubleVerticalBar:\\\"∦\\\",NotElement:\\\"∉\\\",NotEqual:\\\"≠\\\",NotEqualTilde:\\\"≂̸\\\",NotExists:\\\"∄\\\",NotGreater:\\\"≯\\\",NotGreaterEqual:\\\"≱\\\",NotGreaterFullEqual:\\\"≧̸\\\",NotGreaterGreater:\\\"≫̸\\\",NotGreaterLess:\\\"≹\\\",NotGreaterSlantEqual:\\\"⩾̸\\\",NotGreaterTilde:\\\"≵\\\",NotHumpDownHump:\\\"≎̸\\\",NotHumpEqual:\\\"≏̸\\\",notin:\\\"∉\\\",notindot:\\\"⋵̸\\\",notinE:\\\"⋹̸\\\",notinva:\\\"∉\\\",notinvb:\\\"⋷\\\",notinvc:\\\"⋶\\\",NotLeftTriangle:\\\"⋪\\\",NotLeftTriangleBar:\\\"⧏̸\\\",NotLeftTriangleEqual:\\\"⋬\\\",NotLess:\\\"≮\\\",NotLessEqual:\\\"≰\\\",NotLessGreater:\\\"≸\\\",NotLessLess:\\\"≪̸\\\",NotLessSlantEqual:\\\"⩽̸\\\",NotLessTilde:\\\"≴\\\",NotNestedGreaterGreater:\\\"⪢̸\\\",NotNestedLessLess:\\\"⪡̸\\\",notni:\\\"∌\\\",notniva:\\\"∌\\\",notnivb:\\\"⋾\\\",notnivc:\\\"⋽\\\",NotPrecedes:\\\"⊀\\\",NotPrecedesEqual:\\\"⪯̸\\\",NotPrecedesSlantEqual:\\\"⋠\\\",NotReverseElement:\\\"∌\\\",NotRightTriangle:\\\"⋫\\\",NotRightTriangleBar:\\\"⧐̸\\\",NotRightTriangleEqual:\\\"⋭\\\",NotSquareSubset:\\\"⊏̸\\\",NotSquareSubsetEqual:\\\"⋢\\\",NotSquareSuperset:\\\"⊐̸\\\",NotSquareSupersetEqual:\\\"⋣\\\",NotSubset:\\\"⊂⃒\\\",NotSubsetEqual:\\\"⊈\\\",NotSucceeds:\\\"⊁\\\",NotSucceedsEqual:\\\"⪰̸\\\",NotSucceedsSlantEqual:\\\"⋡\\\",NotSucceedsTilde:\\\"≿̸\\\",NotSuperset:\\\"⊃⃒\\\",NotSupersetEqual:\\\"⊉\\\",NotTilde:\\\"≁\\\",NotTildeEqual:\\\"≄\\\",NotTildeFullEqual:\\\"≇\\\",NotTildeTilde:\\\"≉\\\",NotVerticalBar:\\\"∤\\\",npar:\\\"∦\\\",nparallel:\\\"∦\\\",nparsl:\\\"⫽⃥\\\",npart:\\\"∂̸\\\",npolint:\\\"⨔\\\",npr:\\\"⊀\\\",nprcue:\\\"⋠\\\",npre:\\\"⪯̸\\\",nprec:\\\"⊀\\\",npreceq:\\\"⪯̸\\\",nrArr:\\\"⇏\\\",nrarr:\\\"↛\\\",nrarrc:\\\"⤳̸\\\",nrarrw:\\\"↝̸\\\",nRightarrow:\\\"⇏\\\",nrightarrow:\\\"↛\\\",nrtri:\\\"⋫\\\",nrtrie:\\\"⋭\\\",nsc:\\\"⊁\\\",nsccue:\\\"⋡\\\",nsce:\\\"⪰̸\\\",Nscr:\\\"𝒩\\\",nscr:\\\"𝓃\\\",nshortmid:\\\"∤\\\",nshortparallel:\\\"∦\\\",nsim:\\\"≁\\\",nsime:\\\"≄\\\",nsimeq:\\\"≄\\\",nsmid:\\\"∤\\\",nspar:\\\"∦\\\",nsqsube:\\\"⋢\\\",nsqsupe:\\\"⋣\\\",nsub:\\\"⊄\\\",nsubE:\\\"⫅̸\\\",nsube:\\\"⊈\\\",nsubset:\\\"⊂⃒\\\",nsubseteq:\\\"⊈\\\",nsubseteqq:\\\"⫅̸\\\",nsucc:\\\"⊁\\\",nsucceq:\\\"⪰̸\\\",nsup:\\\"⊅\\\",nsupE:\\\"⫆̸\\\",nsupe:\\\"⊉\\\",nsupset:\\\"⊃⃒\\\",nsupseteq:\\\"⊉\\\",nsupseteqq:\\\"⫆̸\\\",ntgl:\\\"≹\\\",Ntilde:\\\"Ñ\\\",ntilde:\\\"ñ\\\",ntlg:\\\"≸\\\",ntriangleleft:\\\"⋪\\\",ntrianglelefteq:\\\"⋬\\\",ntriangleright:\\\"⋫\\\",ntrianglerighteq:\\\"⋭\\\",Nu:\\\"Ν\\\",nu:\\\"ν\\\",num:\\\"#\\\",numero:\\\"№\\\",numsp:\\\" \\\",nvap:\\\"≍⃒\\\",nVDash:\\\"⊯\\\",nVdash:\\\"⊮\\\",nvDash:\\\"⊭\\\",nvdash:\\\"⊬\\\",nvge:\\\"≥⃒\\\",nvgt:\\\">⃒\\\",nvHarr:\\\"⤄\\\",nvinfin:\\\"⧞\\\",nvlArr:\\\"⤂\\\",nvle:\\\"≤⃒\\\",nvlt:\\\"<⃒\\\",nvltrie:\\\"⊴⃒\\\",nvrArr:\\\"⤃\\\",nvrtrie:\\\"⊵⃒\\\",nvsim:\\\"∼⃒\\\",nwarhk:\\\"⤣\\\",nwArr:\\\"⇖\\\",nwarr:\\\"↖\\\",nwarrow:\\\"↖\\\",nwnear:\\\"⤧\\\",Oacute:\\\"Ó\\\",oacute:\\\"ó\\\",oast:\\\"⊛\\\",ocir:\\\"⊚\\\",Ocirc:\\\"Ô\\\",ocirc:\\\"ô\\\",Ocy:\\\"О\\\",ocy:\\\"о\\\",odash:\\\"⊝\\\",Odblac:\\\"Ő\\\",odblac:\\\"ő\\\",odiv:\\\"⨸\\\",odot:\\\"⊙\\\",odsold:\\\"⦼\\\",OElig:\\\"Œ\\\",oelig:\\\"œ\\\",ofcir:\\\"⦿\\\",Ofr:\\\"𝔒\\\",ofr:\\\"𝔬\\\",ogon:\\\"˛\\\",Ograve:\\\"Ò\\\",ograve:\\\"ò\\\",ogt:\\\"⧁\\\",ohbar:\\\"⦵\\\",ohm:\\\"Ω\\\",oint:\\\"∮\\\",olarr:\\\"↺\\\",olcir:\\\"⦾\\\",olcross:\\\"⦻\\\",oline:\\\"‾\\\",olt:\\\"⧀\\\",Omacr:\\\"Ō\\\",omacr:\\\"ō\\\",Omega:\\\"Ω\\\",omega:\\\"ω\\\",Omicron:\\\"Ο\\\",omicron:\\\"ο\\\",omid:\\\"⦶\\\",ominus:\\\"⊖\\\",Oopf:\\\"𝕆\\\",oopf:\\\"𝕠\\\",opar:\\\"⦷\\\",OpenCurlyDoubleQuote:\\\"“\\\",OpenCurlyQuote:\\\"‘\\\",operp:\\\"⦹\\\",oplus:\\\"⊕\\\",Or:\\\"⩔\\\",or:\\\"∨\\\",orarr:\\\"↻\\\",ord:\\\"⩝\\\",order:\\\"ℴ\\\",orderof:\\\"ℴ\\\",ordf:\\\"ª\\\",ordm:\\\"º\\\",origof:\\\"⊶\\\",oror:\\\"⩖\\\",orslope:\\\"⩗\\\",orv:\\\"⩛\\\",oS:\\\"Ⓢ\\\",Oscr:\\\"𝒪\\\",oscr:\\\"ℴ\\\",Oslash:\\\"Ø\\\",oslash:\\\"ø\\\",osol:\\\"⊘\\\",Otilde:\\\"Õ\\\",otilde:\\\"õ\\\",Otimes:\\\"⨷\\\",otimes:\\\"⊗\\\",otimesas:\\\"⨶\\\",Ouml:\\\"Ö\\\",ouml:\\\"ö\\\",ovbar:\\\"⌽\\\",OverBar:\\\"‾\\\",OverBrace:\\\"⏞\\\",OverBracket:\\\"⎴\\\",OverParenthesis:\\\"⏜\\\",par:\\\"∥\\\",para:\\\"¶\\\",parallel:\\\"∥\\\",parsim:\\\"⫳\\\",parsl:\\\"⫽\\\",part:\\\"∂\\\",PartialD:\\\"∂\\\",Pcy:\\\"П\\\",pcy:\\\"п\\\",percnt:\\\"%\\\",period:\\\".\\\",permil:\\\"‰\\\",perp:\\\"⊥\\\",pertenk:\\\"‱\\\",Pfr:\\\"𝔓\\\",pfr:\\\"𝔭\\\",Phi:\\\"Φ\\\",phi:\\\"φ\\\",phiv:\\\"ϕ\\\",phmmat:\\\"ℳ\\\",phone:\\\"☎\\\",Pi:\\\"Π\\\",pi:\\\"π\\\",pitchfork:\\\"⋔\\\",piv:\\\"ϖ\\\",planck:\\\"ℏ\\\",planckh:\\\"ℎ\\\",plankv:\\\"ℏ\\\",plus:\\\"+\\\",plusacir:\\\"⨣\\\",plusb:\\\"⊞\\\",pluscir:\\\"⨢\\\",plusdo:\\\"∔\\\",plusdu:\\\"⨥\\\",pluse:\\\"⩲\\\",PlusMinus:\\\"±\\\",plusmn:\\\"±\\\",plussim:\\\"⨦\\\",plustwo:\\\"⨧\\\",pm:\\\"±\\\",Poincareplane:\\\"ℌ\\\",pointint:\\\"⨕\\\",Popf:\\\"ℙ\\\",popf:\\\"𝕡\\\",pound:\\\"£\\\",Pr:\\\"⪻\\\",pr:\\\"≺\\\",prap:\\\"⪷\\\",prcue:\\\"≼\\\",prE:\\\"⪳\\\",pre:\\\"⪯\\\",prec:\\\"≺\\\",precapprox:\\\"⪷\\\",preccurlyeq:\\\"≼\\\",Precedes:\\\"≺\\\",PrecedesEqual:\\\"⪯\\\",PrecedesSlantEqual:\\\"≼\\\",PrecedesTilde:\\\"≾\\\",preceq:\\\"⪯\\\",precnapprox:\\\"⪹\\\",precneqq:\\\"⪵\\\",precnsim:\\\"⋨\\\",precsim:\\\"≾\\\",Prime:\\\"″\\\",prime:\\\"′\\\",primes:\\\"ℙ\\\",prnap:\\\"⪹\\\",prnE:\\\"⪵\\\",prnsim:\\\"⋨\\\",prod:\\\"∏\\\",Product:\\\"∏\\\",profalar:\\\"⌮\\\",profline:\\\"⌒\\\",profsurf:\\\"⌓\\\",prop:\\\"∝\\\",Proportion:\\\"∷\\\",Proportional:\\\"∝\\\",propto:\\\"∝\\\",prsim:\\\"≾\\\",prurel:\\\"⊰\\\",Pscr:\\\"𝒫\\\",pscr:\\\"𝓅\\\",Psi:\\\"Ψ\\\",psi:\\\"ψ\\\",puncsp:\\\" \\\",Qfr:\\\"𝔔\\\",qfr:\\\"𝔮\\\",qint:\\\"⨌\\\",Qopf:\\\"ℚ\\\",qopf:\\\"𝕢\\\",qprime:\\\"⁗\\\",Qscr:\\\"𝒬\\\",qscr:\\\"𝓆\\\",quaternions:\\\"ℍ\\\",quatint:\\\"⨖\\\",quest:\\\"?\\\",questeq:\\\"≟\\\",QUOT:'\\\"',quot:'\\\"',rAarr:\\\"⇛\\\",race:\\\"∽̱\\\",Racute:\\\"Ŕ\\\",racute:\\\"ŕ\\\",radic:\\\"√\\\",raemptyv:\\\"⦳\\\",Rang:\\\"⟫\\\",rang:\\\"⟩\\\",rangd:\\\"⦒\\\",range:\\\"⦥\\\",rangle:\\\"⟩\\\",raquo:\\\"»\\\",Rarr:\\\"↠\\\",rArr:\\\"⇒\\\",rarr:\\\"→\\\",rarrap:\\\"⥵\\\",rarrb:\\\"⇥\\\",rarrbfs:\\\"⤠\\\",rarrc:\\\"⤳\\\",rarrfs:\\\"⤞\\\",rarrhk:\\\"↪\\\",rarrlp:\\\"↬\\\",rarrpl:\\\"⥅\\\",rarrsim:\\\"⥴\\\",Rarrtl:\\\"⤖\\\",rarrtl:\\\"↣\\\",rarrw:\\\"↝\\\",rAtail:\\\"⤜\\\",ratail:\\\"⤚\\\",ratio:\\\"∶\\\",rationals:\\\"ℚ\\\",RBarr:\\\"⤐\\\",rBarr:\\\"⤏\\\",rbarr:\\\"⤍\\\",rbbrk:\\\"❳\\\",rbrace:\\\"}\\\",rbrack:\\\"]\\\",rbrke:\\\"⦌\\\",rbrksld:\\\"⦎\\\",rbrkslu:\\\"⦐\\\",Rcaron:\\\"Ř\\\",rcaron:\\\"ř\\\",Rcedil:\\\"Ŗ\\\",rcedil:\\\"ŗ\\\",rceil:\\\"⌉\\\",rcub:\\\"}\\\",Rcy:\\\"Р\\\",rcy:\\\"р\\\",rdca:\\\"⤷\\\",rdldhar:\\\"⥩\\\",rdquo:\\\"”\\\",rdquor:\\\"”\\\",rdsh:\\\"↳\\\",Re:\\\"ℜ\\\",real:\\\"ℜ\\\",realine:\\\"ℛ\\\",realpart:\\\"ℜ\\\",reals:\\\"ℝ\\\",rect:\\\"▭\\\",REG:\\\"®\\\",reg:\\\"®\\\",ReverseElement:\\\"∋\\\",ReverseEquilibrium:\\\"⇋\\\",ReverseUpEquilibrium:\\\"⥯\\\",rfisht:\\\"⥽\\\",rfloor:\\\"⌋\\\",Rfr:\\\"ℜ\\\",rfr:\\\"𝔯\\\",rHar:\\\"⥤\\\",rhard:\\\"⇁\\\",rharu:\\\"⇀\\\",rharul:\\\"⥬\\\",Rho:\\\"Ρ\\\",rho:\\\"ρ\\\",rhov:\\\"ϱ\\\",RightAngleBracket:\\\"⟩\\\",RightArrow:\\\"→\\\",Rightarrow:\\\"⇒\\\",rightarrow:\\\"→\\\",RightArrowBar:\\\"⇥\\\",RightArrowLeftArrow:\\\"⇄\\\",rightarrowtail:\\\"↣\\\",RightCeiling:\\\"⌉\\\",RightDoubleBracket:\\\"⟧\\\",RightDownTeeVector:\\\"⥝\\\",RightDownVector:\\\"⇂\\\",RightDownVectorBar:\\\"⥕\\\",RightFloor:\\\"⌋\\\",rightharpoondown:\\\"⇁\\\",rightharpoonup:\\\"⇀\\\",rightleftarrows:\\\"⇄\\\",rightleftharpoons:\\\"⇌\\\",rightrightarrows:\\\"⇉\\\",rightsquigarrow:\\\"↝\\\",RightTee:\\\"⊢\\\",RightTeeArrow:\\\"↦\\\",RightTeeVector:\\\"⥛\\\",rightthreetimes:\\\"⋌\\\",RightTriangle:\\\"⊳\\\",RightTriangleBar:\\\"⧐\\\",RightTriangleEqual:\\\"⊵\\\",RightUpDownVector:\\\"⥏\\\",RightUpTeeVector:\\\"⥜\\\",RightUpVector:\\\"↾\\\",RightUpVectorBar:\\\"⥔\\\",RightVector:\\\"⇀\\\",RightVectorBar:\\\"⥓\\\",ring:\\\"˚\\\",risingdotseq:\\\"≓\\\",rlarr:\\\"⇄\\\",rlhar:\\\"⇌\\\",rlm:\\\"\\\",rmoust:\\\"⎱\\\",rmoustache:\\\"⎱\\\",rnmid:\\\"⫮\\\",roang:\\\"⟭\\\",roarr:\\\"⇾\\\",robrk:\\\"⟧\\\",ropar:\\\"⦆\\\",Ropf:\\\"ℝ\\\",ropf:\\\"𝕣\\\",roplus:\\\"⨮\\\",rotimes:\\\"⨵\\\",RoundImplies:\\\"⥰\\\",rpar:\\\")\\\",rpargt:\\\"⦔\\\",rppolint:\\\"⨒\\\",rrarr:\\\"⇉\\\",Rrightarrow:\\\"⇛\\\",rsaquo:\\\"›\\\",Rscr:\\\"ℛ\\\",rscr:\\\"𝓇\\\",Rsh:\\\"↱\\\",rsh:\\\"↱\\\",rsqb:\\\"]\\\",rsquo:\\\"’\\\",rsquor:\\\"’\\\",rthree:\\\"⋌\\\",rtimes:\\\"⋊\\\",rtri:\\\"▹\\\",rtrie:\\\"⊵\\\",rtrif:\\\"▸\\\",rtriltri:\\\"⧎\\\",RuleDelayed:\\\"⧴\\\",ruluhar:\\\"⥨\\\",rx:\\\"℞\\\",Sacute:\\\"Ś\\\",sacute:\\\"ś\\\",sbquo:\\\"‚\\\",Sc:\\\"⪼\\\",sc:\\\"≻\\\",scap:\\\"⪸\\\",Scaron:\\\"Š\\\",scaron:\\\"š\\\",sccue:\\\"≽\\\",scE:\\\"⪴\\\",sce:\\\"⪰\\\",Scedil:\\\"Ş\\\",scedil:\\\"ş\\\",Scirc:\\\"Ŝ\\\",scirc:\\\"ŝ\\\",scnap:\\\"⪺\\\",scnE:\\\"⪶\\\",scnsim:\\\"⋩\\\",scpolint:\\\"⨓\\\",scsim:\\\"≿\\\",Scy:\\\"С\\\",scy:\\\"с\\\",sdot:\\\"⋅\\\",sdotb:\\\"⊡\\\",sdote:\\\"⩦\\\",searhk:\\\"⤥\\\",seArr:\\\"⇘\\\",searr:\\\"↘\\\",searrow:\\\"↘\\\",sect:\\\"§\\\",semi:\\\";\\\",seswar:\\\"⤩\\\",setminus:\\\"∖\\\",setmn:\\\"∖\\\",sext:\\\"✶\\\",Sfr:\\\"𝔖\\\",sfr:\\\"𝔰\\\",sfrown:\\\"⌢\\\",sharp:\\\"♯\\\",SHCHcy:\\\"Щ\\\",shchcy:\\\"щ\\\",SHcy:\\\"Ш\\\",shcy:\\\"ш\\\",ShortDownArrow:\\\"↓\\\",ShortLeftArrow:\\\"←\\\",shortmid:\\\"∣\\\",shortparallel:\\\"∥\\\",ShortRightArrow:\\\"→\\\",ShortUpArrow:\\\"↑\\\",shy:\\\"\\\",Sigma:\\\"Σ\\\",sigma:\\\"σ\\\",sigmaf:\\\"ς\\\",sigmav:\\\"ς\\\",sim:\\\"∼\\\",simdot:\\\"⩪\\\",sime:\\\"≃\\\",simeq:\\\"≃\\\",simg:\\\"⪞\\\",simgE:\\\"⪠\\\",siml:\\\"⪝\\\",simlE:\\\"⪟\\\",simne:\\\"≆\\\",simplus:\\\"⨤\\\",simrarr:\\\"⥲\\\",slarr:\\\"←\\\",SmallCircle:\\\"∘\\\",smallsetminus:\\\"∖\\\",smashp:\\\"⨳\\\",smeparsl:\\\"⧤\\\",smid:\\\"∣\\\",smile:\\\"⌣\\\",smt:\\\"⪪\\\",smte:\\\"⪬\\\",smtes:\\\"⪬︀\\\",SOFTcy:\\\"Ь\\\",softcy:\\\"ь\\\",sol:\\\"/\\\",solb:\\\"⧄\\\",solbar:\\\"⌿\\\",Sopf:\\\"𝕊\\\",sopf:\\\"𝕤\\\",spades:\\\"♠\\\",spadesuit:\\\"♠\\\",spar:\\\"∥\\\",sqcap:\\\"⊓\\\",sqcaps:\\\"⊓︀\\\",sqcup:\\\"⊔\\\",sqcups:\\\"⊔︀\\\",Sqrt:\\\"√\\\",sqsub:\\\"⊏\\\",sqsube:\\\"⊑\\\",sqsubset:\\\"⊏\\\",sqsubseteq:\\\"⊑\\\",sqsup:\\\"⊐\\\",sqsupe:\\\"⊒\\\",sqsupset:\\\"⊐\\\",sqsupseteq:\\\"⊒\\\",squ:\\\"□\\\",Square:\\\"□\\\",square:\\\"□\\\",SquareIntersection:\\\"⊓\\\",SquareSubset:\\\"⊏\\\",SquareSubsetEqual:\\\"⊑\\\",SquareSuperset:\\\"⊐\\\",SquareSupersetEqual:\\\"⊒\\\",SquareUnion:\\\"⊔\\\",squarf:\\\"▪\\\",squf:\\\"▪\\\",srarr:\\\"→\\\",Sscr:\\\"𝒮\\\",sscr:\\\"𝓈\\\",ssetmn:\\\"∖\\\",ssmile:\\\"⌣\\\",sstarf:\\\"⋆\\\",Star:\\\"⋆\\\",star:\\\"☆\\\",starf:\\\"★\\\",straightepsilon:\\\"ϵ\\\",straightphi:\\\"ϕ\\\",strns:\\\"¯\\\",Sub:\\\"⋐\\\",sub:\\\"⊂\\\",subdot:\\\"⪽\\\",subE:\\\"⫅\\\",sube:\\\"⊆\\\",subedot:\\\"⫃\\\",submult:\\\"⫁\\\",subnE:\\\"⫋\\\",subne:\\\"⊊\\\",subplus:\\\"⪿\\\",subrarr:\\\"⥹\\\",Subset:\\\"⋐\\\",subset:\\\"⊂\\\",subseteq:\\\"⊆\\\",subseteqq:\\\"⫅\\\",SubsetEqual:\\\"⊆\\\",subsetneq:\\\"⊊\\\",subsetneqq:\\\"⫋\\\",subsim:\\\"⫇\\\",subsub:\\\"⫕\\\",subsup:\\\"⫓\\\",succ:\\\"≻\\\",succapprox:\\\"⪸\\\",succcurlyeq:\\\"≽\\\",Succeeds:\\\"≻\\\",SucceedsEqual:\\\"⪰\\\",SucceedsSlantEqual:\\\"≽\\\",SucceedsTilde:\\\"≿\\\",succeq:\\\"⪰\\\",succnapprox:\\\"⪺\\\",succneqq:\\\"⪶\\\",succnsim:\\\"⋩\\\",succsim:\\\"≿\\\",SuchThat:\\\"∋\\\",Sum:\\\"∑\\\",sum:\\\"∑\\\",sung:\\\"♪\\\",Sup:\\\"⋑\\\",sup:\\\"⊃\\\",sup1:\\\"¹\\\",sup2:\\\"²\\\",sup3:\\\"³\\\",supdot:\\\"⪾\\\",supdsub:\\\"⫘\\\",supE:\\\"⫆\\\",supe:\\\"⊇\\\",supedot:\\\"⫄\\\",Superset:\\\"⊃\\\",SupersetEqual:\\\"⊇\\\",suphsol:\\\"⟉\\\",suphsub:\\\"⫗\\\",suplarr:\\\"⥻\\\",supmult:\\\"⫂\\\",supnE:\\\"⫌\\\",supne:\\\"⊋\\\",supplus:\\\"⫀\\\",Supset:\\\"⋑\\\",supset:\\\"⊃\\\",supseteq:\\\"⊇\\\",supseteqq:\\\"⫆\\\",supsetneq:\\\"⊋\\\",supsetneqq:\\\"⫌\\\",supsim:\\\"⫈\\\",supsub:\\\"⫔\\\",supsup:\\\"⫖\\\",swarhk:\\\"⤦\\\",swArr:\\\"⇙\\\",swarr:\\\"↙\\\",swarrow:\\\"↙\\\",swnwar:\\\"⤪\\\",szlig:\\\"ß\\\",Tab:\\\"\\\\t\\\",target:\\\"⌖\\\",Tau:\\\"Τ\\\",tau:\\\"τ\\\",tbrk:\\\"⎴\\\",Tcaron:\\\"Ť\\\",tcaron:\\\"ť\\\",Tcedil:\\\"Ţ\\\",tcedil:\\\"ţ\\\",Tcy:\\\"Т\\\",tcy:\\\"т\\\",tdot:\\\"⃛\\\",telrec:\\\"⌕\\\",Tfr:\\\"𝔗\\\",tfr:\\\"𝔱\\\",there4:\\\"∴\\\",Therefore:\\\"∴\\\",therefore:\\\"∴\\\",Theta:\\\"Θ\\\",theta:\\\"θ\\\",thetasym:\\\"ϑ\\\",thetav:\\\"ϑ\\\",thickapprox:\\\"≈\\\",thicksim:\\\"∼\\\",ThickSpace:\\\" \\\",thinsp:\\\" \\\",ThinSpace:\\\" \\\",thkap:\\\"≈\\\",thksim:\\\"∼\\\",THORN:\\\"Þ\\\",thorn:\\\"þ\\\",Tilde:\\\"∼\\\",tilde:\\\"˜\\\",TildeEqual:\\\"≃\\\",TildeFullEqual:\\\"≅\\\",TildeTilde:\\\"≈\\\",times:\\\"×\\\",timesb:\\\"⊠\\\",timesbar:\\\"⨱\\\",timesd:\\\"⨰\\\",tint:\\\"∭\\\",toea:\\\"⤨\\\",top:\\\"⊤\\\",topbot:\\\"⌶\\\",topcir:\\\"⫱\\\",Topf:\\\"𝕋\\\",topf:\\\"𝕥\\\",topfork:\\\"⫚\\\",tosa:\\\"⤩\\\",tprime:\\\"‴\\\",TRADE:\\\"™\\\",trade:\\\"™\\\",triangle:\\\"▵\\\",triangledown:\\\"▿\\\",triangleleft:\\\"◃\\\",trianglelefteq:\\\"⊴\\\",triangleq:\\\"≜\\\",triangleright:\\\"▹\\\",trianglerighteq:\\\"⊵\\\",tridot:\\\"◬\\\",trie:\\\"≜\\\",triminus:\\\"⨺\\\",TripleDot:\\\"⃛\\\",triplus:\\\"⨹\\\",trisb:\\\"⧍\\\",tritime:\\\"⨻\\\",trpezium:\\\"⏢\\\",Tscr:\\\"𝒯\\\",tscr:\\\"𝓉\\\",TScy:\\\"Ц\\\",tscy:\\\"ц\\\",TSHcy:\\\"Ћ\\\",tshcy:\\\"ћ\\\",Tstrok:\\\"Ŧ\\\",tstrok:\\\"ŧ\\\",twixt:\\\"≬\\\",twoheadleftarrow:\\\"↞\\\",twoheadrightarrow:\\\"↠\\\",Uacute:\\\"Ú\\\",uacute:\\\"ú\\\",Uarr:\\\"↟\\\",uArr:\\\"⇑\\\",uarr:\\\"↑\\\",Uarrocir:\\\"⥉\\\",Ubrcy:\\\"Ў\\\",ubrcy:\\\"ў\\\",Ubreve:\\\"Ŭ\\\",ubreve:\\\"ŭ\\\",Ucirc:\\\"Û\\\",ucirc:\\\"û\\\",Ucy:\\\"У\\\",ucy:\\\"у\\\",udarr:\\\"⇅\\\",Udblac:\\\"Ű\\\",udblac:\\\"ű\\\",udhar:\\\"⥮\\\",ufisht:\\\"⥾\\\",Ufr:\\\"𝔘\\\",ufr:\\\"𝔲\\\",Ugrave:\\\"Ù\\\",ugrave:\\\"ù\\\",uHar:\\\"⥣\\\",uharl:\\\"↿\\\",uharr:\\\"↾\\\",uhblk:\\\"▀\\\",ulcorn:\\\"⌜\\\",ulcorner:\\\"⌜\\\",ulcrop:\\\"⌏\\\",ultri:\\\"◸\\\",Umacr:\\\"Ū\\\",umacr:\\\"ū\\\",uml:\\\"¨\\\",UnderBar:\\\"_\\\",UnderBrace:\\\"⏟\\\",UnderBracket:\\\"⎵\\\",UnderParenthesis:\\\"⏝\\\",Union:\\\"⋃\\\",UnionPlus:\\\"⊎\\\",Uogon:\\\"Ų\\\",uogon:\\\"ų\\\",Uopf:\\\"𝕌\\\",uopf:\\\"𝕦\\\",UpArrow:\\\"↑\\\",Uparrow:\\\"⇑\\\",uparrow:\\\"↑\\\",UpArrowBar:\\\"⤒\\\",UpArrowDownArrow:\\\"⇅\\\",UpDownArrow:\\\"↕\\\",Updownarrow:\\\"⇕\\\",updownarrow:\\\"↕\\\",UpEquilibrium:\\\"⥮\\\",upharpoonleft:\\\"↿\\\",upharpoonright:\\\"↾\\\",uplus:\\\"⊎\\\",UpperLeftArrow:\\\"↖\\\",UpperRightArrow:\\\"↗\\\",Upsi:\\\"ϒ\\\",upsi:\\\"υ\\\",upsih:\\\"ϒ\\\",Upsilon:\\\"Υ\\\",upsilon:\\\"υ\\\",UpTee:\\\"⊥\\\",UpTeeArrow:\\\"↥\\\",upuparrows:\\\"⇈\\\",urcorn:\\\"⌝\\\",urcorner:\\\"⌝\\\",urcrop:\\\"⌎\\\",Uring:\\\"Ů\\\",uring:\\\"ů\\\",urtri:\\\"◹\\\",Uscr:\\\"𝒰\\\",uscr:\\\"𝓊\\\",utdot:\\\"⋰\\\",Utilde:\\\"Ũ\\\",utilde:\\\"ũ\\\",utri:\\\"▵\\\",utrif:\\\"▴\\\",uuarr:\\\"⇈\\\",Uuml:\\\"Ü\\\",uuml:\\\"ü\\\",uwangle:\\\"⦧\\\",vangrt:\\\"⦜\\\",varepsilon:\\\"ϵ\\\",varkappa:\\\"ϰ\\\",varnothing:\\\"∅\\\",varphi:\\\"ϕ\\\",varpi:\\\"ϖ\\\",varpropto:\\\"∝\\\",vArr:\\\"⇕\\\",varr:\\\"↕\\\",varrho:\\\"ϱ\\\",varsigma:\\\"ς\\\",varsubsetneq:\\\"⊊︀\\\",varsubsetneqq:\\\"⫋︀\\\",varsupsetneq:\\\"⊋︀\\\",varsupsetneqq:\\\"⫌︀\\\",vartheta:\\\"ϑ\\\",vartriangleleft:\\\"⊲\\\",vartriangleright:\\\"⊳\\\",Vbar:\\\"⫫\\\",vBar:\\\"⫨\\\",vBarv:\\\"⫩\\\",Vcy:\\\"В\\\",vcy:\\\"в\\\",VDash:\\\"⊫\\\",Vdash:\\\"⊩\\\",vDash:\\\"⊨\\\",vdash:\\\"⊢\\\",Vdashl:\\\"⫦\\\",Vee:\\\"⋁\\\",vee:\\\"∨\\\",veebar:\\\"⊻\\\",veeeq:\\\"≚\\\",vellip:\\\"⋮\\\",Verbar:\\\"‖\\\",verbar:\\\"|\\\",Vert:\\\"‖\\\",vert:\\\"|\\\",VerticalBar:\\\"∣\\\",VerticalLine:\\\"|\\\",VerticalSeparator:\\\"❘\\\",VerticalTilde:\\\"≀\\\",VeryThinSpace:\\\" \\\",Vfr:\\\"𝔙\\\",vfr:\\\"𝔳\\\",vltri:\\\"⊲\\\",vnsub:\\\"⊂⃒\\\",vnsup:\\\"⊃⃒\\\",Vopf:\\\"𝕍\\\",vopf:\\\"𝕧\\\",vprop:\\\"∝\\\",vrtri:\\\"⊳\\\",Vscr:\\\"𝒱\\\",vscr:\\\"𝓋\\\",vsubnE:\\\"⫋︀\\\",vsubne:\\\"⊊︀\\\",vsupnE:\\\"⫌︀\\\",vsupne:\\\"⊋︀\\\",Vvdash:\\\"⊪\\\",vzigzag:\\\"⦚\\\",Wcirc:\\\"Ŵ\\\",wcirc:\\\"ŵ\\\",wedbar:\\\"⩟\\\",Wedge:\\\"⋀\\\",wedge:\\\"∧\\\",wedgeq:\\\"≙\\\",weierp:\\\"℘\\\",Wfr:\\\"𝔚\\\",wfr:\\\"𝔴\\\",Wopf:\\\"𝕎\\\",wopf:\\\"𝕨\\\",wp:\\\"℘\\\",wr:\\\"≀\\\",wreath:\\\"≀\\\",Wscr:\\\"𝒲\\\",wscr:\\\"𝓌\\\",xcap:\\\"⋂\\\",xcirc:\\\"◯\\\",xcup:\\\"⋃\\\",xdtri:\\\"▽\\\",Xfr:\\\"𝔛\\\",xfr:\\\"𝔵\\\",xhArr:\\\"⟺\\\",xharr:\\\"⟷\\\",Xi:\\\"Ξ\\\",xi:\\\"ξ\\\",xlArr:\\\"⟸\\\",xlarr:\\\"⟵\\\",xmap:\\\"⟼\\\",xnis:\\\"⋻\\\",xodot:\\\"⨀\\\",Xopf:\\\"𝕏\\\",xopf:\\\"𝕩\\\",xoplus:\\\"⨁\\\",xotime:\\\"⨂\\\",xrArr:\\\"⟹\\\",xrarr:\\\"⟶\\\",Xscr:\\\"𝒳\\\",xscr:\\\"𝓍\\\",xsqcup:\\\"⨆\\\",xuplus:\\\"⨄\\\",xutri:\\\"△\\\",xvee:\\\"⋁\\\",xwedge:\\\"⋀\\\",Yacute:\\\"Ý\\\",yacute:\\\"ý\\\",YAcy:\\\"Я\\\",yacy:\\\"я\\\",Ycirc:\\\"Ŷ\\\",ycirc:\\\"ŷ\\\",Ycy:\\\"Ы\\\",ycy:\\\"ы\\\",yen:\\\"¥\\\",Yfr:\\\"𝔜\\\",yfr:\\\"𝔶\\\",YIcy:\\\"Ї\\\",yicy:\\\"ї\\\",Yopf:\\\"𝕐\\\",yopf:\\\"𝕪\\\",Yscr:\\\"𝒴\\\",yscr:\\\"𝓎\\\",YUcy:\\\"Ю\\\",yucy:\\\"ю\\\",Yuml:\\\"Ÿ\\\",yuml:\\\"ÿ\\\",Zacute:\\\"Ź\\\",zacute:\\\"ź\\\",Zcaron:\\\"Ž\\\",zcaron:\\\"ž\\\",Zcy:\\\"З\\\",zcy:\\\"з\\\",Zdot:\\\"Ż\\\",zdot:\\\"ż\\\",zeetrf:\\\"ℨ\\\",ZeroWidthSpace:\\\"\\\",Zeta:\\\"Ζ\\\",zeta:\\\"ζ\\\",Zfr:\\\"ℨ\\\",zfr:\\\"𝔷\\\",ZHcy:\\\"Ж\\\",zhcy:\\\"ж\\\",zigrarr:\\\"⇝\\\",Zopf:\\\"ℤ\\\",zopf:\\\"𝕫\\\",Zscr:\\\"𝒵\\\",zscr:\\\"𝓏\\\",zwj:\\\"\\\",zwnj:\\\"\\\"},r=Object.prototype.hasOwnProperty;function n(e){return o=e,(n=t)&&r.call(n,o)?t[e]:e;var n,o}var o=Object.prototype.hasOwnProperty;function s(e,t){return!!e&&o.call(e,t)}function i(e){return[].slice.call(arguments,1).forEach(function(t){if(t){if(\\\"object\\\"!=typeof t)throw new TypeError(t+\\\"must be object\\\");Object.keys(t).forEach(function(r){e[r]=t[r]})}}),e}var a=/\\\\\\\\([\\\\\\\\!\\\"#$%&'()*+,.\\\\/:;<=>?@[\\\\]^_`{|}~-])/g;function u(e){return e.indexOf(\\\"\\\\\\\\\\\")<0?e:e.replace(a,\\\"$1\\\")}function l(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function c(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}var p=/&([a-z#][a-z0-9]{1,31});/gi,h=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;function f(e,t){var r=0,o=n(t);return t!==o?o:35===t.charCodeAt(0)&&h.test(t)&&l(r=\\\"x\\\"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?c(r):e}function g(e){return e.indexOf(\\\"&\\\")<0?e:e.replace(p,f)}var d=/[&<>\\\"]/,m=/[&<>\\\"]/g,b={\\\"&\\\":\\\"&\\\",\\\"<\\\":\\\"<\\\",\\\">\\\":\\\">\\\",'\\\"':\\\""\\\"};function v(e){return b[e]}function k(e){return d.test(e)?e.replace(m,v):e}var A=Object.freeze({isString:function(e){return\\\"[object String]\\\"===function(e){return Object.prototype.toString.call(e)}(e)},has:s,assign:i,unescapeMd:u,isValidEntityCode:l,fromCodePoint:c,replaceEntities:g,escapeHtml:k}),y={};y.blockquote_open=function(){return\\\"<blockquote>\\\\n\\\"},y.blockquote_close=function(e,t){return\\\"</blockquote>\\\"+x(e,t)},y.code=function(e,t){return e[t].block?\\\"<pre><code>\\\"+k(e[t].content)+\\\"</code></pre>\\\"+x(e,t):\\\"<code>\\\"+k(e[t].content)+\\\"</code>\\\"},y.fence=function(e,t,r,n,o){var i,a,l=e[t],c=\\\"\\\",p=r.langPrefix;if(l.params){if(a=(i=l.params.split(/\\\\s+/g)).join(\\\" \\\"),s(o.rules.fence_custom,i[0]))return o.rules.fence_custom[i[0]](e,t,r,n,o);c=' class=\\\"'+p+k(g(u(a)))+'\\\"'}return\\\"<pre><code\\\"+c+\\\">\\\"+(r.highlight&&r.highlight.apply(r.highlight,[l.content].concat(i))||k(l.content))+\\\"</code></pre>\\\"+x(e,t)},y.fence_custom={},y.heading_open=function(e,t){return\\\"<h\\\"+e[t].hLevel+\\\">\\\"},y.heading_close=function(e,t){return\\\"</h\\\"+e[t].hLevel+\\\">\\\\n\\\"},y.hr=function(e,t,r){return(r.xhtmlOut?\\\"<hr />\\\":\\\"<hr>\\\")+x(e,t)},y.bullet_list_open=function(){return\\\"<ul>\\\\n\\\"},y.bullet_list_close=function(e,t){return\\\"</ul>\\\"+x(e,t)},y.list_item_open=function(){return\\\"<li>\\\"},y.list_item_close=function(){return\\\"</li>\\\\n\\\"},y.ordered_list_open=function(e,t){var r=e[t];return\\\"<ol\\\"+(r.order>1?' start=\\\"'+r.order+'\\\"':\\\"\\\")+\\\">\\\\n\\\"},y.ordered_list_close=function(e,t){return\\\"</ol>\\\"+x(e,t)},y.paragraph_open=function(e,t){return e[t].tight?\\\"\\\":\\\"<p>\\\"},y.paragraph_close=function(e,t){var r=!(e[t].tight&&t&&\\\"inline\\\"===e[t-1].type&&!e[t-1].content);return(e[t].tight?\\\"\\\":\\\"</p>\\\")+(r?x(e,t):\\\"\\\")},y.link_open=function(e,t,r){var n=e[t].title?' title=\\\"'+k(g(e[t].title))+'\\\"':\\\"\\\",o=r.linkTarget?' target=\\\"'+r.linkTarget+'\\\"':\\\"\\\";return'<a href=\\\"'+k(e[t].href)+'\\\"'+n+o+\\\">\\\"},y.link_close=function(){return\\\"</a>\\\"},y.image=function(e,t,r){var n=' src=\\\"'+k(e[t].src)+'\\\"',o=e[t].title?' title=\\\"'+k(g(e[t].title))+'\\\"':\\\"\\\";return\\\"<img\\\"+n+(' alt=\\\"'+(e[t].alt?k(g(u(e[t].alt))):\\\"\\\")+'\\\"')+o+(r.xhtmlOut?\\\" /\\\":\\\"\\\")+\\\">\\\"},y.table_open=function(){return\\\"<table>\\\\n\\\"},y.table_close=function(){return\\\"</table>\\\\n\\\"},y.thead_open=function(){return\\\"<thead>\\\\n\\\"},y.thead_close=function(){return\\\"</thead>\\\\n\\\"},y.tbody_open=function(){return\\\"<tbody>\\\\n\\\"},y.tbody_close=function(){return\\\"</tbody>\\\\n\\\"},y.tr_open=function(){return\\\"<tr>\\\"},y.tr_close=function(){return\\\"</tr>\\\\n\\\"},y.th_open=function(e,t){var r=e[t];return\\\"<th\\\"+(r.align?' style=\\\"text-align:'+r.align+'\\\"':\\\"\\\")+\\\">\\\"},y.th_close=function(){return\\\"</th>\\\"},y.td_open=function(e,t){var r=e[t];return\\\"<td\\\"+(r.align?' style=\\\"text-align:'+r.align+'\\\"':\\\"\\\")+\\\">\\\"},y.td_close=function(){return\\\"</td>\\\"},y.strong_open=function(){return\\\"<strong>\\\"},y.strong_close=function(){return\\\"</strong>\\\"},y.em_open=function(){return\\\"<em>\\\"},y.em_close=function(){return\\\"</em>\\\"},y.del_open=function(){return\\\"<del>\\\"},y.del_close=function(){return\\\"</del>\\\"},y.ins_open=function(){return\\\"<ins>\\\"},y.ins_close=function(){return\\\"</ins>\\\"},y.mark_open=function(){return\\\"<mark>\\\"},y.mark_close=function(){return\\\"</mark>\\\"},y.sub=function(e,t){return\\\"<sub>\\\"+k(e[t].content)+\\\"</sub>\\\"},y.sup=function(e,t){return\\\"<sup>\\\"+k(e[t].content)+\\\"</sup>\\\"},y.hardbreak=function(e,t,r){return r.xhtmlOut?\\\"<br />\\\\n\\\":\\\"<br>\\\\n\\\"},y.softbreak=function(e,t,r){return r.breaks?r.xhtmlOut?\\\"<br />\\\\n\\\":\\\"<br>\\\\n\\\":\\\"\\\\n\\\"},y.text=function(e,t){return k(e[t].content)},y.htmlblock=function(e,t){return e[t].content},y.htmltag=function(e,t){return e[t].content},y.abbr_open=function(e,t){return'<abbr title=\\\"'+k(g(e[t].title))+'\\\">'},y.abbr_close=function(){return\\\"</abbr>\\\"},y.footnote_ref=function(e,t){var r=Number(e[t].id+1).toString(),n=\\\"fnref\\\"+r;return e[t].subId>0&&(n+=\\\":\\\"+e[t].subId),'<sup class=\\\"footnote-ref\\\"><a href=\\\"#fn'+r+'\\\" id=\\\"'+n+'\\\">['+r+\\\"]</a></sup>\\\"},y.footnote_block_open=function(e,t,r){return(r.xhtmlOut?'<hr class=\\\"footnotes-sep\\\" />\\\\n':'<hr class=\\\"footnotes-sep\\\">\\\\n')+'<section class=\\\"footnotes\\\">\\\\n<ol class=\\\"footnotes-list\\\">\\\\n'},y.footnote_block_close=function(){return\\\"</ol>\\\\n</section>\\\\n\\\"},y.footnote_open=function(e,t){return'<li id=\\\"fn'+Number(e[t].id+1).toString()+'\\\" class=\\\"footnote-item\\\">'},y.footnote_close=function(){return\\\"</li>\\\\n\\\"},y.footnote_anchor=function(e,t){var r=\\\"fnref\\\"+Number(e[t].id+1).toString();return e[t].subId>0&&(r+=\\\":\\\"+e[t].subId),' <a href=\\\"#'+r+'\\\" class=\\\"footnote-backref\\\">↩</a>'},y.dl_open=function(){return\\\"<dl>\\\\n\\\"},y.dt_open=function(){return\\\"<dt>\\\"},y.dd_open=function(){return\\\"<dd>\\\"},y.dl_close=function(){return\\\"</dl>\\\\n\\\"},y.dt_close=function(){return\\\"</dt>\\\\n\\\"},y.dd_close=function(){return\\\"</dd>\\\\n\\\"};var x=y.getBreak=function(e,t){return(t=function e(t,r){return++r>=t.length-2?r:\\\"paragraph_open\\\"===t[r].type&&t[r].tight&&\\\"inline\\\"===t[r+1].type&&0===t[r+1].content.length&&\\\"paragraph_close\\\"===t[r+2].type&&t[r+2].tight?e(t,r+2):r}(e,t))<e.length&&\\\"list_item_close\\\"===e[t].type?\\\"\\\":\\\"\\\\n\\\"};function w(){this.rules=i({},y),this.getBreak=y.getBreak}function C(){this.__rules__=[],this.__cache__=null}function E(e,t,r,n,o){this.src=e,this.env=n,this.options=r,this.parser=t,this.tokens=o,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending=\\\"\\\",this.pendingLevel=0,this.cache=[],this.isInLabel=!1,this.linkLevel=0,this.linkContent=\\\"\\\",this.labelUnmatchedScopes=0}function D(e,t){var r,n,o,s=-1,i=e.posMax,a=e.pos,u=e.isInLabel;if(e.isInLabel)return-1;if(e.labelUnmatchedScopes)return e.labelUnmatchedScopes--,-1;for(e.pos=t+1,e.isInLabel=!0,r=1;e.pos<i;){if(91===(o=e.src.charCodeAt(e.pos)))r++;else if(93===o&&0===--r){n=!0;break}e.parser.skipToken(e)}return n?(s=e.pos,e.labelUnmatchedScopes=0):e.labelUnmatchedScopes=r-1,e.pos=a,e.isInLabel=u,s}function _(e,t,r,n){var o,s,i,a,u,l;if(42!==e.charCodeAt(0))return-1;if(91!==e.charCodeAt(1))return-1;if(-1===e.indexOf(\\\"]:\\\"))return-1;if((s=D(o=new E(e,t,r,n,[]),1))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&10!==o.src.charCodeAt(i);i++);return u=e.slice(2,s),0===(l=e.slice(s+2,i).trim()).length?-1:(n.abbreviations||(n.abbreviations={}),void 0===n.abbreviations[\\\":\\\"+u]&&(n.abbreviations[\\\":\\\"+u]=l),i)}function B(e){var t=g(e);try{t=decodeURI(t)}catch(e){}return encodeURI(t)}function q(e,t){var r,n,o,s=t,i=e.posMax;if(60===e.src.charCodeAt(t)){for(t++;t<i;){if(10===(r=e.src.charCodeAt(t)))return!1;if(62===r)return o=B(u(e.src.slice(s+1,t))),!!e.parser.validateLink(o)&&(e.pos=t+1,e.linkContent=o,!0);92===r&&t+1<i?t+=2:t++}return!1}for(n=0;t<i&&32!==(r=e.src.charCodeAt(t))&&!(r<32||127===r);)if(92===r&&t+1<i)t+=2;else{if(40===r&&++n>1)break;if(41===r&&--n<0)break;t++}return s!==t&&(o=u(e.src.slice(s,t)),!!e.parser.validateLink(o)&&(e.linkContent=o,e.pos=t,!0))}function F(e,t){var r,n=t,o=e.posMax,s=e.src.charCodeAt(t);if(34!==s&&39!==s&&40!==s)return!1;for(t++,40===s&&(s=41);t<o;){if((r=e.src.charCodeAt(t))===s)return e.pos=t+1,e.linkContent=u(e.src.slice(n+1,t)),!0;92===r&&t+1<o?t+=2:t++}return!1}function M(e){return e.trim().replace(/\\\\s+/g,\\\" \\\").toUpperCase()}function S(e,t,r,n){var o,s,i,a,u,l,c,p,h;if(91!==e.charCodeAt(0))return-1;if(-1===e.indexOf(\\\"]:\\\"))return-1;if((s=D(o=new E(e,t,r,n,[]),0))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&(32===(u=o.src.charCodeAt(i))||10===u);i++);if(!q(o,i))return-1;for(c=o.linkContent,l=i=o.pos,i+=1;i<a&&(32===(u=o.src.charCodeAt(i))||10===u);i++);for(i<a&&l!==i&&F(o,i)?(p=o.linkContent,i=o.pos):(p=\\\"\\\",i=l);i<a&&32===o.src.charCodeAt(i);)i++;return i<a&&10!==o.src.charCodeAt(i)?-1:(h=M(e.slice(1,s)),void 0===n.references[h]&&(n.references[h]={title:p,href:c}),i)}w.prototype.renderInline=function(e,t,r){for(var n=this.rules,o=e.length,s=0,i=\\\"\\\";o--;)i+=n[e[s].type](e,s++,t,r,this);return i},w.prototype.render=function(e,t,r){for(var n=this.rules,o=e.length,s=-1,i=\\\"\\\";++s<o;)\\\"inline\\\"===e[s].type?i+=this.renderInline(e[s].children,t,r):i+=n[e[s].type](e,s,t,r,this);return i},C.prototype.__find__=function(e){for(var t=this.__rules__.length,r=-1;t--;)if(this.__rules__[++r].name===e)return r;return-1},C.prototype.__compile__=function(){var e=this,t=[\\\"\\\"];e.__rules__.forEach(function(e){e.enabled&&e.alt.forEach(function(e){t.indexOf(e)<0&&t.push(e)})}),e.__cache__={},t.forEach(function(t){e.__cache__[t]=[],e.__rules__.forEach(function(r){r.enabled&&(t&&r.alt.indexOf(t)<0||e.__cache__[t].push(r.fn))})})},C.prototype.at=function(e,t,r){var n=this.__find__(e),o=r||{};if(-1===n)throw new Error(\\\"Parser rule not found: \\\"+e);this.__rules__[n].fn=t,this.__rules__[n].alt=o.alt||[],this.__cache__=null},C.prototype.before=function(e,t,r,n){var o=this.__find__(e),s=n||{};if(-1===o)throw new Error(\\\"Parser rule not found: \\\"+e);this.__rules__.splice(o,0,{name:t,enabled:!0,fn:r,alt:s.alt||[]}),this.__cache__=null},C.prototype.after=function(e,t,r,n){var o=this.__find__(e),s=n||{};if(-1===o)throw new Error(\\\"Parser rule not found: \\\"+e);this.__rules__.splice(o+1,0,{name:t,enabled:!0,fn:r,alt:s.alt||[]}),this.__cache__=null},C.prototype.push=function(e,t,r){var n=r||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:n.alt||[]}),this.__cache__=null},C.prototype.enable=function(e,t){e=Array.isArray(e)?e:[e],t&&this.__rules__.forEach(function(e){e.enabled=!1}),e.forEach(function(e){var t=this.__find__(e);if(t<0)throw new Error(\\\"Rules manager: invalid rule name \\\"+e);this.__rules__[t].enabled=!0},this),this.__cache__=null},C.prototype.disable=function(e){(e=Array.isArray(e)?e:[e]).forEach(function(e){var t=this.__find__(e);if(t<0)throw new Error(\\\"Rules manager: invalid rule name \\\"+e);this.__rules__[t].enabled=!1},this),this.__cache__=null},C.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]},E.prototype.pushPending=function(){this.tokens.push({type:\\\"text\\\",content:this.pending,level:this.pendingLevel}),this.pending=\\\"\\\"},E.prototype.push=function(e){this.pending&&this.pushPending(),this.tokens.push(e),this.pendingLevel=this.level},E.prototype.cacheSet=function(e,t){for(var r=this.cache.length;r<=e;r++)this.cache.push(0);this.cache[e]=t},E.prototype.cacheGet=function(e){return e<this.cache.length?this.cache[e]:0};var T=\\\" \\\\n()[]'\\\\\\\".,!?-\\\";function L(e){return e.replace(/([-()\\\\[\\\\]{}+?*.$\\\\^|,:#<!\\\\\\\\])/g,\\\"\\\\\\\\$1\\\")}var R=/\\\\+-|\\\\.\\\\.|\\\\?\\\\?\\\\?\\\\?|!!!!|,,|--/,N=/\\\\((c|tm|r|p)\\\\)/gi,z={c:\\\"©\\\",r:\\\"®\\\",p:\\\"§\\\",tm:\\\"™\\\"};var P=/['\\\"]/,j=/['\\\"]/g,I=/[-\\\\s()\\\\[\\\\]]/,O=\\\"’\\\";function U(e,t){return!(t<0||t>=e.length)&&!I.test(e[t])}function H(e,t,r){return e.substr(0,t)+r+e.substr(t+1)}var V=[[\\\"block\\\",function(e){e.inlineMode?e.tokens.push({type:\\\"inline\\\",content:e.src.replace(/\\\\n/g,\\\" \\\").trim(),level:0,lines:[0,1],children:[]}):e.block.parse(e.src,e.options,e.env,e.tokens)}],[\\\"abbr\\\",function(e){var t,r,n,o,s=e.tokens;if(!e.inlineMode)for(t=1,r=s.length-1;t<r;t++)if(\\\"paragraph_open\\\"===s[t-1].type&&\\\"inline\\\"===s[t].type&&\\\"paragraph_close\\\"===s[t+1].type){for(n=s[t].content;n.length&&!((o=_(n,e.inline,e.options,e.env))<0);)n=n.slice(o).trim();s[t].content=n,n.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\\\"references\\\",function(e){var t,r,n,o,s=e.tokens;if(e.env.references=e.env.references||{},!e.inlineMode)for(t=1,r=s.length-1;t<r;t++)if(\\\"inline\\\"===s[t].type&&\\\"paragraph_open\\\"===s[t-1].type&&\\\"paragraph_close\\\"===s[t+1].type){for(n=s[t].content;n.length&&!((o=S(n,e.inline,e.options,e.env))<0);)n=n.slice(o).trim();s[t].content=n,n.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\\\"inline\\\",function(e){var t,r,n,o=e.tokens;for(r=0,n=o.length;r<n;r++)\\\"inline\\\"===(t=o[r]).type&&e.inline.parse(t.content,e.options,e.env,t.children)}],[\\\"footnote_tail\\\",function(e){var t,r,n,o,s,i,a,u,l,c=0,p=!1,h={};if(e.env.footnotes&&(e.tokens=e.tokens.filter(function(e){return\\\"footnote_reference_open\\\"===e.type?(p=!0,u=[],l=e.label,!1):\\\"footnote_reference_close\\\"===e.type?(p=!1,h[\\\":\\\"+l]=u,!1):(p&&u.push(e),!p)}),e.env.footnotes.list)){for(i=e.env.footnotes.list,e.tokens.push({type:\\\"footnote_block_open\\\",level:c++}),t=0,r=i.length;t<r;t++){for(e.tokens.push({type:\\\"footnote_open\\\",id:t,level:c++}),i[t].tokens?((a=[]).push({type:\\\"paragraph_open\\\",tight:!1,level:c++}),a.push({type:\\\"inline\\\",content:\\\"\\\",level:c,children:i[t].tokens}),a.push({type:\\\"paragraph_close\\\",tight:!1,level:--c})):i[t].label&&(a=h[\\\":\\\"+i[t].label]),e.tokens=e.tokens.concat(a),s=\\\"paragraph_close\\\"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null,o=i[t].count>0?i[t].count:1,n=0;n<o;n++)e.tokens.push({type:\\\"footnote_anchor\\\",id:t,subId:n,level:c});s&&e.tokens.push(s),e.tokens.push({type:\\\"footnote_close\\\",level:--c})}e.tokens.push({type:\\\"footnote_block_close\\\",level:--c})}}],[\\\"abbr2\\\",function(e){var t,r,n,o,s,i,a,u,l,c,p,h,f=e.tokens;if(e.env.abbreviations)for(e.env.abbrRegExp||(h=\\\"(^|[\\\"+T.split(\\\"\\\").map(L).join(\\\"\\\")+\\\"])(\\\"+Object.keys(e.env.abbreviations).map(function(e){return e.substr(1)}).sort(function(e,t){return t.length-e.length}).map(L).join(\\\"|\\\")+\\\")($|[\\\"+T.split(\\\"\\\").map(L).join(\\\"\\\")+\\\"])\\\",e.env.abbrRegExp=new RegExp(h,\\\"g\\\")),c=e.env.abbrRegExp,r=0,n=f.length;r<n;r++)if(\\\"inline\\\"===f[r].type)for(t=(o=f[r].children).length-1;t>=0;t--)if(\\\"text\\\"===(s=o[t]).type){for(u=0,i=s.content,c.lastIndex=0,l=s.level,a=[];p=c.exec(i);)c.lastIndex>u&&a.push({type:\\\"text\\\",content:i.slice(u,p.index+p[1].length),level:l}),a.push({type:\\\"abbr_open\\\",title:e.env.abbreviations[\\\":\\\"+p[2]],level:l++}),a.push({type:\\\"text\\\",content:p[2],level:l}),a.push({type:\\\"abbr_close\\\",level:--l}),u=c.lastIndex-p[3].length;a.length&&(u<i.length&&a.push({type:\\\"text\\\",content:i.slice(u),level:l}),f[r].children=o=[].concat(o.slice(0,t),a,o.slice(t+1)))}}],[\\\"replacements\\\",function(e){var t,r,n,o,s,i;if(e.options.typographer)for(s=e.tokens.length-1;s>=0;s--)if(\\\"inline\\\"===e.tokens[s].type)for(t=(o=e.tokens[s].children).length-1;t>=0;t--)\\\"text\\\"===(r=o[t]).type&&(n=r.content,n=(i=n).indexOf(\\\"(\\\")<0?i:i.replace(N,function(e,t){return z[t.toLowerCase()]}),R.test(n)&&(n=n.replace(/\\\\+-/g,\\\"±\\\").replace(/\\\\.{2,}/g,\\\"…\\\").replace(/([?!])…/g,\\\"$1..\\\").replace(/([?!]){4,}/g,\\\"$1$1$1\\\").replace(/,{2,}/g,\\\",\\\").replace(/(^|[^-])---([^-]|$)/gm,\\\"$1—$2\\\").replace(/(^|\\\\s)--(\\\\s|$)/gm,\\\"$1–$2\\\").replace(/(^|[^-\\\\s])--([^-\\\\s]|$)/gm,\\\"$1–$2\\\")),r.content=n)}],[\\\"smartquotes\\\",function(e){var t,r,n,o,s,i,a,u,l,c,p,h,f,g,d,m,b;if(e.options.typographer)for(b=[],d=e.tokens.length-1;d>=0;d--)if(\\\"inline\\\"===e.tokens[d].type)for(m=e.tokens[d].children,b.length=0,t=0;t<m.length;t++)if(\\\"text\\\"===(r=m[t]).type&&!P.test(r.text)){for(a=m[t].level,f=b.length-1;f>=0&&!(b[f].level<=a);f--);b.length=f+1,s=0,i=(n=r.content).length;e:for(;s<i&&(j.lastIndex=s,o=j.exec(n));)if(u=!U(n,o.index-1),s=o.index+1,g=\\\"'\\\"===o[0],(l=!U(n,s))||u){if(p=!l,h=!u)for(f=b.length-1;f>=0&&(c=b[f],!(b[f].level<a));f--)if(c.single===g&&b[f].level===a){c=b[f],g?(m[c.token].content=H(m[c.token].content,c.pos,e.options.quotes[2]),r.content=H(r.content,o.index,e.options.quotes[3])):(m[c.token].content=H(m[c.token].content,c.pos,e.options.quotes[0]),r.content=H(r.content,o.index,e.options.quotes[1])),b.length=f;continue e}p?b.push({token:t,pos:o.index,single:g,level:a}):h&&g&&(r.content=H(r.content,o.index,O))}else g&&(r.content=H(r.content,o.index,O))}}]];function G(){this.options={},this.ruler=new C;for(var e=0;e<V.length;e++)this.ruler.push(V[e][0],V[e][1])}function $(e,t,r,n,o){var s,i,a,u,l,c,p;for(this.src=e,this.parser=t,this.options=r,this.env=n,this.tokens=o,this.bMarks=[],this.eMarks=[],this.tShift=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.parentType=\\\"root\\\",this.ddIndent=-1,this.level=0,this.result=\\\"\\\",c=0,p=!1,a=u=c=0,l=(i=this.src).length;u<l;u++){if(s=i.charCodeAt(u),!p){if(32===s){c++;continue}p=!0}10!==s&&u!==l-1||(10!==s&&u++,this.bMarks.push(a),this.eMarks.push(u),this.tShift.push(c),p=!1,c=0,a=u+1)}this.bMarks.push(i.length),this.eMarks.push(i.length),this.tShift.push(0),this.lineMax=this.bMarks.length-1}function Z(e,t){var r,n,o;return(n=e.bMarks[t]+e.tShift[t])>=(o=e.eMarks[t])?-1:42!==(r=e.src.charCodeAt(n++))&&45!==r&&43!==r?-1:n<o&&32!==e.src.charCodeAt(n)?-1:n}function W(e,t){var r,n=e.bMarks[t]+e.tShift[t],o=e.eMarks[t];if(n+1>=o)return-1;if((r=e.src.charCodeAt(n++))<48||r>57)return-1;for(;;){if(n>=o)return-1;if(!((r=e.src.charCodeAt(n++))>=48&&r<=57)){if(41===r||46===r)break;return-1}}return n<o&&32!==e.src.charCodeAt(n)?-1:n}G.prototype.process=function(e){var t,r,n;for(t=0,r=(n=this.ruler.getRules(\\\"\\\")).length;t<r;t++)n[t](e)},$.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},$.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},$.prototype.skipSpaces=function(e){for(var t=this.src.length;e<t&&32===this.src.charCodeAt(e);e++);return e},$.prototype.skipChars=function(e,t){for(var r=this.src.length;e<r&&this.src.charCodeAt(e)===t;e++);return e},$.prototype.skipCharsBack=function(e,t,r){if(e<=r)return e;for(;e>r;)if(t!==this.src.charCodeAt(--e))return e+1;return e},$.prototype.getLines=function(e,t,r,n){var o,s,i,a,u,l=e;if(e>=t)return\\\"\\\";if(l+1===t)return s=this.bMarks[l]+Math.min(this.tShift[l],r),i=n?this.eMarks[l]+1:this.eMarks[l],this.src.slice(s,i);for(a=new Array(t-e),o=0;l<t;l++,o++)(u=this.tShift[l])>r&&(u=r),u<0&&(u=0),s=this.bMarks[l]+u,i=l+1<t||n?this.eMarks[l]+1:this.eMarks[l],a[o]=this.src.slice(s,i);return a.join(\\\"\\\")};var J={};[\\\"article\\\",\\\"aside\\\",\\\"button\\\",\\\"blockquote\\\",\\\"body\\\",\\\"canvas\\\",\\\"caption\\\",\\\"col\\\",\\\"colgroup\\\",\\\"dd\\\",\\\"div\\\",\\\"dl\\\",\\\"dt\\\",\\\"embed\\\",\\\"fieldset\\\",\\\"figcaption\\\",\\\"figure\\\",\\\"footer\\\",\\\"form\\\",\\\"h1\\\",\\\"h2\\\",\\\"h3\\\",\\\"h4\\\",\\\"h5\\\",\\\"h6\\\",\\\"header\\\",\\\"hgroup\\\",\\\"hr\\\",\\\"iframe\\\",\\\"li\\\",\\\"map\\\",\\\"object\\\",\\\"ol\\\",\\\"output\\\",\\\"p\\\",\\\"pre\\\",\\\"progress\\\",\\\"script\\\",\\\"section\\\",\\\"style\\\",\\\"table\\\",\\\"tbody\\\",\\\"td\\\",\\\"textarea\\\",\\\"tfoot\\\",\\\"th\\\",\\\"tr\\\",\\\"thead\\\",\\\"ul\\\",\\\"video\\\"].forEach(function(e){J[e]=!0});var Y=/^<([a-zA-Z]{1,15})[\\\\s\\\\/>]/,K=/^<\\\\/([a-zA-Z]{1,15})[\\\\s>]/;function Q(e,t){var r=e.bMarks[t]+e.blkIndent,n=e.eMarks[t];return e.src.substr(r,n-r)}function X(e,t){var r,n,o=e.bMarks[t]+e.tShift[t],s=e.eMarks[t];return o>=s?-1:126!==(n=e.src.charCodeAt(o++))&&58!==n?-1:o===(r=e.skipSpaces(o))?-1:r>=s?-1:r}var ee=[[\\\"code\\\",function(e,t,r){var n,o;if(e.tShift[t]-e.blkIndent<4)return!1;for(o=n=t+1;n<r;)if(e.isEmpty(n))n++;else{if(!(e.tShift[n]-e.blkIndent>=4))break;o=++n}return e.line=n,e.tokens.push({type:\\\"code\\\",content:e.getLines(t,o,4+e.blkIndent,!0),block:!0,lines:[t,e.line],level:e.level}),!0}],[\\\"fences\\\",function(e,t,r,n){var o,s,i,a,u,l=!1,c=e.bMarks[t]+e.tShift[t],p=e.eMarks[t];if(c+3>p)return!1;if(126!==(o=e.src.charCodeAt(c))&&96!==o)return!1;if(u=c,(s=(c=e.skipChars(c,o))-u)<3)return!1;if((i=e.src.slice(c,p).trim()).indexOf(\\\"`\\\")>=0)return!1;if(n)return!0;for(a=t;!(++a>=r||(c=u=e.bMarks[a]+e.tShift[a])<(p=e.eMarks[a])&&e.tShift[a]<e.blkIndent);)if(e.src.charCodeAt(c)===o&&!(e.tShift[a]-e.blkIndent>=4||(c=e.skipChars(c,o))-u<s||(c=e.skipSpaces(c))<p)){l=!0;break}return s=e.tShift[t],e.line=a+(l?1:0),e.tokens.push({type:\\\"fence\\\",params:i,content:e.getLines(t+1,a,s,!0),lines:[t,e.line],level:e.level}),!0},[\\\"paragraph\\\",\\\"blockquote\\\",\\\"list\\\"]],[\\\"blockquote\\\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d=e.bMarks[t]+e.tShift[t],m=e.eMarks[t];if(d>m)return!1;if(62!==e.src.charCodeAt(d++))return!1;if(e.level>=e.options.maxNesting)return!1;if(n)return!0;for(32===e.src.charCodeAt(d)&&d++,u=e.blkIndent,e.blkIndent=0,a=[e.bMarks[t]],e.bMarks[t]=d,s=(d=d<m?e.skipSpaces(d):d)>=m,i=[e.tShift[t]],e.tShift[t]=d-e.bMarks[t],p=e.parser.ruler.getRules(\\\"blockquote\\\"),o=t+1;o<r&&!((d=e.bMarks[o]+e.tShift[o])>=(m=e.eMarks[o]));o++)if(62!==e.src.charCodeAt(d++)){if(s)break;for(g=!1,h=0,f=p.length;h<f;h++)if(p[h](e,o,r,!0)){g=!0;break}if(g)break;a.push(e.bMarks[o]),i.push(e.tShift[o]),e.tShift[o]=-1337}else 32===e.src.charCodeAt(d)&&d++,a.push(e.bMarks[o]),e.bMarks[o]=d,s=(d=d<m?e.skipSpaces(d):d)>=m,i.push(e.tShift[o]),e.tShift[o]=d-e.bMarks[o];for(l=e.parentType,e.parentType=\\\"blockquote\\\",e.tokens.push({type:\\\"blockquote_open\\\",lines:c=[t,0],level:e.level++}),e.parser.tokenize(e,t,o),e.tokens.push({type:\\\"blockquote_close\\\",level:--e.level}),e.parentType=l,c[1]=e.line,h=0;h<i.length;h++)e.bMarks[h+t]=a[h],e.tShift[h+t]=i[h];return e.blkIndent=u,!0},[\\\"paragraph\\\",\\\"blockquote\\\",\\\"list\\\"]],[\\\"hr\\\",function(e,t,r,n){var o,s,i,a=e.bMarks[t],u=e.eMarks[t];if((a+=e.tShift[t])>u)return!1;if(42!==(o=e.src.charCodeAt(a++))&&45!==o&&95!==o)return!1;for(s=1;a<u;){if((i=e.src.charCodeAt(a++))!==o&&32!==i)return!1;i===o&&s++}return!(s<3||!n&&(e.line=t+1,e.tokens.push({type:\\\"hr\\\",lines:[t,e.line],level:e.level}),0))},[\\\"paragraph\\\",\\\"blockquote\\\",\\\"list\\\"]],[\\\"list\\\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d,m,b,v,k,A,y,x,w,C,E=!0;if((p=W(e,t))>=0)d=!0;else{if(!((p=Z(e,t))>=0))return!1;d=!1}if(e.level>=e.options.maxNesting)return!1;if(g=e.src.charCodeAt(p-1),n)return!0;for(b=e.tokens.length,d?(c=e.bMarks[t]+e.tShift[t],f=Number(e.src.substr(c,p-c-1)),e.tokens.push({type:\\\"ordered_list_open\\\",order:f,lines:k=[t,0],level:e.level++})):e.tokens.push({type:\\\"bullet_list_open\\\",lines:k=[t,0],level:e.level++}),o=t,v=!1,y=e.parser.ruler.getRules(\\\"list\\\");!(!(o<r)||((h=(m=e.skipSpaces(p))>=e.eMarks[o]?1:m-p)>4&&(h=1),h<1&&(h=1),s=p-e.bMarks[o]+h,e.tokens.push({type:\\\"list_item_open\\\",lines:A=[t,0],level:e.level++}),a=e.blkIndent,u=e.tight,i=e.tShift[t],l=e.parentType,e.tShift[t]=m-e.bMarks[t],e.blkIndent=s,e.tight=!0,e.parentType=\\\"list\\\",e.parser.tokenize(e,t,r,!0),e.tight&&!v||(E=!1),v=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=a,e.tShift[t]=i,e.tight=u,e.parentType=l,e.tokens.push({type:\\\"list_item_close\\\",level:--e.level}),o=t=e.line,A[1]=o,m=e.bMarks[t],o>=r)||e.isEmpty(o)||e.tShift[o]<e.blkIndent);){for(C=!1,x=0,w=y.length;x<w;x++)if(y[x](e,o,r,!0)){C=!0;break}if(C)break;if(d){if((p=W(e,o))<0)break}else if((p=Z(e,o))<0)break;if(g!==e.src.charCodeAt(p-1))break}return e.tokens.push({type:d?\\\"ordered_list_close\\\":\\\"bullet_list_close\\\",level:--e.level}),k[1]=o,e.line=o,E&&function(e,t){var r,n,o=e.level+2;for(r=t+2,n=e.tokens.length-2;r<n;r++)e.tokens[r].level===o&&\\\"paragraph_open\\\"===e.tokens[r].type&&(e.tokens[r+2].tight=!0,e.tokens[r].tight=!0,r+=2)}(e,b),!0},[\\\"paragraph\\\",\\\"blockquote\\\"]],[\\\"footnote\\\",function(e,t,r,n){var o,s,i,a,u,l=e.bMarks[t]+e.tShift[t],c=e.eMarks[t];if(l+4>c)return!1;if(91!==e.src.charCodeAt(l))return!1;if(94!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(a=l+2;a<c;a++){if(32===e.src.charCodeAt(a))return!1;if(93===e.src.charCodeAt(a))break}return!(a===l+2||a+1>=c||58!==e.src.charCodeAt(++a)||!n&&(a++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),u=e.src.slice(l+2,a-2),e.env.footnotes.refs[\\\":\\\"+u]=-1,e.tokens.push({type:\\\"footnote_reference_open\\\",label:u,level:e.level++}),o=e.bMarks[t],s=e.tShift[t],i=e.parentType,e.tShift[t]=e.skipSpaces(a)-a,e.bMarks[t]=a,e.blkIndent+=4,e.parentType=\\\"footnote\\\",e.tShift[t]<e.blkIndent&&(e.tShift[t]+=e.blkIndent,e.bMarks[t]-=e.blkIndent),e.parser.tokenize(e,t,r,!0),e.parentType=i,e.blkIndent-=4,e.tShift[t]=s,e.bMarks[t]=o,e.tokens.push({type:\\\"footnote_reference_close\\\",level:--e.level}),0))},[\\\"paragraph\\\"]],[\\\"heading\\\",function(e,t,r,n){var o,s,i,a=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(a>=u)return!1;if(35!==(o=e.src.charCodeAt(a))||a>=u)return!1;for(s=1,o=e.src.charCodeAt(++a);35===o&&a<u&&s<=6;)s++,o=e.src.charCodeAt(++a);return!(s>6||a<u&&32!==o||!n&&(u=e.skipCharsBack(u,32,a),(i=e.skipCharsBack(u,35,a))>a&&32===e.src.charCodeAt(i-1)&&(u=i),e.line=t+1,e.tokens.push({type:\\\"heading_open\\\",hLevel:s,lines:[t,e.line],level:e.level}),a<u&&e.tokens.push({type:\\\"inline\\\",content:e.src.slice(a,u).trim(),level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\\\"heading_close\\\",hLevel:s,level:e.level}),0))},[\\\"paragraph\\\",\\\"blockquote\\\"]],[\\\"lheading\\\",function(e,t,r){var n,o,s,i=t+1;return!(i>=r||e.tShift[i]<e.blkIndent||e.tShift[i]-e.blkIndent>3||(o=e.bMarks[i]+e.tShift[i])>=(s=e.eMarks[i])||45!==(n=e.src.charCodeAt(o))&&61!==n||(o=e.skipChars(o,n),(o=e.skipSpaces(o))<s||(o=e.bMarks[t]+e.tShift[t],e.line=i+1,e.tokens.push({type:\\\"heading_open\\\",hLevel:61===n?1:2,lines:[t,e.line],level:e.level}),e.tokens.push({type:\\\"inline\\\",content:e.src.slice(o,e.eMarks[t]).trim(),level:e.level+1,lines:[t,e.line-1],children:[]}),e.tokens.push({type:\\\"heading_close\\\",hLevel:61===n?1:2,level:e.level}),0)))}],[\\\"htmlblock\\\",function(e,t,r,n){var o,s,i,a=e.bMarks[t],u=e.eMarks[t],l=e.tShift[t];if(a+=l,!e.options.html)return!1;if(l>3||a+2>=u)return!1;if(60!==e.src.charCodeAt(a))return!1;if(33===(o=e.src.charCodeAt(a+1))||63===o){if(n)return!0}else{if(47!==o&&!function(e){var t=32|e;return t>=97&&t<=122}(o))return!1;if(47===o){if(!(s=e.src.slice(a,u).match(K)))return!1}else if(!(s=e.src.slice(a,u).match(Y)))return!1;if(!0!==J[s[1].toLowerCase()])return!1;if(n)return!0}for(i=t+1;i<e.lineMax&&!e.isEmpty(i);)i++;return e.line=i,e.tokens.push({type:\\\"htmlblock\\\",level:e.level,lines:[t,e.line],content:e.getLines(t,i,0,!0)}),!0},[\\\"paragraph\\\",\\\"blockquote\\\"]],[\\\"table\\\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g;if(t+2>r)return!1;if(u=t+1,e.tShift[u]<e.blkIndent)return!1;if((i=e.bMarks[u]+e.tShift[u])>=e.eMarks[u])return!1;if(124!==(o=e.src.charCodeAt(i))&&45!==o&&58!==o)return!1;if(s=Q(e,t+1),!/^[-:| ]+$/.test(s))return!1;if((l=s.split(\\\"|\\\"))<=2)return!1;for(p=[],a=0;a<l.length;a++){if(!(h=l[a].trim())){if(0===a||a===l.length-1)continue;return!1}if(!/^:?-+:?$/.test(h))return!1;58===h.charCodeAt(h.length-1)?p.push(58===h.charCodeAt(0)?\\\"center\\\":\\\"right\\\"):58===h.charCodeAt(0)?p.push(\\\"left\\\"):p.push(\\\"\\\")}if(-1===(s=Q(e,t).trim()).indexOf(\\\"|\\\"))return!1;if(l=s.replace(/^\\\\||\\\\|$/g,\\\"\\\").split(\\\"|\\\"),p.length!==l.length)return!1;if(n)return!0;for(e.tokens.push({type:\\\"table_open\\\",lines:f=[t,0],level:e.level++}),e.tokens.push({type:\\\"thead_open\\\",lines:[t,t+1],level:e.level++}),e.tokens.push({type:\\\"tr_open\\\",lines:[t,t+1],level:e.level++}),a=0;a<l.length;a++)e.tokens.push({type:\\\"th_open\\\",align:p[a],lines:[t,t+1],level:e.level++}),e.tokens.push({type:\\\"inline\\\",content:l[a].trim(),lines:[t,t+1],level:e.level,children:[]}),e.tokens.push({type:\\\"th_close\\\",level:--e.level});for(e.tokens.push({type:\\\"tr_close\\\",level:--e.level}),e.tokens.push({type:\\\"thead_close\\\",level:--e.level}),e.tokens.push({type:\\\"tbody_open\\\",lines:g=[t+2,0],level:e.level++}),u=t+2;u<r&&!(e.tShift[u]<e.blkIndent)&&-1!==(s=Q(e,u).trim()).indexOf(\\\"|\\\");u++){for(l=s.replace(/^\\\\||\\\\|$/g,\\\"\\\").split(\\\"|\\\"),e.tokens.push({type:\\\"tr_open\\\",level:e.level++}),a=0;a<l.length;a++)e.tokens.push({type:\\\"td_open\\\",align:p[a],level:e.level++}),c=l[a].substring(124===l[a].charCodeAt(0)?1:0,124===l[a].charCodeAt(l[a].length-1)?l[a].length-1:l[a].length).trim(),e.tokens.push({type:\\\"inline\\\",content:c,level:e.level,children:[]}),e.tokens.push({type:\\\"td_close\\\",level:--e.level});e.tokens.push({type:\\\"tr_close\\\",level:--e.level})}return e.tokens.push({type:\\\"tbody_close\\\",level:--e.level}),e.tokens.push({type:\\\"table_close\\\",level:--e.level}),f[1]=g[1]=u,e.line=u,!0},[\\\"paragraph\\\"]],[\\\"deflist\\\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d,m,b;if(n)return!(e.ddIndent<0)&&X(e,t)>=0;if(c=t+1,e.isEmpty(c)&&++c>r)return!1;if(e.tShift[c]<e.blkIndent)return!1;if((o=X(e,c))<0)return!1;if(e.level>=e.options.maxNesting)return!1;l=e.tokens.length,e.tokens.push({type:\\\"dl_open\\\",lines:u=[t,0],level:e.level++}),i=t,s=c;e:for(;;){for(b=!0,m=!1,e.tokens.push({type:\\\"dt_open\\\",lines:[i,i],level:e.level++}),e.tokens.push({type:\\\"inline\\\",content:e.getLines(i,i+1,e.blkIndent,!1).trim(),level:e.level+1,lines:[i,i],children:[]}),e.tokens.push({type:\\\"dt_close\\\",level:--e.level});;){if(e.tokens.push({type:\\\"dd_open\\\",lines:a=[c,0],level:e.level++}),d=e.tight,h=e.ddIndent,p=e.blkIndent,g=e.tShift[s],f=e.parentType,e.blkIndent=e.ddIndent=e.tShift[s]+2,e.tShift[s]=o-e.bMarks[s],e.tight=!0,e.parentType=\\\"deflist\\\",e.parser.tokenize(e,s,r,!0),e.tight&&!m||(b=!1),m=e.line-s>1&&e.isEmpty(e.line-1),e.tShift[s]=g,e.tight=d,e.parentType=f,e.blkIndent=p,e.ddIndent=h,e.tokens.push({type:\\\"dd_close\\\",level:--e.level}),a[1]=c=e.line,c>=r)break e;if(e.tShift[c]<e.blkIndent)break e;if((o=X(e,c))<0)break;s=c}if(c>=r)break;if(i=c,e.isEmpty(i))break;if(e.tShift[i]<e.blkIndent)break;if((s=i+1)>=r)break;if(e.isEmpty(s)&&s++,s>=r)break;if(e.tShift[s]<e.blkIndent)break;if((o=X(e,s))<0)break}return e.tokens.push({type:\\\"dl_close\\\",level:--e.level}),u[1]=c,e.line=c,b&&function(e,t){var r,n,o=e.level+2;for(r=t+2,n=e.tokens.length-2;r<n;r++)e.tokens[r].level===o&&\\\"paragraph_open\\\"===e.tokens[r].type&&(e.tokens[r+2].tight=!0,e.tokens[r].tight=!0,r+=2)}(e,l),!0},[\\\"paragraph\\\"]],[\\\"paragraph\\\",function(e,t){var r,n,o,s,i,a,u=t+1;if(u<(r=e.lineMax)&&!e.isEmpty(u))for(a=e.parser.ruler.getRules(\\\"paragraph\\\");u<r&&!e.isEmpty(u);u++)if(!(e.tShift[u]-e.blkIndent>3)){for(o=!1,s=0,i=a.length;s<i;s++)if(a[s](e,u,r,!0)){o=!0;break}if(o)break}return n=e.getLines(t,u,e.blkIndent,!1).trim(),e.line=u,n.length&&(e.tokens.push({type:\\\"paragraph_open\\\",tight:!1,lines:[t,e.line],level:e.level}),e.tokens.push({type:\\\"inline\\\",content:n,level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\\\"paragraph_close\\\",tight:!1,level:e.level})),!0}]];function te(){this.ruler=new C;for(var e=0;e<ee.length;e++)this.ruler.push(ee[e][0],ee[e][1],{alt:(ee[e][2]||[]).slice()})}te.prototype.tokenize=function(e,t,r){for(var n,o=this.ruler.getRules(\\\"\\\"),s=o.length,i=t,a=!1;i<r&&(e.line=i=e.skipEmptyLines(i),!(i>=r))&&!(e.tShift[i]<e.blkIndent);){for(n=0;n<s&&!o[n](e,i,r,!1);n++);if(e.tight=!a,e.isEmpty(e.line-1)&&(a=!0),(i=e.line)<r&&e.isEmpty(i)){if(a=!0,++i<r&&\\\"list\\\"===e.parentType&&e.isEmpty(i))break;e.line=i}}};var re=/[\\\\n\\\\t]/g,ne=/\\\\r[\\\\n\\\\u0085]|[\\\\u2424\\\\u2028\\\\u0085]/g,oe=/\\\\u00a0/g;function se(e){switch(e){case 10:case 92:case 96:case 42:case 95:case 94:case 91:case 93:case 33:case 38:case 60:case 62:case 123:case 125:case 36:case 37:case 64:case 126:case 43:case 61:case 58:return!0;default:return!1}}te.prototype.parse=function(e,t,r,n){var o,s=0,i=0;if(!e)return[];(e=(e=e.replace(oe,\\\" \\\")).replace(ne,\\\"\\\\n\\\")).indexOf(\\\"\\\\t\\\")>=0&&(e=e.replace(re,function(t,r){var n;return 10===e.charCodeAt(r)?(s=r+1,i=0,t):(n=\\\" \\\".slice((r-s-i)%4),i=r-s+1,n)})),o=new $(e,this,t,r,n),this.tokenize(o,o.line,o.lineMax)};for(var ie=[],ae=0;ae<256;ae++)ie.push(0);function ue(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function le(e,t){var r,n,o,s=t,i=!0,a=!0,u=e.posMax,l=e.src.charCodeAt(t);for(r=t>0?e.src.charCodeAt(t-1):-1;s<u&&e.src.charCodeAt(s)===l;)s++;return s>=u&&(i=!1),(o=s-t)>=4?i=a=!1:(32!==(n=s<u?e.src.charCodeAt(s):-1)&&10!==n||(i=!1),32!==r&&10!==r||(a=!1),95===l&&(ue(r)&&(i=!1),ue(n)&&(a=!1))),{can_open:i,can_close:a,delims:o}}\\\"\\\\\\\\!\\\\\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\\\".split(\\\"\\\").forEach(function(e){ie[e.charCodeAt(0)]=1});var ce=/\\\\\\\\([ \\\\\\\\!\\\"#$%&'()*+,.\\\\/:;<=>?@[\\\\]^_`{|}~-])/g;var pe=/\\\\\\\\([ \\\\\\\\!\\\"#$%&'()*+,.\\\\/:;<=>?@[\\\\]^_`{|}~-])/g;var he=[\\\"coap\\\",\\\"doi\\\",\\\"javascript\\\",\\\"aaa\\\",\\\"aaas\\\",\\\"about\\\",\\\"acap\\\",\\\"cap\\\",\\\"cid\\\",\\\"crid\\\",\\\"data\\\",\\\"dav\\\",\\\"dict\\\",\\\"dns\\\",\\\"file\\\",\\\"ftp\\\",\\\"geo\\\",\\\"go\\\",\\\"gopher\\\",\\\"h323\\\",\\\"http\\\",\\\"https\\\",\\\"iax\\\",\\\"icap\\\",\\\"im\\\",\\\"imap\\\",\\\"info\\\",\\\"ipp\\\",\\\"iris\\\",\\\"iris.beep\\\",\\\"iris.xpc\\\",\\\"iris.xpcs\\\",\\\"iris.lwz\\\",\\\"ldap\\\",\\\"mailto\\\",\\\"mid\\\",\\\"msrp\\\",\\\"msrps\\\",\\\"mtqp\\\",\\\"mupdate\\\",\\\"news\\\",\\\"nfs\\\",\\\"ni\\\",\\\"nih\\\",\\\"nntp\\\",\\\"opaquelocktoken\\\",\\\"pop\\\",\\\"pres\\\",\\\"rtsp\\\",\\\"service\\\",\\\"session\\\",\\\"shttp\\\",\\\"sieve\\\",\\\"sip\\\",\\\"sips\\\",\\\"sms\\\",\\\"snmp\\\",\\\"soap.beep\\\",\\\"soap.beeps\\\",\\\"tag\\\",\\\"tel\\\",\\\"telnet\\\",\\\"tftp\\\",\\\"thismessage\\\",\\\"tn3270\\\",\\\"tip\\\",\\\"tv\\\",\\\"urn\\\",\\\"vemmi\\\",\\\"ws\\\",\\\"wss\\\",\\\"xcon\\\",\\\"xcon-userid\\\",\\\"xmlrpc.beep\\\",\\\"xmlrpc.beeps\\\",\\\"xmpp\\\",\\\"z39.50r\\\",\\\"z39.50s\\\",\\\"adiumxtra\\\",\\\"afp\\\",\\\"afs\\\",\\\"aim\\\",\\\"apt\\\",\\\"attachment\\\",\\\"aw\\\",\\\"beshare\\\",\\\"bitcoin\\\",\\\"bolo\\\",\\\"callto\\\",\\\"chrome\\\",\\\"chrome-extension\\\",\\\"com-eventbrite-attendee\\\",\\\"content\\\",\\\"cvs\\\",\\\"dlna-playsingle\\\",\\\"dlna-playcontainer\\\",\\\"dtn\\\",\\\"dvb\\\",\\\"ed2k\\\",\\\"facetime\\\",\\\"feed\\\",\\\"finger\\\",\\\"fish\\\",\\\"gg\\\",\\\"git\\\",\\\"gizmoproject\\\",\\\"gtalk\\\",\\\"hcp\\\",\\\"icon\\\",\\\"ipn\\\",\\\"irc\\\",\\\"irc6\\\",\\\"ircs\\\",\\\"itms\\\",\\\"jar\\\",\\\"jms\\\",\\\"keyparc\\\",\\\"lastfm\\\",\\\"ldaps\\\",\\\"magnet\\\",\\\"maps\\\",\\\"market\\\",\\\"message\\\",\\\"mms\\\",\\\"ms-help\\\",\\\"msnim\\\",\\\"mumble\\\",\\\"mvn\\\",\\\"notes\\\",\\\"oid\\\",\\\"palm\\\",\\\"paparazzi\\\",\\\"platform\\\",\\\"proxy\\\",\\\"psyc\\\",\\\"query\\\",\\\"res\\\",\\\"resource\\\",\\\"rmi\\\",\\\"rsync\\\",\\\"rtmp\\\",\\\"secondlife\\\",\\\"sftp\\\",\\\"sgn\\\",\\\"skype\\\",\\\"smb\\\",\\\"soldat\\\",\\\"spotify\\\",\\\"ssh\\\",\\\"steam\\\",\\\"svn\\\",\\\"teamspeak\\\",\\\"things\\\",\\\"udp\\\",\\\"unreal\\\",\\\"ut2004\\\",\\\"ventrilo\\\",\\\"view-source\\\",\\\"webcal\\\",\\\"wtai\\\",\\\"wyciwyg\\\",\\\"xfire\\\",\\\"xri\\\",\\\"ymsgr\\\"],fe=/^<([a-zA-Z0-9.!#$%&'*+\\\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,ge=/^<([a-zA-Z.\\\\-]{1,25}):([^<>\\\\x00-\\\\x20]*)>/;function de(e,t){return e=e.source,t=t||\\\"\\\",function r(n,o){return n?(o=o.source||o,e=e.replace(n,o),r):new RegExp(e,t)}}var me=de(/(?:unquoted|single_quoted|double_quoted)/)(\\\"unquoted\\\",/[^\\\"'=<>`\\\\x00-\\\\x20]+/)(\\\"single_quoted\\\",/'[^']*'/)(\\\"double_quoted\\\",/\\\"[^\\\"]*\\\"/)(),be=de(/(?:\\\\s+attr_name(?:\\\\s*=\\\\s*attr_value)?)/)(\\\"attr_name\\\",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)(\\\"attr_value\\\",me)(),ve=de(/<[A-Za-z][A-Za-z0-9]*attribute*\\\\s*\\\\/?>/)(\\\"attribute\\\",be)(),ke=de(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)(\\\"open_tag\\\",ve)(\\\"close_tag\\\",/<\\\\/[A-Za-z][A-Za-z0-9]*\\\\s*>/)(\\\"comment\\\",/<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->/)(\\\"processing\\\",/<[?].*?[?]>/)(\\\"declaration\\\",/<![A-Z]+\\\\s+[^>]*>/)(\\\"cdata\\\",/<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>/)();var Ae=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,ye=/^&([a-z][a-z0-9]{1,31});/i;var xe=[[\\\"text\\\",function(e,t){for(var r=e.pos;r<e.posMax&&!se(e.src.charCodeAt(r));)r++;return r!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,r)),e.pos=r,!0)}],[\\\"newline\\\",function(e,t){var r,n,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;if(r=e.pending.length-1,n=e.posMax,!t)if(r>=0&&32===e.pending.charCodeAt(r))if(r>=1&&32===e.pending.charCodeAt(r-1)){for(var s=r-2;s>=0;s--)if(32!==e.pending.charCodeAt(s)){e.pending=e.pending.substring(0,s+1);break}e.push({type:\\\"hardbreak\\\",level:e.level})}else e.pending=e.pending.slice(0,-1),e.push({type:\\\"softbreak\\\",level:e.level});else e.push({type:\\\"softbreak\\\",level:e.level});for(o++;o<n&&32===e.src.charCodeAt(o);)o++;return e.pos=o,!0}],[\\\"escape\\\",function(e,t){var r,n=e.pos,o=e.posMax;if(92!==e.src.charCodeAt(n))return!1;if(++n<o){if((r=e.src.charCodeAt(n))<256&&0!==ie[r])return t||(e.pending+=e.src[n]),e.pos+=2,!0;if(10===r){for(t||e.push({type:\\\"hardbreak\\\",level:e.level}),n++;n<o&&32===e.src.charCodeAt(n);)n++;return e.pos=n,!0}}return t||(e.pending+=\\\"\\\\\\\\\\\"),e.pos++,!0}],[\\\"backticks\\\",function(e,t){var r,n,o,s,i,a=e.pos;if(96!==e.src.charCodeAt(a))return!1;for(r=a,a++,n=e.posMax;a<n&&96===e.src.charCodeAt(a);)a++;for(o=e.src.slice(r,a),s=i=a;-1!==(s=e.src.indexOf(\\\"`\\\",i));){for(i=s+1;i<n&&96===e.src.charCodeAt(i);)i++;if(i-s===o.length)return t||e.push({type:\\\"code\\\",content:e.src.slice(a,s).replace(/[ \\\\n]+/g,\\\" \\\").trim(),block:!1,level:e.level}),e.pos=i,!0}return t||(e.pending+=o),e.pos+=o.length,!0}],[\\\"del\\\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(126!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(126!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),126===s)return!1;if(126===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&126===e.src.charCodeAt(n);)n++;if(n>u+3)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(126===e.src.charCodeAt(e.pos)&&126===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),126!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&126!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\\\"del_open\\\",level:e.level++}),e.parser.tokenize(e),e.push({type:\\\"del_close\\\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\\\"ins\\\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(43!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(43!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),43===s)return!1;if(43===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&43===e.src.charCodeAt(n);)n++;if(n!==u+2)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(43===e.src.charCodeAt(e.pos)&&43===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),43!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&43!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\\\"ins_open\\\",level:e.level++}),e.parser.tokenize(e),e.push({type:\\\"ins_close\\\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\\\"mark\\\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(61!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(61!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),61===s)return!1;if(61===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&61===e.src.charCodeAt(n);)n++;if(n!==u+2)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(61===e.src.charCodeAt(e.pos)&&61===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),61!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&61!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\\\"mark_open\\\",level:e.level++}),e.parser.tokenize(e),e.push({type:\\\"mark_close\\\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\\\"emphasis\\\",function(e,t){var r,n,o,s,i,a,u,l=e.posMax,c=e.pos,p=e.src.charCodeAt(c);if(95!==p&&42!==p)return!1;if(t)return!1;if(r=(u=le(e,c)).delims,!u.can_open)return e.pos+=r,t||(e.pending+=e.src.slice(c,e.pos)),!0;if(e.level>=e.options.maxNesting)return!1;for(e.pos=c+r,a=[r];e.pos<l;)if(e.src.charCodeAt(e.pos)!==p)e.parser.skipToken(e);else{if(n=(u=le(e,e.pos)).delims,u.can_close){for(s=a.pop(),i=n;s!==i;){if(i<s){a.push(s-i);break}if(i-=s,0===a.length)break;e.pos+=s,s=a.pop()}if(0===a.length){r=s,o=!0;break}e.pos+=n;continue}u.can_open&&a.push(n),e.pos+=n}return o?(e.posMax=e.pos,e.pos=c+r,t||(2!==r&&3!==r||e.push({type:\\\"strong_open\\\",level:e.level++}),1!==r&&3!==r||e.push({type:\\\"em_open\\\",level:e.level++}),e.parser.tokenize(e),1!==r&&3!==r||e.push({type:\\\"em_close\\\",level:--e.level}),2!==r&&3!==r||e.push({type:\\\"strong_close\\\",level:--e.level})),e.pos=e.posMax+r,e.posMax=l,!0):(e.pos=c,!1)}],[\\\"sub\\\",function(e,t){var r,n,o=e.posMax,s=e.pos;if(126!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(126===e.src.charCodeAt(e.pos)){r=!0;break}e.parser.skipToken(e)}return r&&s+1!==e.pos?(n=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\\\\\])(\\\\\\\\\\\\\\\\)*\\\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\\\"sub\\\",level:e.level,content:n.replace(ce,\\\"$1\\\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\\\"sup\\\",function(e,t){var r,n,o=e.posMax,s=e.pos;if(94!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(94===e.src.charCodeAt(e.pos)){r=!0;break}e.parser.skipToken(e)}return r&&s+1!==e.pos?(n=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\\\\\])(\\\\\\\\\\\\\\\\)*\\\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\\\"sup\\\",level:e.level,content:n.replace(pe,\\\"$1\\\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\\\"links\\\",function(e,t){var r,n,o,s,i,a,u,l,c=!1,p=e.pos,h=e.posMax,f=e.pos,g=e.src.charCodeAt(f);if(33===g&&(c=!0,g=e.src.charCodeAt(++f)),91!==g)return!1;if(e.level>=e.options.maxNesting)return!1;if(r=f+1,(n=D(e,f))<0)return!1;if((a=n+1)<h&&40===e.src.charCodeAt(a)){for(a++;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a>=h)return!1;for(f=a,q(e,a)?(s=e.linkContent,a=e.pos):s=\\\"\\\",f=a;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a<h&&f!==a&&F(e,a))for(i=e.linkContent,a=e.pos;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);else i=\\\"\\\";if(a>=h||41!==e.src.charCodeAt(a))return e.pos=p,!1;a++}else{if(e.linkLevel>0)return!1;for(;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a<h&&91===e.src.charCodeAt(a)&&(f=a+1,(a=D(e,a))>=0?o=e.src.slice(f,a++):a=f-1),o||(void 0===o&&(a=n+1),o=e.src.slice(r,n)),!(u=e.env.references[M(o)]))return e.pos=p,!1;s=u.href,i=u.title}return t||(e.pos=r,e.posMax=n,c?e.push({type:\\\"image\\\",src:s,title:i,alt:e.src.substr(r,n-r),level:e.level}):(e.push({type:\\\"link_open\\\",href:s,title:i,level:e.level++}),e.linkLevel++,e.parser.tokenize(e),e.linkLevel--,e.push({type:\\\"link_close\\\",level:--e.level}))),e.pos=a,e.posMax=h,!0}],[\\\"footnote_inline\\\",function(e,t){var r,n,o,s,i=e.posMax,a=e.pos;return!(a+2>=i||94!==e.src.charCodeAt(a)||91!==e.src.charCodeAt(a+1)||e.level>=e.options.maxNesting||(r=a+2,(n=D(e,a+1))<0||(t||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),o=e.env.footnotes.list.length,e.pos=r,e.posMax=n,e.push({type:\\\"footnote_ref\\\",id:o,level:e.level}),e.linkLevel++,s=e.tokens.length,e.parser.tokenize(e),e.env.footnotes.list[o]={tokens:e.tokens.splice(s)},e.linkLevel--),e.pos=n+1,e.posMax=i,0)))}],[\\\"footnote_ref\\\",function(e,t){var r,n,o,s,i=e.posMax,a=e.pos;if(a+3>i)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(a))return!1;if(94!==e.src.charCodeAt(a+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(n=a+2;n<i;n++){if(32===e.src.charCodeAt(n))return!1;if(10===e.src.charCodeAt(n))return!1;if(93===e.src.charCodeAt(n))break}return!(n===a+2||n>=i||(n++,r=e.src.slice(a+2,n-1),void 0===e.env.footnotes.refs[\\\":\\\"+r]||(t||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[\\\":\\\"+r]<0?(o=e.env.footnotes.list.length,e.env.footnotes.list[o]={label:r,count:0},e.env.footnotes.refs[\\\":\\\"+r]=o):o=e.env.footnotes.refs[\\\":\\\"+r],s=e.env.footnotes.list[o].count,e.env.footnotes.list[o].count++,e.push({type:\\\"footnote_ref\\\",id:o,subId:s,level:e.level})),e.pos=n,e.posMax=i,0)))}],[\\\"autolink\\\",function(e,t){var r,n,o,s,i,a=e.pos;return!(60!==e.src.charCodeAt(a)||(r=e.src.slice(a)).indexOf(\\\">\\\")<0||((n=r.match(ge))?he.indexOf(n[1].toLowerCase())<0||(i=B(s=n[0].slice(1,-1)),!e.parser.validateLink(s)||(t||(e.push({type:\\\"link_open\\\",href:i,level:e.level}),e.push({type:\\\"text\\\",content:s,level:e.level+1}),e.push({type:\\\"link_close\\\",level:e.level})),e.pos+=n[0].length,0)):!(o=r.match(fe))||(i=B(\\\"mailto:\\\"+(s=o[0].slice(1,-1))),!e.parser.validateLink(i)||(t||(e.push({type:\\\"link_open\\\",href:i,level:e.level}),e.push({type:\\\"text\\\",content:s,level:e.level+1}),e.push({type:\\\"link_close\\\",level:e.level})),e.pos+=o[0].length,0))))}],[\\\"htmltag\\\",function(e,t){var r,n,o,s=e.pos;return!(!e.options.html||(o=e.posMax,60!==e.src.charCodeAt(s)||s+2>=o||33!==(r=e.src.charCodeAt(s+1))&&63!==r&&47!==r&&!function(e){var t=32|e;return t>=97&&t<=122}(r)||!(n=e.src.slice(s).match(ke))||(t||e.push({type:\\\"htmltag\\\",content:e.src.slice(s,s+n[0].length),level:e.level}),e.pos+=n[0].length,0)))}],[\\\"entity\\\",function(e,t){var r,o,s=e.pos,i=e.posMax;if(38!==e.src.charCodeAt(s))return!1;if(s+1<i)if(35===e.src.charCodeAt(s+1)){if(o=e.src.slice(s).match(Ae))return t||(r=\\\"x\\\"===o[1][0].toLowerCase()?parseInt(o[1].slice(1),16):parseInt(o[1],10),e.pending+=l(r)?c(r):c(65533)),e.pos+=o[0].length,!0}else if(o=e.src.slice(s).match(ye)){var a=n(o[1]);if(o[1]!==a)return t||(e.pending+=a),e.pos+=o[0].length,!0}return t||(e.pending+=\\\"&\\\"),e.pos++,!0}]];function we(){this.ruler=new C;for(var e=0;e<xe.length;e++)this.ruler.push(xe[e][0],xe[e][1]);this.validateLink=Ce}function Ce(e){var t=e.trim().toLowerCase();return-1===(t=g(t)).indexOf(\\\":\\\")||-1===[\\\"vbscript\\\",\\\"javascript\\\",\\\"file\\\",\\\"data\\\"].indexOf(t.split(\\\":\\\")[0])}we.prototype.skipToken=function(e){var t,r,n=this.ruler.getRules(\\\"\\\"),o=n.length,s=e.pos;if((r=e.cacheGet(s))>0)e.pos=r;else{for(t=0;t<o;t++)if(n[t](e,!0))return void e.cacheSet(s,e.pos);e.pos++,e.cacheSet(s,e.pos)}},we.prototype.tokenize=function(e){for(var t,r,n=this.ruler.getRules(\\\"\\\"),o=n.length,s=e.posMax;e.pos<s;){for(r=0;r<o&&!(t=n[r](e,!1));r++);if(t){if(e.pos>=s)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},we.prototype.parse=function(e,t,r,n){var o=new E(e,this,t,r,n);this.tokenize(o)};var Ee={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\\\"language-\\\",linkTarget:\\\"\\\",typographer:!1,quotes:\\\"“”‘’\\\",highlight:null,maxNesting:20},components:{core:{rules:[\\\"block\\\",\\\"inline\\\",\\\"references\\\",\\\"replacements\\\",\\\"smartquotes\\\",\\\"references\\\",\\\"abbr2\\\",\\\"footnote_tail\\\"]},block:{rules:[\\\"blockquote\\\",\\\"code\\\",\\\"fences\\\",\\\"footnote\\\",\\\"heading\\\",\\\"hr\\\",\\\"htmlblock\\\",\\\"lheading\\\",\\\"list\\\",\\\"paragraph\\\",\\\"table\\\"]},inline:{rules:[\\\"autolink\\\",\\\"backticks\\\",\\\"del\\\",\\\"emphasis\\\",\\\"entity\\\",\\\"escape\\\",\\\"footnote_ref\\\",\\\"htmltag\\\",\\\"links\\\",\\\"newline\\\",\\\"text\\\"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\\\"language-\\\",linkTarget:\\\"\\\",typographer:!1,quotes:\\\"“”‘’\\\",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:\\\"language-\\\",linkTarget:\\\"\\\",typographer:!1,quotes:\\\"“”‘’\\\",highlight:null,maxNesting:20},components:{core:{rules:[\\\"block\\\",\\\"inline\\\",\\\"references\\\",\\\"abbr2\\\"]},block:{rules:[\\\"blockquote\\\",\\\"code\\\",\\\"fences\\\",\\\"heading\\\",\\\"hr\\\",\\\"htmlblock\\\",\\\"lheading\\\",\\\"list\\\",\\\"paragraph\\\"]},inline:{rules:[\\\"autolink\\\",\\\"backticks\\\",\\\"emphasis\\\",\\\"entity\\\",\\\"escape\\\",\\\"htmltag\\\",\\\"links\\\",\\\"newline\\\",\\\"text\\\"]}}}};function De(e,t,r){this.src=t,this.env=r,this.options=e.options,this.tokens=[],this.inlineMode=!1,this.inline=e.inline,this.block=e.block,this.renderer=e.renderer,this.typographer=e.typographer}function _e(e,t){\\\"string\\\"!=typeof e&&(t=e,e=\\\"default\\\"),t&&null!=t.linkify&&console.warn(\\\"linkify option is removed. Use linkify plugin instead:\\\\n\\\\nimport Remarkable from 'remarkable';\\\\nimport linkify from 'remarkable/linkify';\\\\nnew Remarkable().use(linkify)\\\\n\\\"),this.inline=new we,this.block=new te,this.core=new G,this.renderer=new w,this.ruler=new C,this.options={},this.configure(Ee[e]),this.set(t||{})}function Be(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}function qe(e,t){for(var r=e.length-1;r>=0;r--)!0===t(e[r])&&e.splice(r,1)}function Fe(e){throw new Error(\\\"Unhandled case for value: '\\\"+e+\\\"'\\\")}_e.prototype.set=function(e){i(this.options,e)},_e.prototype.configure=function(e){var t=this;if(!e)throw new Error(\\\"Wrong `remarkable` preset, check name/content\\\");e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(r){e.components[r].rules&&t[r].ruler.enable(e.components[r].rules,!0)})},_e.prototype.use=function(e,t){return e(this,t),this},_e.prototype.parse=function(e,t){var r=new De(this,e,t);return this.core.process(r),r.tokens},_e.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},_e.prototype.parseInline=function(e,t){var r=new De(this,e,t);return r.inlineMode=!0,this.core.process(r),r.tokens},_e.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};var Me=function(){function e(e){void 0===e&&(e={}),this.tagName=\\\"\\\",this.attrs={},this.innerHTML=\\\"\\\",this.whitespaceRegex=/\\\\s+/,this.tagName=e.tagName||\\\"\\\",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||\\\"\\\"}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||\\\"\\\"},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr(\\\"class\\\",e)},e.prototype.addClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],s=e.split(n);t=s.shift();)-1===Be(o,t)&&o.push(t);return this.getAttrs().class=o.join(\\\" \\\"),this},e.prototype.removeClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],s=e.split(n);o.length&&(t=s.shift());){var i=Be(o,t);-1!==i&&o.splice(i,1)}return this.getAttrs().class=o.join(\\\" \\\"),this},e.prototype.getClass=function(){return this.getAttrs().class||\\\"\\\"},e.prototype.hasClass=function(e){return-1!==(\\\" \\\"+this.getClass()+\\\" \\\").indexOf(\\\" \\\"+e+\\\" \\\")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||\\\"\\\"},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return[\\\"<\\\",e,t=t?\\\" \\\"+t:\\\"\\\",\\\">\\\",this.getInnerHtml(),\\\"</\\\",e,\\\">\\\"].join(\\\"\\\")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return\\\"\\\";var e=this.getAttrs(),t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r+'=\\\"'+e[r]+'\\\"');return t.join(\\\" \\\")},e}();var Se=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className=\\\"\\\",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||\\\"\\\"}return e.prototype.build=function(e){return new Me({tagName:\\\"a\\\",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},r=this.createCssClass(e);return r&&(t.class=r),this.newWindow&&(t.target=\\\"_blank\\\",t.rel=\\\"noopener noreferrer\\\"),this.truncate&&this.truncate.length&&this.truncate.length<e.getAnchorText().length&&(t.title=e.getAnchorHref()),t},e.prototype.createCssClass=function(e){var t=this.className;if(t){for(var r=[t],n=e.getCssClassSuffixes(),o=0,s=n.length;o<s;o++)r.push(t+\\\"-\\\"+n[o]);return r.join(\\\" \\\")}return\\\"\\\"},e.prototype.processAnchorText=function(e){return e=this.doTruncate(e)},e.prototype.doTruncate=function(e){var t=this.truncate;if(!t||!t.length)return e;var r=t.length,n=t.location;return\\\"smart\\\"===n?function(e,t,r){var n,o;null==r?(r=\\\"…\\\",o=3,n=8):(o=r.length,n=r.length);var s=function(e){var t=\\\"\\\";return e.scheme&&e.host&&(t+=e.scheme+\\\"://\\\"),e.host&&(t+=e.host),e.path&&(t+=\\\"/\\\"+e.path),e.query&&(t+=\\\"?\\\"+e.query),e.fragment&&(t+=\\\"#\\\"+e.fragment),t},i=function(e,t){var n=t/2,o=Math.ceil(n),s=-1*Math.floor(n),i=\\\"\\\";return s<0&&(i=e.substr(s)),e.substr(0,o)+r+i};if(e.length<=t)return e;var a=t-o,u=function(e){var t={},r=e,n=r.match(/^([a-z]+):\\\\/\\\\//i);return n&&(t.scheme=n[1],r=r.substr(n[0].length)),(n=r.match(/^(.*?)(?=(\\\\?|#|\\\\/|$))/i))&&(t.host=n[1],r=r.substr(n[0].length)),(n=r.match(/^\\\\/(.*?)(?=(\\\\?|#|$))/i))&&(t.path=n[1],r=r.substr(n[0].length)),(n=r.match(/^\\\\?(.*?)(?=(#|$))/i))&&(t.query=n[1],r=r.substr(n[0].length)),(n=r.match(/^#(.*?)$/i))&&(t.fragment=n[1]),t}(e);if(u.query){var l=u.query.match(/^(.*?)(?=(\\\\?|\\\\#))(.*?)$/i);l&&(u.query=u.query.substr(0,l[1].length),e=s(u))}if(e.length<=t)return e;if(u.host&&(u.host=u.host.replace(/^www\\\\./,\\\"\\\"),e=s(u)),e.length<=t)return e;var c=\\\"\\\";if(u.host&&(c+=u.host),c.length>=a)return u.host.length==t?(u.host.substr(0,t-o)+r).substr(0,a+n):i(c,a).substr(0,a+n);var p=\\\"\\\";if(u.path&&(p+=\\\"/\\\"+u.path),u.query&&(p+=\\\"?\\\"+u.query),p){if((c+p).length>=a)return(c+p).length==t?(c+p).substr(0,t):(c+i(p,a-c.length)).substr(0,a+n);c+=p}if(u.fragment){var h=\\\"#\\\"+u.fragment;if((c+h).length>=a)return(c+h).length==t?(c+h).substr(0,t):(c+i(h,a-c.length)).substr(0,a+n);c+=h}if(u.scheme&&u.host){var f=u.scheme+\\\"://\\\";if((c+f).length<a)return(f+c).substr(0,t)}if(c.length<=t)return c;var g=\\\"\\\";return a>0&&(g=c.substr(-1*Math.floor(a/2))),(c.substr(0,Math.ceil(a/2))+r+g).substr(0,a+n)}(e,r):\\\"middle\\\"===n?function(e,t,r){if(e.length<=t)return e;var n,o;null==r?(r=\\\"…\\\",n=8,o=3):(n=r.length,o=r.length);var s=t-o,i=\\\"\\\";return s>0&&(i=e.substr(-1*Math.floor(s/2))),(e.substr(0,Math.ceil(s/2))+r+i).substr(0,s+n)}(e,r):function(e,t,r){return function(e,t,r){var n;return e.length>t&&(null==r?(r=\\\"…\\\",n=3):n=r.length,e=e.substring(0,t-n)+r),e}(e,t,r)}(e,r)},e}(),Te=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText=\\\"\\\",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),Le=function(e,t){return(Le=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function Re(e,t){function r(){this.constructor=e}Le(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var Ne=function(){return(Ne=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},ze=function(e){function t(t){var r=e.call(this,t)||this;return r.email=\\\"\\\",r.email=t.email,r}return Re(t,e),t.prototype.getType=function(){return\\\"email\\\"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return\\\"mailto:\\\"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(Te),Pe=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\\\"\\\",r.hashtag=\\\"\\\",r.serviceName=t.serviceName,r.hashtag=t.hashtag,r}return Re(t,e),t.prototype.getType=function(){return\\\"hashtag\\\"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var e=this.serviceName,t=this.hashtag;switch(e){case\\\"twitter\\\":return\\\"https://twitter.com/hashtag/\\\"+t;case\\\"facebook\\\":return\\\"https://www.facebook.com/hashtag/\\\"+t;case\\\"instagram\\\":return\\\"https://instagram.com/explore/tags/\\\"+t;default:throw new Error(\\\"Unknown service name to point hashtag to: \\\"+e)}},t.prototype.getAnchorText=function(){return\\\"#\\\"+this.hashtag},t}(Te),je=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\\\"twitter\\\",r.mention=\\\"\\\",r.mention=t.mention,r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.getType=function(){return\\\"mention\\\"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case\\\"twitter\\\":return\\\"https://twitter.com/\\\"+this.mention;case\\\"instagram\\\":return\\\"https://instagram.com/\\\"+this.mention;case\\\"soundcloud\\\":return\\\"https://soundcloud.com/\\\"+this.mention;default:throw new Error(\\\"Unknown service name to point mention to: \\\"+this.serviceName)}},t.prototype.getAnchorText=function(){return\\\"@\\\"+this.mention},t.prototype.getCssClassSuffixes=function(){var t=e.prototype.getCssClassSuffixes.call(this),r=this.getServiceName();return r&&t.push(r),t},t}(Te),Ie=function(e){function t(t){var r=e.call(this,t)||this;return r.number=\\\"\\\",r.plusSign=!1,r.number=t.number,r.plusSign=t.plusSign,r}return Re(t,e),t.prototype.getType=function(){return\\\"phone\\\"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return\\\"tel:\\\"+(this.plusSign?\\\"+\\\":\\\"\\\")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(Te),Oe=function(e){function t(t){var r=e.call(this,t)||this;return r.url=\\\"\\\",r.urlMatchType=\\\"scheme\\\",r.protocolUrlMatch=!1,r.protocolRelativeMatch=!1,r.stripPrefix={scheme:!0,www:!0},r.stripTrailingSlash=!0,r.decodePercentEncoding=!0,r.schemePrefixRegex=/^(https?:\\\\/\\\\/)?/i,r.wwwPrefixRegex=/^(https?:\\\\/\\\\/)?(www\\\\.)?/i,r.protocolRelativeRegex=/^\\\\/\\\\//,r.protocolPrepended=!1,r.urlMatchType=t.urlMatchType,r.url=t.url,r.protocolUrlMatch=t.protocolUrlMatch,r.protocolRelativeMatch=t.protocolRelativeMatch,r.stripPrefix=t.stripPrefix,r.stripTrailingSlash=t.stripTrailingSlash,r.decodePercentEncoding=t.decodePercentEncoding,r}return Re(t,e),t.prototype.getType=function(){return\\\"url\\\"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var e=this.url;return this.protocolRelativeMatch||this.protocolUrlMatch||this.protocolPrepended||(e=this.url=\\\"http://\\\"+e,this.protocolPrepended=!0),e},t.prototype.getAnchorHref=function(){return this.getUrl().replace(/&/g,\\\"&\\\")},t.prototype.getAnchorText=function(){var e=this.getMatchedText();return this.protocolRelativeMatch&&(e=this.stripProtocolRelativePrefix(e)),this.stripPrefix.scheme&&(e=this.stripSchemePrefix(e)),this.stripPrefix.www&&(e=this.stripWwwPrefix(e)),this.stripTrailingSlash&&(e=this.removeTrailingSlash(e)),this.decodePercentEncoding&&(e=this.removePercentEncoding(e)),e},t.prototype.stripSchemePrefix=function(e){return e.replace(this.schemePrefixRegex,\\\"\\\")},t.prototype.stripWwwPrefix=function(e){return e.replace(this.wwwPrefixRegex,\\\"$1\\\")},t.prototype.stripProtocolRelativePrefix=function(e){return e.replace(this.protocolRelativeRegex,\\\"\\\")},t.prototype.removeTrailingSlash=function(e){return\\\"/\\\"===e.charAt(e.length-1)&&(e=e.slice(0,-1)),e},t.prototype.removePercentEncoding=function(e){var t=e.replace(/%22/gi,\\\""\\\").replace(/%26/gi,\\\"&\\\").replace(/%27/gi,\\\"'\\\").replace(/%3C/gi,\\\"<\\\").replace(/%3E/gi,\\\">\\\");try{return decodeURIComponent(t)}catch(e){return t}},t}(Te),Ue=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},He=/[A-Za-z]/,Ve=/[0-9]/,Ge=/\\\\s/,$e=/['\\\"]/,Ze=/[\\\\x00-\\\\x1F\\\\x7F]/,We=/A-Za-z\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B4\\\\u08B6-\\\\u08BD\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0AF9\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58-\\\\u0C5A\\\\u0C60\\\\u0C61\\\\u0C80\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D54-\\\\u0D56\\\\u0D5F-\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F5\\\\u13F8-\\\\u13FD\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16F1-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u1884\\\\u1887-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1C80-\\\\u1C88\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2183\\\\u2184\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005\\\\u3006\\\\u3031-\\\\u3035\\\\u303B\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FD5\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6E5\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA7AE\\\\uA7B0-\\\\uA7B7\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA8FD\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB65\\\\uAB70-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC/.source,Je=We+/\\\\u00a9\\\\u00ae\\\\u2000-\\\\u3300\\\\ud83c\\\\ud000-\\\\udfff\\\\ud83d\\\\ud000-\\\\udfff\\\\ud83e\\\\ud000-\\\\udfff/.source+/\\\\u0300-\\\\u036F\\\\u0483-\\\\u0489\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0610-\\\\u061A\\\\u064B-\\\\u065F\\\\u0670\\\\u06D6-\\\\u06DC\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0859-\\\\u085B\\\\u08D4-\\\\u08E1\\\\u08E3-\\\\u0903\\\\u093A-\\\\u093C\\\\u093E-\\\\u094F\\\\u0951-\\\\u0957\\\\u0962\\\\u0963\\\\u0981-\\\\u0983\\\\u09BC\\\\u09BE-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CD\\\\u09D7\\\\u09E2\\\\u09E3\\\\u0A01-\\\\u0A03\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0ABC\\\\u0ABE-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0B01-\\\\u0B03\\\\u0B3C\\\\u0B3E-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD7\\\\u0C00-\\\\u0C03\\\\u0C3E-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0C81-\\\\u0C83\\\\u0CBC\\\\u0CBE-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CE2\\\\u0CE3\\\\u0D01-\\\\u0D03\\\\u0D3E-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4D\\\\u0D57\\\\u0D62\\\\u0D63\\\\u0D82\\\\u0D83\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EB9\\\\u0EBB\\\\u0EBC\\\\u0EC8-\\\\u0ECD\\\\u0F18\\\\u0F19\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E\\\\u0F3F\\\\u0F71-\\\\u0F84\\\\u0F86\\\\u0F87\\\\u0F8D-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u102B-\\\\u103E\\\\u1056-\\\\u1059\\\\u105E-\\\\u1060\\\\u1062-\\\\u1064\\\\u1067-\\\\u106D\\\\u1071-\\\\u1074\\\\u1082-\\\\u108D\\\\u108F\\\\u109A-\\\\u109D\\\\u135D-\\\\u135F\\\\u1712-\\\\u1714\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B4-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u1885\\\\u1886\\\\u18A9\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1A17-\\\\u1A1B\\\\u1A55-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F\\\\u1AB0-\\\\u1ABE\\\\u1B00-\\\\u1B04\\\\u1B34-\\\\u1B44\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1B82\\\\u1BA1-\\\\u1BAD\\\\u1BE6-\\\\u1BF3\\\\u1C24-\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE8\\\\u1CED\\\\u1CF2-\\\\u1CF4\\\\u1CF8\\\\u1CF9\\\\u1DC0-\\\\u1DF5\\\\u1DFB-\\\\u1DFF\\\\u20D0-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2D7F\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F-\\\\uA672\\\\uA674-\\\\uA67D\\\\uA69E\\\\uA69F\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA823-\\\\uA827\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C5\\\\uA8E0-\\\\uA8F1\\\\uA926-\\\\uA92D\\\\uA947-\\\\uA953\\\\uA980-\\\\uA983\\\\uA9B3-\\\\uA9C0\\\\uA9E5\\\\uAA29-\\\\uAA36\\\\uAA43\\\\uAA4C\\\\uAA4D\\\\uAA7B-\\\\uAA7D\\\\uAAB0\\\\uAAB2-\\\\uAAB4\\\\uAAB7\\\\uAAB8\\\\uAABE\\\\uAABF\\\\uAAC1\\\\uAAEB-\\\\uAAEF\\\\uAAF5\\\\uAAF6\\\\uABE3-\\\\uABEA\\\\uABEC\\\\uABED\\\\uFB1E\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2F/.source,Ye=/0-9\\\\u0660-\\\\u0669\\\\u06F0-\\\\u06F9\\\\u07C0-\\\\u07C9\\\\u0966-\\\\u096F\\\\u09E6-\\\\u09EF\\\\u0A66-\\\\u0A6F\\\\u0AE6-\\\\u0AEF\\\\u0B66-\\\\u0B6F\\\\u0BE6-\\\\u0BEF\\\\u0C66-\\\\u0C6F\\\\u0CE6-\\\\u0CEF\\\\u0D66-\\\\u0D6F\\\\u0DE6-\\\\u0DEF\\\\u0E50-\\\\u0E59\\\\u0ED0-\\\\u0ED9\\\\u0F20-\\\\u0F29\\\\u1040-\\\\u1049\\\\u1090-\\\\u1099\\\\u17E0-\\\\u17E9\\\\u1810-\\\\u1819\\\\u1946-\\\\u194F\\\\u19D0-\\\\u19D9\\\\u1A80-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1B50-\\\\u1B59\\\\u1BB0-\\\\u1BB9\\\\u1C40-\\\\u1C49\\\\u1C50-\\\\u1C59\\\\uA620-\\\\uA629\\\\uA8D0-\\\\uA8D9\\\\uA900-\\\\uA909\\\\uA9D0-\\\\uA9D9\\\\uA9F0-\\\\uA9F9\\\\uAA50-\\\\uAA59\\\\uABF0-\\\\uABF9\\\\uFF10-\\\\uFF19/.source,Ke=Je+Ye,Qe=Je+Ye,Xe=\\\"(?:[\\\"+Ye+\\\"]{1,3}\\\\\\\\.){3}[\\\"+Ye+\\\"]{1,3}\\\",et=\\\"[\\\"+Qe+\\\"](?:[\\\"+Qe+\\\"\\\\\\\\-]{0,61}[\\\"+Qe+\\\"])?\\\",tt=function(e){return\\\"(?=(\\\"+et+\\\"))\\\\\\\\\\\"+e},rt=function(e){return\\\"(?:\\\"+tt(e)+\\\"(?:\\\\\\\\.\\\"+tt(e+1)+\\\"){0,126}|\\\"+Xe+\\\")\\\"},nt=new RegExp(\\\"[\\\"+Qe+\\\"]\\\"),ot=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,st=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=new RegExp(\\\"[\\\"+Qe+\\\"!#$%&'*+/=?^_`{|}~-]\\\"),t.strictTldRegex=new RegExp(\\\"^\\\"+ot.source+\\\"$\\\"),t}return Re(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,r=this.localPartCharRegex,n=this.strictTldRegex,o=[],s=e.length,i=new it,a={m:\\\"a\\\",a:\\\"i\\\",i:\\\"l\\\",l:\\\"t\\\",t:\\\"o\\\",o:\\\":\\\"},u=0,l=0,c=i;u<s;){var p=e.charAt(u);switch(l){case 0:h(p);break;case 1:f(e.charAt(u-1),p);break;case 2:g(p);break;case 3:d(p);break;case 4:m(p);break;case 5:b(p);break;case 6:v(p);break;case 7:k(p);break;default:Fe(l)}u++}return x(),o;function h(e){\\\"m\\\"===e?A(1):r.test(e)&&A()}function f(e,t){\\\":\\\"===e?r.test(t)?(l=2,c=new it(Ne({},c,{hasMailtoPrefix:!0}))):y():a[e]===t||(r.test(t)?l=2:\\\".\\\"===t?l=3:\\\"@\\\"===t?l=4:y())}function g(e){\\\".\\\"===e?l=3:\\\"@\\\"===e?l=4:r.test(e)||y()}function d(e){\\\".\\\"===e?y():\\\"@\\\"===e?y():r.test(e)?l=2:y()}function m(e){nt.test(e)?l=5:y()}function b(e){\\\".\\\"===e?l=7:\\\"-\\\"===e?l=6:nt.test(e)||x()}function v(e){\\\"-\\\"===e||\\\".\\\"===e?x():nt.test(e)?l=5:x()}function k(e){\\\".\\\"===e||\\\"-\\\"===e?x():nt.test(e)?(l=5,c=new it(Ne({},c,{hasDomainDot:!0}))):x()}function A(e){void 0===e&&(e=2),l=e,c=new it({idx:u})}function y(){l=0,c=i}function x(){if(c.hasDomainDot){var r=e.slice(c.idx,u);/[-.]$/.test(r)&&(r=r.slice(0,-1));var s=c.hasMailtoPrefix?r.slice(\\\"mailto:\\\".length):r;(function(e){var t=(e.split(\\\".\\\").pop()||\\\"\\\").toLowerCase();return n.test(t)})(s)&&o.push(new ze({tagBuilder:t,matchedText:r,offset:c.idx,email:s}))}y()}},t}(Ue),it=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},at=function(){function e(){}return e.isValid=function(e,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(e,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(e,t)&&!this.isValidIpAddress(e)||this.containsMultipleDots(e))},e.isValidIpAddress=function(e){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==e.match(t)},e.containsMultipleDots=function(e){var t=e;return this.hasFullProtocolRegex.test(e)&&(t=e.split(\\\"://\\\")[1]),t.split(\\\"/\\\")[0].indexOf(\\\"..\\\")>-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),r=t&&t[0].toLowerCase();return\\\"javascript:\\\"!==r&&\\\"vbscript:\\\"!==r},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf(\\\".\\\"))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&!this.hasWordCharAfterProtocolRegex.test(e)},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\\\\/\\\\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(\\\":[^\\\\\\\\s]*?[\\\"+We+\\\"]\\\"),e.ipRegex=/[0-9][0-9]?[0-9]?\\\\.[0-9][0-9]?[0-9]?\\\\.[0-9][0-9]?[0-9]?\\\\.[0-9][0-9]?[0-9]?(:[0-9]*)?\\\\/?$/,e}(),ut=function(e){function t(t){var r,n=e.call(this,t)||this;return n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.matcherRegex=(r=new RegExp(\\\"[/?#](?:[\\\"+Qe+\\\"\\\\\\\\-+&@#/%=~_()|'$*\\\\\\\\[\\\\\\\\]?!:,.;✓]*[\\\"+Qe+\\\"\\\\\\\\-+&@#/%=~_()|'$*\\\\\\\\[\\\\\\\\]✓])?\\\"),new RegExp([\\\"(?:\\\",\\\"(\\\",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\\\\/\\\\/)(?!\\\\d+\\\\/?)(?:\\\\/\\\\/)?)/.source,rt(2),\\\")\\\",\\\"|\\\",\\\"(\\\",\\\"(//)?\\\",/(?:www\\\\.)/.source,rt(6),\\\")\\\",\\\"|\\\",\\\"(\\\",\\\"(//)?\\\",rt(10)+\\\"\\\\\\\\.\\\",ot.source,\\\"(?![-\\\"+Ke+\\\"])\\\",\\\")\\\",\\\")\\\",\\\"(?::[0-9]+)?\\\",\\\"(?:\\\"+r.source+\\\")?\\\"].join(\\\"\\\"),\\\"gi\\\")),n.wordCharRegExp=new RegExp(\\\"[\\\"+Qe+\\\"]\\\"),n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.stripPrefix,o=this.stripTrailingSlash,s=this.decodePercentEncoding,i=this.tagBuilder,a=[],u=function(){var r=t[0],u=t[1],c=t[4],p=t[5],h=t[9],f=t.index,g=p||h,d=e.charAt(f-1);if(!at.isValid(r,u))return\\\"continue\\\";if(f>0&&\\\"@\\\"===d)return\\\"continue\\\";if(f>0&&g&&l.wordCharRegExp.test(d))return\\\"continue\\\";if(/\\\\?$/.test(r)&&(r=r.substr(0,r.length-1)),l.matchHasUnbalancedClosingParen(r))r=r.substr(0,r.length-1);else{var m=l.matchHasInvalidCharAfterTld(r,u);m>-1&&(r=r.substr(0,m))}var b=[\\\"http://\\\",\\\"https://\\\"].find(function(e){return!!u&&-1!==u.indexOf(e)});if(b){var v=r.indexOf(b);r=r.substr(v),u=u.substr(v),f+=v}var k=u?\\\"scheme\\\":c?\\\"www\\\":\\\"tld\\\",A=!!u;a.push(new Oe({tagBuilder:i,matchedText:r,offset:f,urlMatchType:k,url:r,protocolUrlMatch:A,protocolRelativeMatch:!!g,stripPrefix:n,stripTrailingSlash:o,decodePercentEncoding:s}))},l=this;null!==(t=r.exec(e));)u();return a},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,r=e.charAt(e.length-1);if(\\\")\\\"===r)t=\\\"(\\\";else{if(\\\"]\\\"!==r)return!1;t=\\\"[\\\"}for(var n=0,o=0,s=e.length-1;o<s;o++){var i=e.charAt(o);i===t?n++:i===r&&(n=Math.max(n-1,0))}return 0===n},t.prototype.matchHasInvalidCharAfterTld=function(e,t){if(!e)return-1;var r=0;t&&(r=e.indexOf(\\\":\\\"),e=e.slice(r));var n=new RegExp(\\\"^((.?//)?[-.\\\"+Qe+\\\"]*[-\\\"+Qe+\\\"]\\\\\\\\.[-\\\"+Qe+\\\"]+)\\\").exec(e);return null===n?-1:(r+=n[1].length,e=e.slice(n[1].length),/^[^-.A-Za-z0-9:\\\\/?#]/.test(e)?r:-1)},t}(Ue),lt=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\\\"twitter\\\",r.matcherRegex=new RegExp(\\\"#[_\\\"+Qe+\\\"]{1,139}(?![_\\\"+Qe+\\\"])\\\",\\\"g\\\"),r.nonWordCharRegex=new RegExp(\\\"[^\\\"+Qe+\\\"]\\\"),r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.nonWordCharRegex,o=this.serviceName,s=this.tagBuilder,i=[];null!==(t=r.exec(e));){var a=t.index,u=e.charAt(a-1);if(0===a||n.test(u)){var l=t[0],c=t[0].slice(1);i.push(new Pe({tagBuilder:s,matchedText:l,offset:a,serviceName:o,hashtag:c}))}}return i},t}(Ue),ct=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=/(?:(?:(?:(\\\\+)?\\\\d{1,3}[-\\\\040.]?)?\\\\(?\\\\d{3}\\\\)?[-\\\\040.]?\\\\d{3}[-\\\\040.]?\\\\d{4})|(?:(\\\\+)(?:9[976]\\\\d|8[987530]\\\\d|6[987]\\\\d|5[90]\\\\d|42\\\\d|3[875]\\\\d|2[98654321]\\\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\\\\040.]?(?:\\\\d[-\\\\040.]?){6,12}\\\\d+))([,;]+[0-9]+#?)*/g,t}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.tagBuilder,o=[];null!==(t=r.exec(e));){var s=t[0],i=s.replace(/[^0-9,;#]/g,\\\"\\\"),a=!(!t[1]&&!t[2]),u=0==t.index?\\\"\\\":e.substr(t.index-1,1),l=e.substr(t.index+s.length,1),c=!u.match(/\\\\d/)&&!l.match(/\\\\d/);this.testMatch(t[3])&&this.testMatch(s)&&c&&o.push(new Ie({tagBuilder:n,matchedText:s,offset:t.index,number:i,plusSign:a}))}return o},t.prototype.testMatch=function(e){return/\\\\D/.test(e)},t}(Ue),pt=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\\\"twitter\\\",r.matcherRegexes={twitter:new RegExp(\\\"@[_\\\"+Qe+\\\"]{1,50}(?![_\\\"+Qe+\\\"])\\\",\\\"g\\\"),instagram:new RegExp(\\\"@[_.\\\"+Qe+\\\"]{1,30}(?![_\\\"+Qe+\\\"])\\\",\\\"g\\\"),soundcloud:new RegExp(\\\"@[-_.\\\"+Qe+\\\"]{1,50}(?![-_\\\"+Qe+\\\"])\\\",\\\"g\\\")},r.nonWordCharRegex=new RegExp(\\\"[^\\\"+Qe+\\\"]\\\"),r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.parseMatches=function(e){var t,r=this.serviceName,n=this.matcherRegexes[this.serviceName],o=this.nonWordCharRegex,s=this.tagBuilder,i=[];if(!n)return i;for(;null!==(t=n.exec(e));){var a=t.index,u=e.charAt(a-1);if(0===a||o.test(u)){var l=t[0].replace(/\\\\.+$/g,\\\"\\\"),c=l.slice(1);i.push(new je({tagBuilder:s,matchedText:l,offset:a,serviceName:r,mention:c}))}}return i},t}(Ue);function ht(e,t){for(var r=t.onOpenTag,n=t.onCloseTag,o=t.onText,s=t.onComment,i=t.onDoctype,a=new ft,u=0,l=e.length,c=0,p=0,h=a;u<l;){var f=e.charAt(u);switch(c){case 0:g(f);break;case 1:d(f);break;case 2:b(f);break;case 3:m(f);break;case 4:v(f);break;case 5:k(f);break;case 6:A(f);break;case 7:y(f);break;case 8:x(f);break;case 9:w(f);break;case 10:C(f);break;case 11:E(f);break;case 12:D(f);break;case 13:_();break;case 14:B(f);break;case 15:q(f);break;case 16:F(f);break;case 17:M(f);break;case 18:S(f);break;case 19:T(f);break;case 20:L(f);break;default:Fe(c)}u++}function g(e){\\\"<\\\"===e&&N()}function d(e){\\\"!\\\"===e?c=13:\\\"/\\\"===e?(c=2,h=new ft(Ne({},h,{isClosing:!0}))):\\\"<\\\"===e?N():He.test(e)?(c=3,h=new ft(Ne({},h,{isOpening:!0}))):(c=0,h=a)}function m(e){Ge.test(e)?(h=new ft(Ne({},h,{name:P()})),c=4):\\\"<\\\"===e?N():\\\"/\\\"===e?(h=new ft(Ne({},h,{name:P()})),c=12):\\\">\\\"===e?(h=new ft(Ne({},h,{name:P()})),z()):He.test(e)||Ve.test(e)||\\\":\\\"===e||R()}function b(e){\\\">\\\"===e?R():He.test(e)?c=3:R()}function v(e){Ge.test(e)||(\\\"/\\\"===e?c=12:\\\">\\\"===e?z():\\\"<\\\"===e?N():\\\"=\\\"===e||$e.test(e)||Ze.test(e)?R():c=5)}function k(e){Ge.test(e)?c=6:\\\"/\\\"===e?c=12:\\\"=\\\"===e?c=7:\\\">\\\"===e?z():\\\"<\\\"===e?N():$e.test(e)&&R()}function A(e){Ge.test(e)||(\\\"/\\\"===e?c=12:\\\"=\\\"===e?c=7:\\\">\\\"===e?z():\\\"<\\\"===e?N():$e.test(e)?R():c=5)}function y(e){Ge.test(e)||('\\\"'===e?c=8:\\\"'\\\"===e?c=9:/[>=`]/.test(e)?R():\\\"<\\\"===e?N():c=10)}function x(e){'\\\"'===e&&(c=11)}function w(e){\\\"'\\\"===e&&(c=11)}function C(e){Ge.test(e)?c=4:\\\">\\\"===e?z():\\\"<\\\"===e&&N()}function E(e){Ge.test(e)?c=4:\\\"/\\\"===e?c=12:\\\">\\\"===e?z():\\\"<\\\"===e?N():(c=4,u--)}function D(e){\\\">\\\"===e?(h=new ft(Ne({},h,{isClosing:!0})),z()):c=4}function _(t){\\\"--\\\"===e.substr(u,2)?(u+=2,h=new ft(Ne({},h,{type:\\\"comment\\\"})),c=14):\\\"DOCTYPE\\\"===e.substr(u,7).toUpperCase()?(u+=7,h=new ft(Ne({},h,{type:\\\"doctype\\\"})),c=20):R()}function B(e){\\\"-\\\"===e?c=15:\\\">\\\"===e?R():c=16}function q(e){\\\"-\\\"===e?c=18:\\\">\\\"===e?R():c=16}function F(e){\\\"-\\\"===e&&(c=17)}function M(e){c=\\\"-\\\"===e?18:16}function S(e){\\\">\\\"===e?z():\\\"!\\\"===e?c=19:\\\"-\\\"===e||(c=16)}function T(e){\\\"-\\\"===e?c=17:\\\">\\\"===e?z():c=16}function L(e){\\\">\\\"===e?z():\\\"<\\\"===e&&N()}function R(){c=0,h=a}function N(){c=1,h=new ft({idx:u})}function z(){var t=e.slice(p,h.idx);t&&o(t,p),\\\"comment\\\"===h.type?s(h.idx):\\\"doctype\\\"===h.type?i(h.idx):(h.isOpening&&r(h.name,h.idx),h.isClosing&&n(h.name,h.idx)),R(),p=u+1}function P(){var t=h.idx+(h.isClosing?2:1);return e.slice(t,u).toLowerCase()}p<u&&function(){var t=e.slice(p,u);o(t,p),p=u+1}()}var ft=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.type=e.type||\\\"tag\\\",this.name=e.name||\\\"\\\",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing},gt=function(){function e(t){void 0===t&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:\\\"end\\\"},this.className=\\\"\\\",this.replaceFn=null,this.context=void 0,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(t.urls),this.email=\\\"boolean\\\"==typeof t.email?t.email:this.email,this.phone=\\\"boolean\\\"==typeof t.phone?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=\\\"boolean\\\"==typeof t.newWindow?t.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(t.stripPrefix),this.stripTrailingSlash=\\\"boolean\\\"==typeof t.stripTrailingSlash?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=\\\"boolean\\\"==typeof t.decodePercentEncoding?t.decodePercentEncoding:this.decodePercentEncoding;var r=this.mention;if(!1!==r&&\\\"twitter\\\"!==r&&\\\"instagram\\\"!==r&&\\\"soundcloud\\\"!==r)throw new Error(\\\"invalid `mention` cfg - see docs\\\");var n=this.hashtag;if(!1!==n&&\\\"twitter\\\"!==n&&\\\"facebook\\\"!==n&&\\\"instagram\\\"!==n)throw new Error(\\\"invalid `hashtag` cfg - see docs\\\");this.truncate=this.normalizeTruncateCfg(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,r){return new e(r).link(t)},e.parse=function(t,r){return new e(r).parse(t)},e.prototype.normalizeUrlsCfg=function(e){return null==e&&(e=!0),\\\"boolean\\\"==typeof e?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:\\\"boolean\\\"!=typeof e.schemeMatches||e.schemeMatches,wwwMatches:\\\"boolean\\\"!=typeof e.wwwMatches||e.wwwMatches,tldMatches:\\\"boolean\\\"!=typeof e.tldMatches||e.tldMatches}},e.prototype.normalizeStripPrefixCfg=function(e){return null==e&&(e=!0),\\\"boolean\\\"==typeof e?{scheme:e,www:e}:{scheme:\\\"boolean\\\"!=typeof e.scheme||e.scheme,www:\\\"boolean\\\"!=typeof e.www||e.www}},e.prototype.normalizeTruncateCfg=function(e){return\\\"number\\\"==typeof e?{length:e,location:\\\"end\\\"}:function(e,t){for(var r in t)t.hasOwnProperty(r)&&void 0===e[r]&&(e[r]=t[r]);return e}(e||{},{length:Number.POSITIVE_INFINITY,location:\\\"end\\\"})},e.prototype.parse=function(e){var t=this,r=[\\\"a\\\",\\\"style\\\",\\\"script\\\"],n=0,o=[];return ht(e,{onOpenTag:function(e){r.indexOf(e)>=0&&n++},onText:function(e,r){if(0===n){var s=function(e,t){if(!t.global)throw new Error(\\\"`splitRegex` must have the 'g' flag set\\\");for(var r,n=[],o=0;r=t.exec(e);)n.push(e.substring(o,r.index)),n.push(r[0]),o=r.index+r[0].length;return n.push(e.substring(o)),n}(e,/( | |<|<|>|>|"|"|')/gi),i=r;s.forEach(function(e,r){if(r%2==0){var n=t.parseText(e,i);o.push.apply(o,n)}i+=e.length})}},onCloseTag:function(e){r.indexOf(e)>=0&&(n=Math.max(n-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort(function(e,t){return e.getOffset()-t.getOffset()});for(var t=0;t<e.length-1;t++){var r=e[t],n=r.getOffset(),o=r.getMatchedText().length,s=n+o;if(t+1<e.length){if(e[t+1].getOffset()===n){var i=e[t+1].getMatchedText().length>o?t:t+1;e.splice(i,1);continue}e[t+1].getOffset()<s&&e.splice(t+1,1)}}return e},e.prototype.removeUnwantedMatches=function(e){return this.hashtag||qe(e,function(e){return\\\"hashtag\\\"===e.getType()}),this.email||qe(e,function(e){return\\\"email\\\"===e.getType()}),this.phone||qe(e,function(e){return\\\"phone\\\"===e.getType()}),this.mention||qe(e,function(e){return\\\"mention\\\"===e.getType()}),this.urls.schemeMatches||qe(e,function(e){return\\\"url\\\"===e.getType()&&\\\"scheme\\\"===e.getUrlMatchType()}),this.urls.wwwMatches||qe(e,function(e){return\\\"url\\\"===e.getType()&&\\\"www\\\"===e.getUrlMatchType()}),this.urls.tldMatches||qe(e,function(e){return\\\"url\\\"===e.getType()&&\\\"tld\\\"===e.getUrlMatchType()}),e},e.prototype.parseText=function(e,t){void 0===t&&(t=0),t=t||0;for(var r=this.getMatchers(),n=[],o=0,s=r.length;o<s;o++){for(var i=r[o].parseMatches(e),a=0,u=i.length;a<u;a++)i[a].setOffset(t+i[a].getOffset());n.push.apply(n,i)}return n},e.prototype.link=function(e){if(!e)return\\\"\\\";for(var t=this.parse(e),r=[],n=0,o=0,s=t.length;o<s;o++){var i=t[o];r.push(e.substring(n,i.getOffset())),r.push(this.createMatchReturnVal(i)),n=i.getOffset()+i.getMatchedText().length}return r.push(e.substring(n)),r.join(\\\"\\\")},e.prototype.createMatchReturnVal=function(e){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,e)),\\\"string\\\"==typeof t?t:!1===t?e.getMatchedText():t instanceof Me?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new lt({tagBuilder:e,serviceName:this.hashtag}),new st({tagBuilder:e}),new ct({tagBuilder:e}),new pt({tagBuilder:e,serviceName:this.mention}),new ut({tagBuilder:e,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},e.prototype.getTagBuilder=function(){var e=this.tagBuilder;return e||(e=this.tagBuilder=new Se({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version=\\\"3.11.0\\\",e.AnchorTagBuilder=Se,e.HtmlTag=Me,e.matcher={Email:st,Hashtag:lt,Matcher:Ue,Mention:pt,Phone:ct,Url:ut},e.match={Email:ze,Hashtag:Pe,Match:Te,Mention:je,Phone:Ie,Url:Oe},e}(),dt=/www|@|\\\\:\\\\/\\\\//;function mt(e){return/^<\\\\/a\\\\s*>/i.test(e)}function bt(){var e=[],t=new gt({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case\\\"url\\\":e.push({text:t.matchedText,url:t.getUrl()});break;case\\\"email\\\":e.push({text:t.matchedText,url:\\\"mailto:\\\"+t.getEmail().replace(/^mailto:/i,\\\"\\\")})}return!1}});return{links:e,autolinker:t}}function vt(e){var t,r,n,o,s,i,a,u,l,c,p,h,f,g,d=e.tokens,m=null;for(r=0,n=d.length;r<n;r++)if(\\\"inline\\\"===d[r].type)for(p=0,t=(o=d[r].children).length-1;t>=0;t--)if(\\\"link_close\\\"!==(s=o[t]).type){if(\\\"htmltag\\\"===s.type&&(g=s.content,/^<a[>\\\\s]/i.test(g)&&p>0&&p--,mt(s.content)&&p++),!(p>0)&&\\\"text\\\"===s.type&&dt.test(s.content)){if(m||(h=(m=bt()).links,f=m.autolinker),i=s.content,h.length=0,f.link(i),!h.length)continue;for(a=[],c=s.level,u=0;u<h.length;u++)e.inline.validateLink(h[u].url)&&((l=i.indexOf(h[u].text))&&a.push({type:\\\"text\\\",content:i.slice(0,l),level:c}),a.push({type:\\\"link_open\\\",href:h[u].url,title:\\\"\\\",level:c++}),a.push({type:\\\"text\\\",content:h[u].text,level:c}),a.push({type:\\\"link_close\\\",level:--c}),i=i.slice(l+h[u].text.length));i.length&&a.push({type:\\\"text\\\",content:i,level:c}),d[r].children=o=[].concat(o.slice(0,t),a,o.slice(t+1))}}else for(t--;o[t].level!==s.level&&\\\"link_open\\\"!==o[t].type;)t--}e.Remarkable=_e,e.linkify=function(e){e.core.ruler.push(\\\"linkify\\\",vt)},e.utils=A,Object.defineProperty(e,\\\"__esModule\\\",{value:!0})});\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/markdown/remarkable.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/markdown/images/new-markdown-button\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/images/new-markdown-button\",\n \"tags\": \"$:/tags/Image\",\n \"text\": \"<svg class=\\\"tc-image-new-markdown-button tc-image-button\\\" viewBox=\\\"0 0 128 128\\\" width=\\\"22pt\\\" height=\\\"22pt\\\">\\n <g fill-rule=\\\"evenodd\\\">\\n <rect x=\\\"80\\\" y=\\\"96\\\" width=\\\"48\\\" height=\\\"16\\\" rx=\\\"8\\\"></rect>\\n <rect x=\\\"96\\\" y=\\\"80\\\" width=\\\"16\\\" height=\\\"48\\\" rx=\\\"8\\\"></rect>\\n <path d=\\\"M3.23876972,39.5396716 C3.23876972,35.9653274 6.13586353,33.0691646 9.7141757,33.0691646 L98.1283744,33.0691646 C101.706101,33.0691646 104.60378,35.9646626 104.60378,39.5396716 L104.60378,84.8296213 C104.60378,88.4039654 101.706687,91.3001282 98.1283744,91.3001282 L9.7141757,91.3001282 C6.13644944,91.3001282 3.23876972,88.4046302 3.23876972,84.8296213 L3.23876972,39.5396716 L3.23876972,39.5396716 Z M-2.15298617,39.5396716 L-2.15298617,84.8296213 C-2.15298617,91.3833243 3.15957363,96.6918841 9.7141757,96.6918841 L98.1283744,96.6918841 C104.684083,96.6918841 109.995536,91.382138 109.995536,84.8296213 L109.995536,39.5396716 C109.995536,32.9859686 104.682977,27.6774087 98.1283744,27.6774087 L9.7141757,27.6774087 C3.15846686,27.6774087 -2.15298617,32.9871549 -2.15298617,39.5396716 Z M14.0222815,80.5166164 L14.0222815,43.8526764 L24.8057933,43.8526764 L35.589305,57.3320661 L46.3728168,43.8526764 L57.1563286,43.8526764 L57.1563286,80.5166164 L46.3728168,80.5166164 L46.3728168,59.4887685 L35.589305,72.9681582 L24.8057933,59.4887685 L24.8057933,80.5166164 L14.0222815,80.5166164 Z M81.4192301,80.5166164 L65.2439624,62.723822 L76.0274742,62.723822 L76.0274742,43.8526764 L86.810986,43.8526764 L86.810986,62.723822 L97.5944978,62.723822 L81.4192301,80.5166164 Z\\\"transform=\\\"translate(53.921275, 62.184646) rotate(-60.000000) translate(-53.921275, -62.184646) \\\"></path>\\n </g>\\n</svg>\"\n },\n \"$:/plugins/tiddlywiki/markdown/new-markdown-button\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/new-markdown-button\",\n \"tags\": \"$:/tags/PageControls\",\n \"caption\": \"{{$:/plugins/tiddlywiki/markdown/images/new-markdown-button}} {{$:/language/Buttons/NewMarkdown/Caption}}\",\n \"description\": \"{{$:/language/Buttons/NewMarkdown/Hint}}\",\n \"list-after\": \"$:/core/ui/Buttons/new-tiddler\",\n \"text\": \"\\\\whitespace trim\\n<$button tooltip={{$:/language/Buttons/NewMarkdown/Hint}} aria-label={{$:/language/Buttons/NewMarkdown/Caption}} class=<<tv-config-toolbar-class>>>\\n<$action-sendmessage $message=\\\"tm-new-tiddler\\\" type=\\\"text/x-markdown\\\"/>\\n<$list filter=\\\"[<tv-config-toolbar-icons>match[yes]]\\\">\\n{{$:/plugins/tiddlywiki/markdown/images/new-markdown-button}}\\n</$list>\\n<$list filter=\\\"[<tv-config-toolbar-text>match[yes]]\\\">\\n<span class=\\\"tc-btn-text\\\"><$text text={{$:/language/Buttons/NewMarkdown/Caption}}/></span>\\n</$list>\\n</$button>\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/readme\",\n \"text\": \"This is a TiddlyWiki plugin for parsing Markdown text, using the [[Remarkable|https://github.com/jonschlinkert/remarkable]] library.\\n\\nIt is completely self-contained, and doesn't need an Internet connection in order to work. It works both in the browser and under Node.js.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/markdown]]\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/usage\",\n \"text\": \"! Plugin Configuration\\n\\n|!Config |!Default |!Description |\\n| <code>[[breaks|$:/config/markdown/breaks]]</code>| ``false``|Remarkable library config: Convert '\\\\n' in paragraphs into ``<br>`` |\\n| <code>[[linkify|$:/config/markdown/linkify]]</code>| ``false``|Remarkable library config: Autoconvert URL-like text to links |\\n| <code>[[linkNewWindow|$:/config/markdown/linkNewWindow]]</code>| ``true``|For external links, should clicking on them open a new window/tab automatically? |\\n| <code>[[quotes|$:/config/markdown/quotes]]</code>| ``“”‘’``|Remarkable library config: Double + single quotes replacement pairs, when ``typographer`` enabled |\\n| <code>[[renderWikiText|$:/config/markdown/renderWikiText]]</code>| ``true``|After Markdown is parsed, should any text elements be handed off to the ~WikiText parser for further processing? |\\n| <code>[[renderWikiTextPragma|$:/config/markdown/renderWikiTextPragma]]</code>| ``\\\\rules only html image macrocallinline syslink transcludeinline wikilink filteredtranscludeblock macrocallblock transcludeblock``|When handing off to the ~WikiText parser, what pragma rules should it follow? |\\n| <code>[[typographer|$:/config/markdown/typographer]]</code>| ``false``|Remarkable library config: Enable some language-neutral replacement + quotes beautification |\\n\\n! Creating ~WikiLinks\\n\\nCreate wiki links with the usual Markdown link syntax targeting `#` and the target tiddler title:\\n\\n```\\n[link text](#TiddlerTitle)\\n```\\n\\nIf the target tiddler has a space in its name, that name must be URL-escaped to be detected as a URL:\\n\\n```\\n[link text](#Test%20Tiddler)\\n```\\n\\n! Images\\n\\nMarkdown image syntax can be used to reference images by tiddler title or an external URI. For example:\\n\\n```\\n\\n\\n\\n```\\n\"\n },\n \"$:/plugins/tiddlywiki/markdown/wrapper.js\": {\n \"title\": \"$:/plugins/tiddlywiki/markdown/wrapper.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/markdown/wrapper.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nWraps up the remarkable parser for use as a Parser in TiddlyWiki\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar r = require(\\\"$:/plugins/tiddlywiki/markdown/remarkable.js\\\");\\n\\nvar Remarkable = r.Remarkable,\\n\\tlinkify = r.linkify,\\n\\tutils = r.utils;\\n\\n///// Set up configuration options /////\\nfunction parseAsBoolean(tiddlerName) {\\n\\treturn $tw.wiki.getTiddlerText(tiddlerName).toLowerCase() === \\\"true\\\";\\n}\\nvar pluginOpts = {\\n\\tlinkNewWindow: parseAsBoolean(\\\"$:/config/markdown/linkNewWindow\\\"),\\n\\trenderWikiText: parseAsBoolean(\\\"$:/config/markdown/renderWikiText\\\"),\\n\\trenderWikiTextPragma: $tw.wiki.getTiddlerText(\\\"$:/config/markdown/renderWikiTextPragma\\\").trim()\\n};\\nvar remarkableOpts = {\\n\\tbreaks: parseAsBoolean(\\\"$:/config/markdown/breaks\\\"),\\n\\tquotes: $tw.wiki.getTiddlerText(\\\"$:/config/markdown/quotes\\\"),\\n\\ttypographer: parseAsBoolean(\\\"$:/config/markdown/typographer\\\")\\n};\\nvar accumulatingTypes = {\\n\\t\\\"text\\\": true,\\n\\t\\\"softbreak\\\": true\\n};\\n\\nvar md = new Remarkable(remarkableOpts);\\n\\nif (parseAsBoolean(\\\"$:/config/markdown/linkify\\\")) {\\n\\tmd = md.use(linkify);\\n}\\n\\nfunction findTagWithType(nodes, startPoint, type, level) {\\n\\tfor (var i = startPoint; i < nodes.length; i++) {\\n\\t\\tif (nodes[i].type === type && nodes[i].level === level) {\\n\\t\\t\\treturn i;\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n}\\n\\n/**\\n * Remarkable creates nodes that look like:\\n * [\\n * { type: 'paragraph_open'},\\n * { type: 'inline', content: 'Hello World', children:[{type: 'text', content: 'Hello World'}]},\\n * { type: 'paragraph_close'}\\n * ]\\n *\\n * But TiddlyWiki wants the Parser (https://tiddlywiki.com/dev/static/Parser.html) to emit nodes like:\\n *\\n * [\\n * { type: 'element', tag: 'p', children: [{type: 'text', text: 'Hello World'}]}\\n * ]\\n */\\nfunction convertNodes(remarkableTree, isStartOfInline) {\\n\\tlet out = [];\\n\\tvar accumulatedText = '';\\n\\tfunction withChildren(currentIndex, currentLevel, closingType, nodes, callback) {\\n\\t\\tvar j = findTagWithType(nodes, currentIndex + 1, closingType, currentLevel);\\n\\t\\tif (j === false) {\\n\\t\\t\\tconsole.error(\\\"Failed to find a \\\" + closingType + \\\" node after position \\\" + currentIndex);\\n\\t\\t\\tconsole.log(nodes);\\n\\t\\t\\treturn currentIndex + 1;\\n\\t\\t}\\n\\t\\tlet children = convertNodes(nodes.slice(currentIndex + 1, j));\\n\\t\\tcallback(children);\\n\\t\\treturn j;\\n\\t}\\n\\tfunction wrappedElement(elementTag, currentIndex, currentLevel, closingType, nodes) {\\n\\t\\treturn withChildren(currentIndex, currentLevel, closingType, nodes, function(children) {\\n\\t\\t\\tout.push({\\n\\t\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\t\\ttag: elementTag,\\n\\t\\t\\t\\tchildren: children\\n\\t\\t\\t});\\n\\t\\t});\\n\\t}\\n\\n\\tfor (var i = 0; i < remarkableTree.length; i++) {\\n\\t\\tvar currentNode = remarkableTree[i];\\n\\t\\tswitch (currentNode.type) {\\n\\t\\tcase \\\"paragraph_open\\\":\\n\\t\\t\\ti = wrappedElement(\\\"p\\\", i, currentNode.level, \\\"paragraph_close\\\", remarkableTree);\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"heading_open\\\":\\n\\t\\t\\ti = wrappedElement(\\\"h\\\" + currentNode.hLevel, i, currentNode.level, \\\"heading_close\\\", remarkableTree);\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"bullet_list_open\\\":\\n\\t\\t\\ti = wrappedElement(\\\"ul\\\", i, currentNode.level, \\\"bullet_list_close\\\", remarkableTree);\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"ordered_list_open\\\":\\n\\t\\t\\ti = wrappedElement('ol', i, currentNode.level,'ordered_list_close', remarkableTree);\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"list_item_open\\\":\\n\\t\\t\\ti = wrappedElement(\\\"li\\\", i, currentNode.level, \\\"list_item_close\\\", remarkableTree);\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"link_open\\\":\\n\\t\\t\\ti = withChildren(i, currentNode.level, \\\"link_close\\\", remarkableTree, function(children) {\\n\\t\\t\\t\\tif (currentNode.href[0] !== \\\"#\\\") {\\n\\t\\t\\t\\t\\t// External link\\n\\t\\t\\t\\t\\tvar attributes = {\\n\\t\\t\\t\\t\\t\\thref: { type: \\\"string\\\", value: currentNode.href }\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\tif (pluginOpts.linkNewWindow) {\\n\\t\\t\\t\\t\\t\\tattributes.target = { type: \\\"string\\\", value: \\\"_blank\\\" };\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tout.push({\\n\\t\\t\\t\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\t\\t\\t\\ttag: \\\"a\\\",\\n\\t\\t\\t\\t\\t\\tattributes: attributes,\\n\\t\\t\\t\\t\\t\\tchildren: children\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// Internal link\\n\\t\\t\\t\\t\\tout.push({\\n\\t\\t\\t\\t\\t\\ttype: \\\"link\\\",\\n\\t\\t\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\t\\t\\tto: { type: \\\"string\\\", value: decodeURI(currentNode.href.substr(1)) }\\n\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\tchildren: children\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"code\\\":\\n\\t\\t\\tout.push({\\n\\t\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\t\\ttag: currentNode.block ? \\\"pre\\\" : \\\"code\\\",\\n\\t\\t\\t\\tchildren: [{ type: \\\"text\\\", text: currentNode.content }]\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"fence\\\":\\n\\t\\t\\tout.push({\\n\\t\\t\\t\\ttype: \\\"codeblock\\\",\\n\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\tlanguage: { type: \\\"string\\\", value: currentNode.params },\\n\\t\\t\\t\\t\\tcode: { type: \\\"string\\\", value: currentNode.content }\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"image\\\":\\n\\t\\t\\tout.push({\\n\\t\\t\\t\\ttype: \\\"image\\\",\\n\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\ttooltip: { type: \\\"string\\\", value: currentNode.alt },\\n\\t\\t\\t\\t\\tsource: { type: \\\"string\\\", value: decodeURIComponent(currentNode.src) }\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"softbreak\\\":\\n\\t\\t\\tif (remarkableOpts.breaks) {\\n\\t\\t\\t\\tout.push({\\n\\t\\t\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\t\\t\\ttag: \\\"br\\\",\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\taccumulatedText = accumulatedText + '\\\\n';\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"hardbreak\\\":\\n\\t\\t\\tout.push({\\n\\t\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\t\\ttag: \\\"br\\\",\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"th_open\\\":\\n\\t\\tcase \\\"td_open\\\":\\n\\t\\t\\tvar elementTag = currentNode.type.slice(0, 2);\\n\\t\\t\\ti = withChildren(i, currentNode.level, elementTag + \\\"_close\\\", remarkableTree, function(children) {\\n\\t\\t\\t\\tvar attributes = {};\\n\\t\\t\\t\\tif (currentNode.align) {\\n\\t\\t\\t\\t\\tattributes.style = { type: \\\"string\\\", value: \\\"text-align:\\\" + currentNode.align };\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tout.push({\\n\\t\\t\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\t\\t\\ttag: elementTag,\\n\\t\\t\\t\\t\\tattributes: attributes,\\n\\t\\t\\t\\t\\tchildren: children\\n\\t\\t\\t\\t});\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"hr\\\":\\n\\t\\t\\tout.push({\\n\\t\\t\\t\\ttype: 'element',\\n\\t\\t\\t\\ttag: 'hr',\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"inline\\\":\\n\\t\\t\\tout = out.concat(convertNodes(currentNode.children, true));\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase \\\"text\\\":\\n\\t\\t\\t// We need to merge this text block with the upcoming text block and parse it all together.\\n\\t\\t\\taccumulatedText = accumulatedText + currentNode.content;\\n\\t\\t\\tbreak;\\n\\n\\t\\tdefault:\\n\\t\\t\\tif (currentNode.type.substr(currentNode.type.length - 5) === \\\"_open\\\") {\\n\\t\\t\\t\\tvar tagName = currentNode.type.substr(0, currentNode.type.length - 5);\\n\\t\\t\\t\\ti = wrappedElement(tagName, i, currentNode.level, tagName + \\\"_close\\\", remarkableTree);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconsole.error(\\\"Unknown node type: \\\" + currentNode.type, currentNode);\\n\\t\\t\\t\\tout.push({\\n\\t\\t\\t\\t\\ttype: \\\"text\\\",\\n\\t\\t\\t\\t\\ttext: currentNode.content\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// We test to see if we process the block now, or if there's\\n\\t\\t// more to accumulate first.\\n\\t\\tif (accumulatedText\\n\\t\\t\\t&& (\\n\\t\\t\\t\\tremarkableOpts.breaks ||\\n\\t\\t\\t\\t(i+1) >= remarkableTree.length ||\\n\\t\\t\\t\\t!accumulatingTypes[remarkableTree[i+1].type]\\n\\t\\t\\t)\\n\\t\\t) {\\n\\t\\t\\t// The Markdown compiler thinks this is just text.\\n\\t\\t\\t// Hand off to the WikiText parser to see if there's more to render\\n\\t\\t\\t// But only if it's configured to, and we have more than whitespace\\n\\t\\t\\tif (!pluginOpts.renderWikiText || accumulatedText.match(/^\\\\s*$/)) {\\n\\t\\t\\t\\tout.push({\\n\\t\\t\\t\\t\\ttype: \\\"text\\\",\\n\\t\\t\\t\\t\\ttext: accumulatedText\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// If we're inside a block element (div, p, td, h1), and this is the first child in the tree,\\n\\t\\t\\t\\t// handle as a block-level parse. Otherwise not.\\n\\t\\t\\t\\tvar parseAsInline = !(isStartOfInline && i === 0);\\n\\t\\t\\t\\tvar textToParse = accumulatedText;\\n\\t\\t\\t\\tif (pluginOpts.renderWikiTextPragma !== \\\"\\\") {\\n\\t\\t\\t\\t\\ttextToParse = pluginOpts.renderWikiTextPragma + \\\"\\\\n\\\" + textToParse;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar wikiParser = $tw.wiki.parseText(\\\"text/vnd.tiddlywiki\\\", textToParse, {\\n\\t\\t\\t\\t\\tparseAsInline: parseAsInline\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tvar rs = wikiParser.tree;\\n\\n\\t\\t\\t\\t// If we parsed as a block, but the root element the WikiText parser gave is a paragraph,\\n\\t\\t\\t\\t// we should discard the paragraph, since the way Remarkable nests its nodes, this \\\"inline\\\"\\n\\t\\t\\t\\t// node is always inside something else that's a block-level element\\n\\t\\t\\t\\tif (!parseAsInline\\n\\t\\t\\t\\t\\t&& rs.length === 1\\n\\t\\t\\t\\t\\t&& rs[0].type === \\\"element\\\"\\n\\t\\t\\t\\t\\t&& rs[0].tag === \\\"p\\\"\\n\\t\\t\\t\\t) {\\n\\t\\t\\t\\t\\trs = rs[0].children;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// If the original text element started with a space, add it back in\\n\\t\\t\\t\\tif (rs.length > 0\\n\\t\\t\\t\\t\\t&& rs[0].type === \\\"text\\\"\\n\\t\\t\\t\\t\\t&& (accumulatedText[0] === \\\" \\\" || accumulatedText[0] === \\\"\\\\n\\\")\\n\\t\\t\\t\\t) {\\n\\t\\t\\t\\t\\trs[0].text = \\\" \\\" + rs[0].text;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tout = out.concat(rs);\\n\\t\\t\\t}\\n\\t\\t\\taccumulatedText = '';\\n\\t\\t}\\n\\t}\\n\\treturn out;\\n}\\n\\nvar MarkdownParser = function(type, text, options) {\\n\\tvar tree = md.parse(text, {});\\n\\t//console.debug(tree);\\n\\ttree = convertNodes(tree);\\n\\t//console.debug(tree);\\n\\n\\tthis.tree = tree;\\n};\\n\\nexports[\\\"text/x-markdown\\\"] = MarkdownParser;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"parser\"\n }\n }\n}"},"$:/plugins/tiddlywiki/menubar":{"title":"$:/plugins/tiddlywiki/menubar","name":"Menu Bar","description":"Menu Bar","list":"readme config","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/DefaultColourMappings/menubar-foreground\": {\n \"title\": \"$:/config/DefaultColourMappings/menubar-foreground\",\n \"text\": \"#fff\"\n },\n \"$:/config/DefaultColourMappings/menubar-background\": {\n \"title\": \"$:/config/DefaultColourMappings/menubar-background\",\n \"text\": \"#5778d8\"\n },\n \"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/pagecontrols\": {\n \"title\": \"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/pagecontrols\",\n \"text\": \"hide\"\n },\n \"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/server\": {\n \"title\": \"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/server\",\n \"text\": \"hide\"\n },\n \"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/sidebar\": {\n \"title\": \"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/sidebar\",\n \"text\": \"hide\"\n },\n \"$:/config/plugins/menubar/breakpoint\": {\n \"title\": \"$:/config/plugins/menubar/breakpoint\",\n \"text\": \"620px\"\n },\n \"$:/plugins/tiddlywiki/menubar/config\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/config\",\n \"tags\": \"$:/tags/ControlPanel/Toolbars\",\n \"caption\": \"Menu Bar\",\n \"text\": \"\\\\define config-base() $:/config/plugins/menubar/MenuItems/Visibility/\\n\\n! Menu Bar Configuration\\n\\n!! Menu Items\\n\\nSelect which menu items will be shown. You can also drag items to reorder them.\\n\\n<$set name=\\\"tv-config-toolbar-icons\\\" value=\\\"yes\\\">\\n\\n<$set name=\\\"tv-config-toolbar-text\\\" value=\\\"yes\\\">\\n\\n<$macrocall $name=\\\"list-tagged-draggable\\\" tag=\\\"$:/tags/MenuBar\\\" itemTemplate=\\\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\\\"/>\\n\\n</$set>\\n\\n</$set>\\n\\n!! Breakpoint Position\\n\\nThe breakpoint position between narrow and wide screens. Should include CSS units (eg. `400px`).\\n\\n<$edit-text tiddler=\\\"$:/config/plugins/menubar/breakpoint\\\" default=\\\"\\\" tag=\\\"input\\\"/>\\n\\n!! Menu Bar Colours\\n\\nTo change the colour of the menu bar, define the colours `menubar-foreground` and `menubar-background` in the currently selected palette\\n\"\n },\n \"$:/plugins/tiddlywiki/menubar/items/contents\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/items/contents\",\n \"caption\": \"Contents\",\n \"description\": \"Table of Contents\",\n \"is-dropdown\": \"yes\",\n \"tags\": \"$:/tags/MenuBar\",\n \"text\": \"<div class=\\\"tc-table-of-contents\\\">\\n\\n<<toc-selective-expandable 'TableOfContents'>>\\n\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/menubar/items/hamburger\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/items/hamburger\",\n \"tags\": \"$:/tags/MenuBar\",\n \"caption\": \"Hamburger\",\n \"description\": \"Show the full menu bar on a narrow screen\",\n \"custom-menu-content\": \"{{$:/plugins/tiddlywiki/menubar/items/hamburger}}\",\n \"show-when\": \"narrow\",\n \"text\": \"<$list filter=\\\"[[$:/state/popup/menubar/hamburger]get[text]else[no]match[no]]\\\">\\n<$button set=\\\"$:/state/popup/menubar/hamburger\\\" setTo=\\\"yes\\\">\\n{{$:/core/images/menu-button}}\\n</$button>\\n</$list>\\n<$list filter=\\\"[[$:/state/popup/menubar/hamburger]get[text]else[no]match[yes]]\\\">\\n<$button set=\\\"$:/state/popup/menubar/hamburger\\\" setTo=\\\"no\\\">\\n{{$:/core/images/close-button}}\\n</$button>\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/menubar/items/pagecontrols\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/items/pagecontrols\",\n \"tags\": \"$:/tags/MenuBar\",\n \"description\": \"Page controls from the sidebar\",\n \"caption\": \"Page controls\",\n \"custom-menu-content\": \"<$transclude tiddler=\\\"$:/plugins/tiddlywiki/menubar/items/pagecontrols\\\" mode=\\\"inline\\\"/>\",\n \"text\": \"\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/PageControlButtons/Visibility/$(listItem)$\\n\\\\end\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n<$set name=\\\"hidden\\\" value=<<config-title>>>\\n<$list filter=\\\"[<hidden>!text[hide]]\\\" storyview=\\\"pop\\\" variable=\\\"ignore\\\">\\n<$set name=\\\"tv-config-toolbar-class\\\" filter=\\\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\\\">\\n<$transclude tiddler=<<listItem>> mode=\\\"inline\\\"/>\\n</$set>\\n</$list>\\n</$set>\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/menubar/items/search\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/items/search\",\n \"custom-menu-content\": \"{{$:/plugins/tiddlywiki/menubar/items/search}}\",\n \"description\": \"Search\",\n \"caption\": \"Search\",\n \"tags\": \"$:/tags/MenuBar\",\n \"text\": \"\\\\define cancel-search-actions() <$action-deletetiddler $filter=\\\"[<__storeTitle__>] [<__tiddler__>] [<__selectionStateTitle__>]\\\"/>\\n\\n\\\\define input-accept-actions() <$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/>\\n\\n\\\\whitespace trim\\n<$vars searchTiddler=\\\"$:/temp/menubarsearch/input\\\" searchListState=<<qualify \\\"$:/state/search-list/selected-item\\\">> titleSearchFilter=\\\"[!is[system]search:title<userInput>sort[title]limit[250]]\\\" allSearchFilter=\\\"[!is[system]search<userInput>sort[title]limit[250]]\\\">\\n<span style=\\\"margin: 0 0.5em;\\\">\\n<$macrocall $name=\\\"keyboard-driven-input\\\" tiddler=\\\"$:/temp/menubarsearch\\\" storeTitle=<<searchTiddler>> selectionStateTitle=<<searchListState>> \\n\\t\\trefreshTitle=\\\"$:/temp/menubarsearch/refresh\\\" tag=\\\"input\\\" type=\\\"search\\\" focusPopup=\\\"$:/state/popup/menubar-search-dropdown\\\" \\n\\t\\tclass=\\\"tc-popup-handle tc-menu-show-when-wide\\\" placeholder=\\\"Search...\\\" default=\\\"\\\" cancelPopups=\\\"yes\\\" \\n\\t\\tprimaryListFilter=<<titleSearchFilter>> secondaryListFilter=<<allSearchFilter>> inputAcceptActions=<<input-accept-actions>> \\n\\t\\tinputCancelActions=<<cancel-search-actions>> filterMinLength={{$:/config/Search/MinLength}}/>\\n</span>\\n<$reveal tag=\\\"div\\\" class=\\\"tc-block-dropdown-wrapper\\\" state=\\\"$:/state/popup/menubar-search-dropdown\\\" type=\\\"nomatch\\\" text=\\\"\\\" default=\\\"\\\">\\n\\n<div class=\\\"tc-block-dropdown tc-search-drop-down\\\">\\n\\n<$list filter=\\\"[<searchTiddler>get[text]minlength[1]]\\\" emptyMessage=\\\"\\\"\\\"<div class=\\\"tc-search-results\\\">Type your search terms</div>\\\"\\\"\\\" variable=\\\"ignore\\\">\\n\\n<$list filter=\\\"[<searchTiddler>get[text]minlength{$:/config/Search/MinLength}limit[1]]\\\" emptyMessage=\\\"\\\"\\\"<div class=\\\"tc-search-results\\\">{{$:/language/Search/Search/TooShort}}</div>\\\"\\\"\\\" variable=\\\"listItem\\\">\\n\\n{{$:/core/ui/SearchResults}}\\n\\n</$list>\\n\\n</$list>\\n\\n</div>\\n\\n</$reveal>\\n\\n</$vars>\\n\"\n },\n \"$:/plugins/tiddlywiki/menubar/items/server\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/items/server\",\n \"tags\": \"$:/tags/MenuBar\",\n \"description\": \"Server options\",\n \"caption\": \"Server\",\n \"custom-menu-content\": \"<$transclude tiddler=\\\"$:/plugins/tiddlywiki/menubar/items/server\\\" mode=\\\"inline\\\"/>\",\n \"text\": \"<$list filter=\\\"[[$:/status/IsLoggedIn]get[text]else[no]match[yes]]\\\" variable=\\\"ignore\\\">\\n<$transclude tiddler=\\\"$:/core/ui/Buttons/save-wiki\\\" mode=\\\"inline\\\"/>\\n</$list>\\n<$list filter=\\\"[[$:/status/IsLoggedIn]get[text]else[no]match[no]]\\\" variable=\\\"ignore\\\">\\n<$button message=\\\"tm-login\\\">\\nLogin\\n</$button>\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/menubar/items/sidebar\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/items/sidebar\",\n \"caption\": \"Sidebar\",\n \"description\": \"Sidebar\",\n \"is-dropdown\": \"yes\",\n \"tags\": \"$:/tags/MenuBar\",\n \"text\": \"<$scrollable fallthrough=\\\"none\\\" class=\\\"tc-popup-keep tc-menubar-dropdown-sidebar\\\">\\n\\n<$transclude tiddler=\\\"$:/core/ui/SideBarSegments/tabs\\\" mode=\\\"inline\\\"/>\\n\\n</$scrollable>\\n\"\n },\n \"$:/plugins/tiddlywiki/menubar/items/topleftbar\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/items/topleftbar\",\n \"tags\": \"$:/tags/MenuBar\",\n \"description\": \"Items from $:/tags/TopLeftBar\",\n \"caption\": \"Legacy Top Left Bar\",\n \"custom-menu-content\": \"<$transclude tiddler=\\\"$:/plugins/tiddlywiki/menubar/items/topleftbar\\\" mode=\\\"inline\\\"/>\",\n \"text\": \"<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\\\" variable=\\\"listItem\\\" storyview=\\\"pop\\\">\\n\\n<$transclude tiddler=<<listItem>> mode=\\\"inline\\\"/>\\n\\n</$list>\"\n },\n \"$:/plugins/tiddlywiki/menubar/items/toprightbar\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/items/toprightbar\",\n \"tags\": \"$:/tags/MenuBar\",\n \"description\": \"Items from $:/tags/TopRightBar\",\n \"caption\": \"Legacy Top Right Bar\",\n \"custom-menu-content\": \"<$transclude tiddler=\\\"$:/plugins/tiddlywiki/menubar/items/toprightbar\\\" mode=\\\"inline\\\"/>\",\n \"custom-menu-styles-wide\": \"float: right;\",\n \"text\": \"<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]reverse[]]\\\" variable=\\\"listItem\\\" storyview=\\\"pop\\\">\\n\\n<$transclude tiddler=<<listItem>> mode=\\\"inline\\\"/>\\n\\n</$list>\"\n },\n \"$:/plugins/tiddlywiki/menubar/menu\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/menu\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"text\": \"\\\\define menubar-inner(size)\\n<ul class=\\\"tc-menubar-list\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]]\\\">\\n<$list filter=\\\"[<currentTiddler>addprefix[$:/config/plugins/menubar/MenuItems/Visibility/]get[text]] ~show +[match[show]]\\\" variable=\\\"ignore\\\">\\n<$list filter=\\\"[[$size$]match[wide]] ~[<currentTiddler>get[show-when]match[$size$]] ~[{$:/state/popup/menubar/hamburger}match[yes]]\\\" variable=\\\"ignore\\\">\\n<li style={{!!custom-menu-styles-$size$}} class={{{ [<currentTiddler>get[show-when]addprefix[tc-menubar-]] tc-menubar-item +[join[ ]] }}}>\\n<$list filter=\\\"[<currentTiddler>!is-dropdown[yes]]\\\" variable=\\\"listItem\\\" emptyMessage=\\\"\\\"\\\"\\n\\t<!-- Dropdown -->\\n\\t<$set name=\\\"dropdown-state\\\" value=<<qualify \\\"$:/state/popup/topmenu/dropdown/\\\">>>\\n\\t<$set name=\\\"dropdown-state\\\" value={{{ [<dropdown-state>addsuffix<currentTiddler>] }}}>\\n\\t<$button popup=<<dropdown-state>> selectedClass=\\\"tc-selected\\\">\\n\\t<$set name=\\\"tv-wikilinks\\\" value=\\\"no\\\">\\n\\t<$transclude field=\\\"caption\\\" mode=\\\"inline\\\"/>\\n\\t<$text text=\\\" \\\"/>\\n\\t<span class=\\\"tc-menubar-dropdown-arrow\\\">\\n\\t<$transclude tiddler=\\\"$:/core/images/down-arrow\\\" mode=\\\"inline\\\"/>\\n\\t</span>\\n\\t</$set>\\n\\t</$button>\\n\\t</$set>\\n\\t</$set>\\n\\\"\\\"\\\">\\n<$list filter=\\\"[<currentTiddler>has[custom-menu-content]]\\\" variable=\\\"listItem\\\" emptyMessage=\\\"\\\"\\\"\\n\\t<!-- Link -->\\n\\t<$link to={{!!target}}>\\n\\t<$set name=\\\"tv-wikilinks\\\" value=\\\"no\\\">\\n\\t<$transclude field=\\\"caption\\\" mode=\\\"inline\\\"/>\\n\\t</$set>\\n\\t</$link>\\n\\\"\\\"\\\">\\n<!-- Custom content -->\\n<$transclude field=\\\"custom-menu-content\\\" mode=\\\"inline\\\"/>\\n</$list>\\n</$list>\\n</li>\\n</$list>\\n</$list>\\n</$list>\\n</ul>\\n\\\\end\\n\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]limit[1]]\\\" variable=\\\"listItem\\\">\\n<nav class=\\\"tc-menubar tc-adjust-top-of-scroll\\\">\\n<div class=\\\"tc-menubar-narrow\\\">\\n<<menubar-inner narrow>>\\n</div>\\n<div class=\\\"tc-menubar-wide\\\">\\n<<menubar-inner wide>>\\n</div>\\n<div style=\\\"clear:both;\\\"/>\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]is-dropdown[yes]]\\\">\\n<$list filter=\\\"[<currentTiddler>addprefix[$:/config/plugins/menubar/MenuItems/Visibility/]get[text]] ~show +[match[show]]\\\" variable=\\\"ignore\\\">\\n<$set name=\\\"dropdown-state\\\" value=<<qualify \\\"$:/state/popup/topmenu/dropdown/\\\">>>\\n<$set name=\\\"dropdown-state\\\" value={{{ [<dropdown-state>addsuffix<currentTiddler>] }}}>\\n<$reveal type=\\\"popup\\\" state=<<dropdown-state>> class={{{ [<currentTiddler>get[dropdown]get[class]] }}} tag=\\\"div\\\">\\n<div class=\\\"tc-drop-down\\\">\\n<$transclude/>\\n</div>\\n</$reveal>\\n</$set>\\n</$set>\\n</$list>\\n</$list>\\n</nav>\\n</$list>\\n\"\n },\n \"$:/core/ui/PageTemplate/topleftbar\": {\n \"title\": \"$:/core/ui/PageTemplate/topleftbar\",\n \"text\": \"<!-- The menubar plugin overrides this tiddler to remove the core top left menu. The menu items that it would include are instead included in the menubar -->\"\n },\n \"$:/core/ui/PageTemplate/toprightbar\": {\n \"title\": \"$:/core/ui/PageTemplate/toprightbar\",\n \"text\": \"<!-- The menubar plugin overrides this tiddler to remove the core top right menu. The menu items that it would include are instead included in the menubar -->\"\n },\n \"$:/plugins/tiddlywiki/menubar/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/readme\",\n \"text\": \"!! Introduction\\n\\nThis plugin provides a menu bar with the following features:\\n\\n* Menu items take the form of simple text links, dropdowns, or entirely custom content\\n* Menu items can be individually enabled via the control panel\\n* Responds to reduced screen width by abbreviating the menu items to a \\\"hamburger\\\" dropdown\\n\\n!! Menu Item Tiddlers\\n\\nMenu items are tagged <<tag $:/tags/MenuBar>>. The following fields are used by this plugin:\\n\\n|!Field Name |!Purpose |\\n|title |Each menu item must have a unique title (not shown to the user) |\\n|description |Description for use in listings |\\n|tags |Must contain `$:/tags/MenuBar` |\\n|caption |The text that is displayed for the menu item. Avoid links, using `~` to suppress CamelCase links if required |\\n|target |For simple link menu items specifies a tiddler title as the target of the link |\\n|is-dropdown |Set to `yes` to indicate a dropdown menu item |\\n|text |For dropdown menu items, specifies the body of the dropdown |\\n|custom-menu-content |Optional wikitext to be displayed in place of the caption |\\n|custom-menu-styles-wide |Optional string of styles to be applied to menu item when the menubar is wide |\\n|custom-menu-styles-narrow |Optional string of styles to be applied to menu item when the menubar is narrow |\\n\\nCustom menu items should make sure that the clickable link or button is an immediate child, and not wrapped in another element.\\n\\nNote that menu items can be pushed to the right of the menu bar setting the ''custom-menu-styles'' field to `float: right;`.\\n\"\n },\n \"$:/plugins/tiddlywiki/menubar/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/menubar/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\define breakpoint-plus-one()\\n<$text text={{{ [{$:/config/plugins/menubar/breakpoint}removesuffix[px]add[1]addsuffix[px]] }}} />\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\nnav.tc-menubar {\\n\\tposition: fixed;\\n\\tz-index: 850;\\n\\tdisplay: inline-block;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tleft: 0;\\n}\\n\\nnav.tc-menubar ul.tc-menubar-list {\\n\\tposition: relative;\\n\\tlist-style-type: none;\\n\\tmargin: 0;\\n\\tpadding: 0 0 0 42px;\\n\\tbackground: <<colour background>>;\\n\\tbackground: <<colour menubar-background>>;\\n\\t<<box-shadow \\\"1px 1px 5px rgba(0, 0, 0, 0.3)\\\">>\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\thtml nav.tc-menubar ul.tc-menubar-list {\\n\\t\\tpadding: 0 0 0 8px;\\n\\t}\\n\\n}\\n\\nnav.tc-menubar li.tc-menubar-item {\\n\\tdisplay: inline-block;\\n\\tmargin: 0;\\n\\tpadding: 0;\\n}\\n\\nnav.tc-menubar .tc-menubar-narrow li.tc-menubar-item {\\n\\tdisplay: block;\\n}\\n\\nnav.tc-menubar li.tc-menubar-item > a,\\nnav.tc-menubar li.tc-menubar-item > button {\\n\\tdisplay: inline-block;\\n/*\\ttext-transform: uppercase; */\\n\\tline-height: 1;\\n\\tfont-weight: 700;\\n\\tcolor: <<colour foreground>>;\\n\\tcolor: <<colour menubar-foreground>>;\\n\\tfill: <<colour foreground>>;\\n\\tfill: <<colour menubar-foreground>>;\\n\\ttext-decoration: none;\\n\\tpadding: 0.5em;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\tcursor: pointer;\\n\\tborder-radius: 0;\\n\\ttext-decoration: none;\\n}\\n\\nnav.tc-menubar li.tc-menubar-item > a.tc-selected,\\nnav.tc-menubar li.tc-menubar-item > button.tc-selected {\\n\\tbackground: <<colour foreground>>;\\n\\tbackground: <<colour menubar-foreground>>;\\n\\tcolor: <<colour background>>;\\n\\tcolor: <<colour menubar-background>>;\\n\\tfill: <<colour background>>;\\n\\tfill: <<colour menubar-background>>;\\n}\\n\\nnav.tc-menubar li.tc-menubar-item svg {\\n\\ttransition: none;\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tfill: <<colour foreground>>;\\n\\tfill: <<colour menubar-foreground>>;\\n}\\n\\nnav.tc-menubar li.tc-menubar-item .tc-menubar-dropdown-arrow svg {\\n\\twidth: 0.5em;\\n\\theight: 0.5em;\\n}\\n\\nnav.tc-menubar li.tc-menubar-item > a.tc-selected svg,\\nnav.tc-menubar li.tc-menubar-item > button.tc-selected svg {\\n\\tfill: <<colour background>>;\\n\\tfill: <<colour menubar-background>>;\\n}\\n\\nnav.tc-menubar li.tc-menubar-item > a:hover,\\nnav.tc-menubar li.tc-menubar-item > button:hover svg,\\nnav.tc-menubar li.tc-menubar-item > button:hover {\\n\\tbackground: <<colour foreground>>;\\n\\tbackground: <<colour menubar-foreground>>;\\n\\tcolor: <<colour background>>;\\n\\tcolor: <<colour menubar-background>>;\\n\\tfill: <<colour background>>;\\n\\tfill: <<colour menubar-background>>;\\n\\tborder-radius: 0;\\n\\ttext-decoration: none;\\n}\\n\\nnav.tc-menubar li.tc-menubar-item > a:active,\\nnav.tc-menubar li.tc-menubar-item > button:active svg,\\nnav.tc-menubar li.tc-menubar-item > button:active {\\n\\tbackground: <<colour foreground>>;\\n\\tbackground: <<colour menubar-foreground>>;\\n\\tcolor: <<colour background>>;\\n\\tcolor: <<colour menubar-background>>;\\n\\tfill: <<colour background>>;\\n\\tfill: <<colour menubar-background>>;\\n\\tborder-radius: 0;\\n\\ttext-decoration: none;\\n}\\n\\nnav.tc-menubar .tc-drop-down,\\nnav.tc-menubar .tc-block-dropdown {\\n\\tmax-width: 70vw;\\n\\tmax-height: 70vh;\\n\\toverflow: auto;\\n}\\n\\nnav.tc-menubar .tc-drop-down a {\\n\\ttext-decoration: none;\\n}\\n\\nnav.tc-menubar .tc-drop-down .tc-table-of-contents button {\\n\\tdisplay: inline-block;\\n\\twidth: auto;\\n}\\n\\nnav.tc-menubar .tc-drop-down ol {\\n\\tmargin: 0;\\n}\\n\\nnav.tc-menubar .tc-drop-down .tc-menubar-dropdown-sidebar a,\\nnav.tc-menubar .tc-drop-down .tc-menubar-dropdown-sidebar button {\\n\\tdisplay: inline;\\n\\twidth: auto;\\n}\\n\\nnav.tc-menubar .tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n}\\n\\n@media (max-width: {{$:/config/plugins/menubar/breakpoint}}) {\\n\\n\\t.tc-menubar-wide {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n}\\n\\n@media (min-width: <<breakpoint-plus-one>>) {\\n\\n\\tnav.tc-menubar li.tc-menubar-item.tc-menubar-narrow,\\n\\t.tc-menubar-narrow {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n}\\n\\n\\n\"\n },\n \"$:/tags/MenuBar\": {\n \"title\": \"$:/tags/MenuBar\",\n \"list\": \"$:/plugins/tiddlywiki/menubar/items/hamburger $:/plugins/tiddlywiki/menubar/items/topleftbar $:/plugins/tiddlywiki/menubar/items/contents $:/plugins/tiddlywiki/menubar/items/search $:/plugins/tiddlywiki/menubar/items/pagecontrols $:/plugins/tiddlywiki/menubar/items/server $:/plugins/tiddlywiki/menubar/items/toprightbar\"\n }\n }\n}"},"$:/plugins/tiddlywiki/mobiledragdrop":{"title":"$:/plugins/tiddlywiki/mobiledragdrop","name":"Mobile Drag Drop","description":"Mobile drag and drop shim","author":"Tim Ruffles","list":"readme license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/mobiledragdrop/ios-drag-drop.js\": {\n \"text\": \"(function(doc) {\\n\\nfunction _exposeIosHtml5DragDropShim(config) {\\n log = noop; // noOp, remove this line to enable debugging\\n\\n var coordinateSystemForElementFromPoint;\\n\\n var DRAG_OVER_EMIT_FREQ = 50;\\n\\n function main() {\\n config = config || {};\\n if (!config.hasOwnProperty(\\\"simulateAnchorClick\\\")) config.simulateAnchorClick = true;\\n\\n coordinateSystemForElementFromPoint = navigator.userAgent.match(/OS [1-4](?:_\\\\d+)+ like Mac/) ? \\\"page\\\" : \\\"client\\\";\\n\\n var div = doc.createElement('div');\\n var dragDiv = 'draggable' in div;\\n var evts = 'ondragstart' in div && 'ondrop' in div;\\n\\n var needsPatch = !(dragDiv || evts) || /iPad|iPhone|iPod|Android/.test(navigator.userAgent);\\n log((needsPatch ? \\\"\\\" : \\\"not \\\") + \\\"patching html5 drag drop\\\");\\n\\n if(!needsPatch) {\\n return;\\n }\\n\\n if(!config.enableEnterLeave) {\\n DragDrop.prototype.synthesizeEnterLeave = noop;\\n }\\n\\n if(config.holdToDrag){\\n doc.addEventListener(\\\"touchstart\\\", touchstartDelay(config.holdToDrag), {passive:false});\\n }\\n else {\\n doc.addEventListener(\\\"touchstart\\\", touchstart, {passive:false});\\n }\\n }\\n\\n function DragDrop(event, el) {\\n\\n this.dragData = {};\\n this.dragDataTypes = [];\\n this.dragImage = null;\\n this.dragImageTransform = null;\\n this.dragImageWebKitTransform = null;\\n this.customDragImage = null;\\n this.customDragImageX = null;\\n this.customDragImageY = null;\\n this.el = el || event.target;\\n this.dragOverTimer = null;\\n this.lastMoveEvent = null;\\n\\n log(\\\"dragstart\\\");\\n\\n if (this.dispatchDragStart()) {\\n this.createDragImage();\\n this.listen();\\n }\\n }\\n\\n DragDrop.prototype = {\\n listen: function() {\\n var move = onEvt(doc, \\\"touchmove\\\", this.move, this);\\n var end = onEvt(doc, \\\"touchend\\\", ontouchend, this);\\n var cancel = onEvt(doc, \\\"touchcancel\\\", cleanup, this);\\n\\n function ontouchend(event) {\\n this.dragend(event, event.target);\\n cleanup.call(this);\\n }\\n function cleanup() {\\n log(\\\"cleanup\\\");\\n this.dragDataTypes = [];\\n if (this.dragImage !== null) {\\n this.dragImage.parentNode.removeChild(this.dragImage);\\n this.dragImage = null;\\n this.dragImageTransform = null;\\n this.dragImageWebKitTransform = null;\\n }\\n this.customDragImage = null;\\n this.customDragImageX = null;\\n this.customDragImageY = null;\\n this.el = this.dragData = null;\\n return [move, end, cancel].forEach(function(handler) {\\n return handler.off();\\n });\\n }\\n },\\n move: function(event) {\\n event.preventDefault();\\n var pageXs = [], pageYs = [];\\n [].forEach.call(event.changedTouches, function(touch) {\\n pageXs.push(touch.pageX);\\n pageYs.push(touch.pageY);\\n });\\n\\n var x = average(pageXs) - (this.customDragImageX || parseInt(this.dragImage.offsetWidth, 10) / 2);\\n var y = average(pageYs) - (this.customDragImageY || parseInt(this.dragImage.offsetHeight, 10) / 2);\\n this.translateDragImage(x, y);\\n\\n this.synthesizeEnterLeave(event);\\n this.synthesizeOver(event);\\n },\\n // We use translate instead of top/left because of sub-pixel rendering and for the hope of better performance\\n // http://www.paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/\\n translateDragImage: function(x, y) {\\n var translate = \\\"translate(\\\" + x + \\\"px,\\\" + y + \\\"px) \\\";\\n\\n if (this.dragImageWebKitTransform !== null) {\\n this.dragImage.style[\\\"-webkit-transform\\\"] = translate + this.dragImageWebKitTransform;\\n }\\n if (this.dragImageTransform !== null) {\\n this.dragImage.style.transform = translate + this.dragImageTransform;\\n }\\n },\\n synthesizeEnterLeave: function(event) {\\n var target = elementFromTouchEvent(this.el,event)\\n if (target != this.lastEnter) {\\n if (this.lastEnter) {\\n this.dispatchLeave(event);\\n }\\n this.lastEnter = target;\\n if (this.lastEnter) {\\n this.dispatchEnter(event);\\n }\\n }\\n },\\n synthesizeOver: function(event) {\\n this.lastMoveEvent = event;\\n if(this.lastEnter && !this.dragOverTimer) {\\n this.dragOverTimer = setInterval(this.dispatchOver.bind(this), DRAG_OVER_EMIT_FREQ);\\n }\\n },\\n clearDragOverTimer: function() {\\n if(this.dragOverTimer) {\\n clearInterval(this.dragOverTimer);\\n this.dragOverTimer = null;\\n }\\n },\\n dragend: function(event) {\\n\\n // we'll dispatch drop if there's a target, then dragEnd.\\n // drop comes first http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#drag-and-drop-processing-model\\n log(\\\"dragend\\\");\\n\\n if (this.lastEnter) {\\n this.dispatchLeave(event);\\n }\\n\\n var target = elementFromTouchEvent(this.el,event)\\n if (target) {\\n log(\\\"found drop target \\\" + target.tagName);\\n this.dispatchDrop(target, event);\\n } else {\\n log(\\\"no drop target\\\");\\n }\\n\\n var dragendEvt = doc.createEvent(\\\"Event\\\");\\n dragendEvt.initEvent(\\\"dragend\\\", true, true);\\n this.el.dispatchEvent(dragendEvt);\\n this.clearDragOverTimer();\\n },\\n dispatchDrop: function(target, event) {\\n var dropEvt = doc.createEvent(\\\"Event\\\");\\n dropEvt.initEvent(\\\"drop\\\", true, true);\\n\\n var touch = event.changedTouches[0];\\n var x = touch[coordinateSystemForElementFromPoint + 'X'];\\n var y = touch[coordinateSystemForElementFromPoint + 'Y'];\\n\\n var targetOffset = getOffset(target);\\n\\n dropEvt.offsetX = x - targetOffset.x;\\n dropEvt.offsetY = y - targetOffset.y;\\n\\n dropEvt.dataTransfer = {\\n types: this.dragDataTypes,\\n getData: function(type) {\\n return this.dragData[type];\\n }.bind(this),\\n dropEffect: \\\"move\\\"\\n };\\n dropEvt.preventDefault = function() {\\n // https://www.w3.org/Bugs/Public/show_bug.cgi?id=14638 - if we don't cancel it, we'll snap back\\n }.bind(this);\\n\\n once(doc, \\\"drop\\\", function() {\\n log(\\\"drop event not canceled\\\");\\n },this);\\n\\n target.dispatchEvent(dropEvt);\\n },\\n dispatchEnter: function(event) {\\n\\n var enterEvt = doc.createEvent(\\\"Event\\\");\\n enterEvt.initEvent(\\\"dragenter\\\", true, true);\\n enterEvt.dataTransfer = {\\n types: this.dragDataTypes,\\n getData: function(type) {\\n return this.dragData[type];\\n }.bind(this)\\n };\\n\\n var touch = event.changedTouches[0];\\n enterEvt.pageX = touch.pageX;\\n enterEvt.pageY = touch.pageY;\\n enterEvt.clientX = touch.clientX;\\n enterEvt.clientY = touch.clientY;\\n\\n this.lastEnter.dispatchEvent(enterEvt);\\n },\\n dispatchOver: function() {\\n\\n var overEvt = doc.createEvent(\\\"Event\\\");\\n overEvt.initEvent(\\\"dragover\\\", true, true);\\n overEvt.dataTransfer = {\\n types: this.dragDataTypes,\\n getData: function(type) {\\n return this.dragData[type];\\n }.bind(this)\\n };\\n\\n var touch = this.lastMoveEvent.changedTouches[0];\\n overEvt.pageX = touch.pageX;\\n overEvt.pageY = touch.pageY;\\n overEvt.clientX = touch.clientX;\\n overEvt.clientY = touch.clientY;\\n\\n this.lastEnter.dispatchEvent(overEvt);\\n },\\n dispatchLeave: function(event) {\\n\\n var leaveEvt = doc.createEvent(\\\"Event\\\");\\n leaveEvt.initEvent(\\\"dragleave\\\", true, true);\\n leaveEvt.dataTransfer = {\\n types: this.dragDataTypes,\\n getData: function(type) {\\n return this.dragData[type];\\n }.bind(this)\\n };\\n\\n var touch = event.changedTouches[0];\\n leaveEvt.pageX = touch.pageX;\\n leaveEvt.pageY = touch.pageY;\\n leaveEvt.clientX = touch.clientX;\\n leaveEvt.clientY = touch.clientY;\\n\\n this.lastEnter.dispatchEvent(leaveEvt);\\n this.lastEnter = null;\\n this.clearDragOverTimer();\\n },\\n dispatchDragStart: function() {\\n var evt = doc.createEvent(\\\"Event\\\");\\n evt.initEvent(\\\"dragstart\\\", true, true);\\n evt.dataTransfer = {\\n setData: function(type, val) {\\n this.dragData[type] = val;\\n if (this.dragDataTypes.indexOf(type) == -1) {\\n this.dragDataTypes[this.dragDataTypes.length] = type;\\n }\\n return val;\\n }.bind(this),\\n setDragImage: function(el, x, y){\\n this.customDragImage = el;\\n this.customDragImageX = x\\n this.customDragImageY = y\\n }.bind(this),\\n dropEffect: \\\"move\\\"\\n };\\n return this.el.dispatchEvent(evt);\\n },\\n createDragImage: function() {\\n if (this.customDragImage) {\\n this.dragImage = this.customDragImage.cloneNode(true);\\n duplicateStyle(this.customDragImage, this.dragImage);\\n } else {\\n this.dragImage = this.el.cloneNode(true);\\n duplicateStyle(this.el, this.dragImage);\\n }\\n this.dragImage.style.opacity = \\\"0.5\\\";\\n this.dragImage.style.position = \\\"absolute\\\";\\n this.dragImage.style.left = \\\"0px\\\";\\n this.dragImage.style.top = \\\"0px\\\";\\n this.dragImage.style.zIndex = \\\"999999\\\";\\n\\n var transform = this.dragImage.style.transform;\\n if (typeof transform !== \\\"undefined\\\") {\\n this.dragImageTransform = \\\"\\\";\\n if (transform != \\\"none\\\") {\\n this.dragImageTransform = transform.replace(/translate\\\\(\\\\D*\\\\d+[^,]*,\\\\D*\\\\d+[^,]*\\\\)\\\\s*/g, '');\\n }\\n }\\n\\n var webkitTransform = this.dragImage.style[\\\"-webkit-transform\\\"];\\n if (typeof webkitTransform !== \\\"undefined\\\") {\\n this.dragImageWebKitTransform = \\\"\\\";\\n if (webkitTransform != \\\"none\\\") {\\n this.dragImageWebKitTransform = webkitTransform.replace(/translate\\\\(\\\\D*\\\\d+[^,]*,\\\\D*\\\\d+[^,]*\\\\)\\\\s*/g, '');\\n }\\n }\\n\\n this.translateDragImage(-9999, -9999);\\n\\n doc.body.appendChild(this.dragImage);\\n }\\n };\\n\\n // delayed touch start event\\n function touchstartDelay(delay) {\\n return function(evt){\\n var el = evt.target;\\n\\n do {\\n if (elementIsDraggable(el)) {\\n var heldItem = function() {\\n end.off();\\n cancel.off();\\n scroll.off();\\n touchstart(evt);\\n };\\n\\n var onReleasedItem = function() {\\n end.off();\\n cancel.off();\\n scroll.off();\\n clearTimeout(timer);\\n };\\n\\n var timer = setTimeout(heldItem, delay);\\n\\n var end = onEvt(el, 'touchend', onReleasedItem, this);\\n var cancel = onEvt(el, 'touchcancel', onReleasedItem, this);\\n var scroll = onEvt(window, 'scroll', onReleasedItem, this);\\n break;\\n }\\n } while ((el = el.parentNode) && el !== doc.body);\\n };\\n };\\n\\n // event listeners\\n function touchstart(evt) {\\n var el = evt.target;\\n do {\\n if (elementIsDraggable(el)) {\\n handleTouchStartOnAnchor(evt, el);\\n\\n evt.preventDefault();\\n new DragDrop(evt,el);\\n break;\\n }\\n } while((el = el.parentNode) && el !== doc.body);\\n }\\n\\n function elementIsDraggable(el){\\n // if an element is not draggable either explicitly or implicitly we can exit immediately\\n if(!el.draggable) return false;\\n\\n // if an element has been explicitly set to be draggable we're good to go\\n if(el.hasAttribute(\\\"draggable\\\")) return true;\\n\\n // otherwise we investigate the implicit option\\n return (!config.requireExplicitDraggable);\\n }\\n\\n function elementIsAnchor(el){\\n return el.tagName.toLowerCase() == \\\"a\\\";\\n }\\n\\n function handleTouchStartOnAnchor(evt, el){\\n // If draggable isn't explicitly set for anchors, then simulate a click event.\\n // Otherwise plain old vanilla links will stop working.\\n // https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Touch_events#Handling_clicks\\n if (!el.hasAttribute(\\\"draggable\\\") && elementIsAnchor(el) && config.simulateAnchorClick) {\\n var clickEvt = document.createEvent(\\\"MouseEvents\\\");\\n clickEvt.initMouseEvent(\\\"click\\\", true, true, el.ownerDocument.defaultView, 1,\\n evt.screenX, evt.screenY, evt.clientX, evt.clientY,\\n evt.ctrlKey, evt.altKey, evt.shiftKey, evt.metaKey, 0, null);\\n el.dispatchEvent(clickEvt);\\n log(\\\"Simulating click to anchor\\\");\\n }\\n }\\n\\n // DOM helpers\\n function elementFromTouchEvent(el,event) {\\n var touch = event.changedTouches[0];\\n var target = doc.elementFromPoint(\\n touch[coordinateSystemForElementFromPoint + \\\"X\\\"],\\n touch[coordinateSystemForElementFromPoint + \\\"Y\\\"]\\n );\\n return target;\\n }\\n\\n //calculate the offset position of an element (relative to the window, not the document)\\n function getOffset(el) {\\n var rect = el.getBoundingClientRect();\\n return {\\n \\\"x\\\": rect.left,\\n \\\"y\\\": rect.top\\n };\\n }\\n\\n function onEvt(el, event, handler, context) {\\n if(context) {\\n handler = handler.bind(context);\\n }\\n el.addEventListener(event, handler, {passive:false});\\n return {\\n off: function() {\\n return el.removeEventListener(event, handler, {passive:false});\\n }\\n };\\n }\\n\\n function once(el, event, handler, context) {\\n if(context) {\\n handler = handler.bind(context);\\n }\\n function listener(evt) {\\n handler(evt);\\n return el.removeEventListener(event,listener);\\n }\\n return el.addEventListener(event,listener);\\n }\\n\\n // duplicateStyle expects dstNode to be a clone of srcNode\\n function duplicateStyle(srcNode, dstNode) {\\n // Is this node an element?\\n if (srcNode.nodeType == 1) {\\n // Remove any potential conflict attributes\\n dstNode.removeAttribute(\\\"id\\\");\\n dstNode.removeAttribute(\\\"class\\\");\\n dstNode.removeAttribute(\\\"style\\\");\\n dstNode.removeAttribute(\\\"draggable\\\");\\n\\n // Clone the style\\n var cs = window.getComputedStyle(srcNode);\\n for (var i = 0; i < cs.length; i++) {\\n var csName = cs[i];\\n dstNode.style.setProperty(csName, cs.getPropertyValue(csName), cs.getPropertyPriority(csName));\\n }\\n\\n // Pointer events as none makes the drag image transparent to document.elementFromPoint()\\n dstNode.style.pointerEvents = \\\"none\\\";\\n }\\n\\n // Do the same for the children\\n if (srcNode.hasChildNodes()) {\\n for (var j = 0; j < srcNode.childNodes.length; j++) {\\n duplicateStyle(srcNode.childNodes[j], dstNode.childNodes[j]);\\n }\\n }\\n }\\n\\n // general helpers\\n function log(msg) {\\n console.log(msg);\\n }\\n\\n function average(arr) {\\n if (arr.length === 0) return 0;\\n return arr.reduce((function(s, v) {\\n return v + s;\\n }), 0) / arr.length;\\n }\\n\\n function noop() {}\\n\\n main();\\n\\n};\\n\\nif (typeof module === 'object' && typeof module.exports === 'object') {\\n module.exports = _exposeIosHtml5DragDropShim;\\n} else if (typeof window !== 'undefined') {\\n _exposeIosHtml5DragDropShim(window.iosDragDropShim);\\n}\\n})(document);\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/mobiledragdrop/ios-drag-drop.js\"\n },\n \"$:/plugins/tiddlywiki/mobiledragdrop/license\": {\n \"text\": \"Copyright (c) 2013 Tim Ruffles\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\"Software\\\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/mobiledragdrop/license\"\n },\n \"$:/plugins/tiddlywiki/mobiledragdrop/rawmarkup\": {\n \"title\": \"$:/plugins/tiddlywiki/mobiledragdrop/rawmarkup\",\n \"tags\": \"$:/tags/RawMarkupWikified\",\n \"text\": \"`<script>\\nvar iosDragDropShim = { enableEnterLeave: true, holdToDrag: 300 };`\\n{{$:/plugins/tiddlywiki/mobiledragdrop/ios-drag-drop.js}}\\n`</script>`\\n\"\n },\n \"$:/plugins/tiddlywiki/mobiledragdrop/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/mobiledragdrop/readme\",\n \"text\": \"This plugin provides a \\\"shim\\\" that enables HTML 5 compatible drag and drop operations on mobile browsers, including iOS and Android. The shim was created by Tim Ruffles and is published at https://github.com/timruffles/ios-html5-drag-drop-shim.\\n\\nAfter installing the plugin it is necessary to save the HTML file a second time before it will be fully enabled.\\n\"\n },\n \"$:/plugins/tiddlywiki/mobiledragdrop/startup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/mobiledragdrop/startup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/mobiledragdrop/startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nStartup initialisation\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"mobiledragdrop\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.after = [\\\"startup\\\"];\\nexports.synchronous = true;\\n\\nexports.startup = function() {\\n\\twindow.addEventListener(\\\"touchmove\\\", function() {});\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n }\n }\n}"},"$:/plugins/tiddlywiki/nodewebkitsaver":{"title":"$:/plugins/tiddlywiki/nodewebkitsaver","name":"nw.js Saver","description":"Saver for nw.js","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/core/modules/savers/nodewebkit.js\": {\n \"title\": \"$:/core/modules/savers/nodewebkit.js\",\n \"text\": \"/*\\\\\\ntitle: $:/core/modules/savers/nodewebkit.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes in the NW.js environment. Not required by TiddlyDesktop, which re-uses the TiddlyFox saver, but useful if you're embedding a single TiddlyWiki document into a NW.js app.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false, netscape: false, Components: false */\\n\\\"use strict\\\";\\n\\nvar NodeWebKitSaver = function(wiki) {\\n};\\n\\nNodeWebKitSaver.prototype.save = function(text,method,callback) {\\n\\t// Bail out unless this is a save (rather than a download)\\n\\tif(method !== \\\"save\\\") {\\n\\t\\treturn false;\\n\\t}\\n\\t// Get the pathname of this document\\n\\tvar pathname = document.location.pathname;\\n\\t// Test for a Windows path of the form /x:/blah/blah\\n\\tif(/^\\\\/[A-Z]\\\\:\\\\//i.test(pathname)) {\\n\\t\\t// Remove the leading slash\\n\\t\\tpathname = pathname.substr(1);\\n\\t\\t// Convert slashes to backslashes\\n\\t\\tpathname = pathname.replace(/\\\\//g,\\\"\\\\\\\\\\\");\\n\\t}\\n\\t// Try to save\\n\\tvar fs = require(\\\"fs\\\");\\n\\tfs.writeFile(pathname,text,callback);\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nNodeWebKitSaver.prototype.info = {\\n\\tname: \\\"nodewebkit\\\",\\n\\tpriority: 1700\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave = function(wiki) {\\n\\t// Check if we're running under node-webkit\\n\\treturn (typeof process == \\\"object\\\");\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create = function(wiki) {\\n\\treturn new NodeWebKitSaver(wiki);\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"saver\"\n },\n \"$:/plugins/tiddlywiki/nodewebkitsaver/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/nodewebkitsaver/readme\",\n \"text\": \"This plugin provides a ''saver'' module for saving changes when using TiddlyWiki directly under NW.js (previously known as node-webkit).\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/nodewebkitsaver]]\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/pluginlibrary":{"title":"$:/plugins/tiddlywiki/pluginlibrary","name":"Plugin Library","description":"Plugin library builder","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/pluginlibrary/asset-list-json\": {\n \"title\": \"$:/plugins/tiddlywiki/pluginlibrary/asset-list-json\",\n \"text\": \"`var assetList = `<$view tiddler=\\\"$:/UpgradeLibrary/List\\\"/>`;\\n`\"\n },\n \"$:/plugins/tiddlywiki/pluginlibrary/library.template.html\": {\n \"title\": \"$:/plugins/tiddlywiki/pluginlibrary/library.template.html\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline\\n<!doctype html>\\n<html>\\n<head>\\n<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=utf-8\\\" />\\n<meta name=\\\"application-name\\\" content=\\\"TiddlyWiki Plugin Library\\\" />\\n<meta name=\\\"application-version\\\" content=\\\"v0.0.0\\\" />\\n<meta name=\\\"copyright\\\" content=\\\"Copyright 2015 Jeremy Ruston\\\" />\\n<link id=\\\"faviconLink\\\" rel=\\\"shortcut icon\\\" href=\\\"favicon.ico\\\">\\n<title>Plugin Library</title>\\n<script>\\n{{$:/plugins/tiddlywiki/pluginlibrary/asset-list-json}}\\n{{$:/plugins/tiddlywiki/pluginlibrary/libraryserver.js}}\\n</script>\\n</head>\\n<body>\\n\\n<h1>HelloThere</h1>\\n\\n<p>This is the TiddlyWiki plugin library. It is not intended to be opened directly in the browser.</p>\\n\\n<p>See <a href=\\\"https://tiddlywiki.com/\\\" target=\\\"_blank\\\">https://tiddlywiki.com/</a> for details of how to install plugins.</p>\\n\\n</body>\\n</html>\"\n },\n \"$:/plugins/tiddlywiki/pluginlibrary/libraryserver.js\": {\n \"title\": \"$:/plugins/tiddlywiki/pluginlibrary/libraryserver.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/pluginlibrary/libraryserver.js\\ntype: application/javascript\\nmodule-type: library\\n\\nA simple HTTP-over-window.postMessage implementation of a standard TiddlyWeb-compatible server. It uses real HTTP to load the individual tiddler JSON files.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Listen for window messages\\nwindow.addEventListener(\\\"message\\\",function listener(event){\\n\\tconsole.log(\\\"plugin library: Received message from\\\",event.origin);\\n\\tconsole.log(\\\"plugin library: Message content\\\",event.data);\\n\\tswitch(event.data.verb) {\\n\\t\\tcase \\\"GET\\\":\\n\\t\\t\\tif(event.data.url === \\\"recipes/library/tiddlers.json\\\") {\\n\\t\\t\\t\\t// Route for recipes/library/tiddlers.json\\n\\t\\t\\t\\tevent.source.postMessage({\\n\\t\\t\\t\\t\\tverb: \\\"GET-RESPONSE\\\",\\n\\t\\t\\t\\t\\tstatus: \\\"200\\\",\\n\\t\\t\\t\\t\\tcookies: event.data.cookies,\\n\\t\\t\\t\\t\\turl: event.data.url,\\n\\t\\t\\t\\t\\ttype: \\\"application/json\\\",\\n\\t\\t\\t\\t\\tbody: JSON.stringify(assetList,null,4)\\n\\t\\t\\t\\t},\\\"*\\\");\\n\\t\\t\\t} else if(event.data.url.indexOf(\\\"recipes/library/tiddlers/\\\") === 0) {\\n\\t\\t\\t\\tvar url = \\\"recipes/library/tiddlers/\\\" + encodeURIComponent(removePrefix(event.data.url,\\\"recipes/library/tiddlers/\\\"));\\n\\t\\t\\t\\t// Route for recipes/library/tiddlers/<uri-encoded-tiddler-title>.json\\n\\t\\t\\t\\thttpGet(url,function(err,responseText) {\\n\\t\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\t\\tevent.source.postMessage({\\n\\t\\t\\t\\t\\t\\t\\tverb: \\\"GET-RESPONSE\\\",\\n\\t\\t\\t\\t\\t\\t\\tstatus: \\\"404\\\",\\n\\t\\t\\t\\t\\t\\t\\tcookies: event.data.cookies,\\n\\t\\t\\t\\t\\t\\t\\turl: event.data.url,\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\"text/plain\\\",\\n\\t\\t\\t\\t\\t\\t\\tbody: \\\"Not found\\\"\\n\\t\\t\\t\\t\\t\\t},\\\"*\\\");\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tevent.source.postMessage({\\n\\t\\t\\t\\t\\t\\t\\tverb: \\\"GET-RESPONSE\\\",\\n\\t\\t\\t\\t\\t\\t\\tstatus: \\\"200\\\",\\n\\t\\t\\t\\t\\t\\t\\tcookies: event.data.cookies,\\n\\t\\t\\t\\t\\t\\t\\turl: event.data.url,\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\"application/json\\\",\\n\\t\\t\\t\\t\\t\\t\\tbody: responseText\\n\\t\\t\\t\\t\\t\\t},\\\"*\\\");\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tevent.source.postMessage({\\n\\t\\t\\t\\t\\tverb: \\\"GET-RESPONSE\\\",\\n\\t\\t\\t\\t\\tstatus: \\\"404\\\",\\n\\t\\t\\t\\t\\tcookies: event.data.cookies,\\n\\t\\t\\t\\t\\turl: event.data.url,\\n\\t\\t\\t\\t\\ttype: \\\"text/plain\\\",\\n\\t\\t\\t\\t\\tbody: \\\"Not found\\\"\\n\\t\\t\\t\\t},\\\"*\\\");\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t}\\n},false);\\n\\n// Helper to remove string prefixes\\nfunction removePrefix(string,prefix) {\\n\\tif(string.indexOf(prefix) === 0) {\\n\\t\\treturn string.substr(prefix.length);\\n\\t} else {\\n\\t\\treturn string;\\n\\t}\\n}\\n\\n// Helper for HTTP GET\\nfunction httpGet(url,callback) {\\n\\tvar http = new XMLHttpRequest();\\n\\thttp.open(\\\"GET\\\",url,true);\\n\\thttp.onreadystatechange = function() {\\n\\t\\tif(http.readyState == 4 && http.status == 200) {\\n\\t\\t\\tcallback(null,http.responseText);\\n\\t\\t}\\n\\t};\\n\\thttp.send();\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/pluginlibrary/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/pluginlibrary/readme\",\n \"text\": \"This plugin is used behind the scenes by TiddlyWiki to build the plugin library.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/pluginlibrary]]\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/powered-by-tiddlywiki":{"title":"$:/plugins/tiddlywiki/powered-by-tiddlywiki","name":"Powered By TiddlyWiki","description":"Powered by TiddlyWiki banner","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/powered-by-tiddlywiki/banner\": {\n \"title\": \"$:/plugins/tiddlywiki/powered-by-tiddlywiki/banner\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"text\": \"<a href=\\\"https://tiddlywiki.com\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">\\n[img width=\\\"160px\\\" class=\\\"tc-powered-by-tiddlywiki-banner\\\" [$:/plugins/tiddlywiki/powered-by-tiddlywiki/powered-by-tiddlywiki.svg]]\\n</a>\\n\"\n },\n \"$:/plugins/tiddlywiki/powered-by-tiddlywiki/powered-by-tiddlywiki.svg\": {\n \"title\": \"$:/plugins/tiddlywiki/powered-by-tiddlywiki/powered-by-tiddlywiki.svg\",\n \"type\": \"image/svg+xml\",\n \"text\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\"?>\\n<svg width=\\\"896px\\\" height=\\\"176px\\\" viewBox=\\\"0 0 896 176\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n <rect fill=\\\"#5778D8\\\" x=\\\"0\\\" y=\\\"48\\\" width=\\\"896\\\" height=\\\"96\\\" rx=\\\"40\\\"></rect>\\n <rect fill=\\\"#5778D8\\\" x=\\\"0\\\" y=\\\"107\\\" width=\\\"896\\\" height=\\\"69\\\"></rect>\\n <path d=\\\"M509.45407,145.5 C500.298981,145.241109 496.272153,145.263373 491.609634,137.593336 L487.975741,137.697483 C483.746,137.509579 485.508738,137.594751 482.686885,137.454206 C477.968863,137.270547 478.724653,132.785957 477.894634,130.416559 C476.566884,122.373568 479.651651,114.28901 479.554337,106.244432 C479.519884,103.388798 475.480522,93.280884 474.037432,89.6670908 C469.513527,90.5191636 464.96508,90.681618 460.375565,90.9103975 C449.796709,90.8844742 439.289599,89.5885307 428.858455,87.9428201 C426.825687,96.3431567 420.783512,108.100814 425.777847,116.63814 C431.840041,125.46901 436.094195,127.915557 442.688237,128.448018 C449.282207,128.980047 450.771171,136.427581 449.175852,139.087582 C447.763804,140.925935 445.282044,141.259629 443.173485,141.705005 L438.9558,141.903312 C435.636833,141.791616 432.670288,140.89517 429.712926,139.51262 C424.77415,136.754658 419.673308,131.020977 415.883481,126.904585 C416.765781,128.548388 417.29205,131.757406 416.491791,133.250744 C414.251086,136.426166 404.560015,136.406765 400.12185,134.433533 C395.080168,132.192397 382.897505,116.456261 381.013953,104.670599 C386.024891,95.1907919 393.32484,86.9333052 397.018106,76.6112137 C388.96777,71.4725082 384.656121,63.1071256 385.215841,53.6312616 L385.417868,52.5343641 C377.496702,54.0178049 381.604436,53.4658821 373.083336,54.1107205 C345.946392,54.0276592 322.081628,35.6209152 335.519519,7.01357089 C336.393386,5.31957309 337.22468,3.77943723 338.706061,4.51496674 C339.895034,5.10516147 339.724245,7.47267561 339.126195,10.0981299 C331.444909,44.2800486 368.986482,44.541671 392.063954,38.2164846 C394.354375,37.5885907 398.909687,33.3597492 402.065239,31.9578456 C407.223273,29.6664872 412.821793,28.7368246 418.377878,28.0669527 C432.196953,26.4917086 448.805787,33.7743125 457.244692,34.0121086 C465.683696,34.2498951 477.68849,31.9906839 485.057739,32.4663611 C490.404756,32.7111006 495.655194,33.6766118 500.814217,35.0519721 C504.15359,18.7743924 504.389678,6.77738508 512.306113,4 C516.952271,4.73410247 520.532435,11.0679387 523.182469,14.4521241 C528.590341,14.2372222 533.726214,15.6070021 538.832705,17.1272571 C548.077718,15.8147836 555.835649,10.6211429 564,6.58095832 C555.726838,13.3374633 554.604541,24.3296396 555.549873,34.4945636 C555.901428,39.7692086 554.411518,45.4959316 552.56964,50.8964678 C549.122861,59.6952657 542.466357,68.969826 534.740599,68.4941441 C531.819966,68.4017255 530.123302,66.7473485 527.952583,64.9810904 C527.531491,68.5586705 525.876481,71.7509522 524.281076,74.9149914 C520.596809,81.9303216 510.969052,85.0217786 502.054286,92.5127055 C493.140125,100.003746 504.906806,126.757399 507.75979,131.632016 C510.612311,136.507097 518.575572,138.290532 515.485563,142.690409 C514.54025,144.143492 513.094823,144.663196 511.550039,145.2269 L509.45407,145.5 Z M406.857056,123.298483 L408.270768,123.654421 C410.047226,122.976086 413.618139,124.024471 415.512346,124.537037 C412.024332,121.236977 406.769383,116.390903 402.983374,113.335801 C401.740688,109.637126 402.270922,105.91532 402.538288,102.139524 L402.591916,101.82716 C401.099565,104.849781 399.20572,107.787956 398.187823,110.969578 C396.996657,115.26186 403.481867,119.893011 405.996567,122.547196 L406.857056,123.298483 Z\\\" stroke=\\\"#FFFFFF\\\" stroke-width=\\\"3\\\" fill=\\\"#000000\\\"></path>\\n <path d=\\\"M539.512,88.304 L576.504,88.304 L576.504,95.216 L561.976,95.216 L561.976,134 L553.976,134 L553.976,95.216 L539.512,95.216 L539.512,88.304 Z M580.984,88.304 L588.28,88.304 L588.28,95.216 L580.984,95.216 L580.984,88.304 Z M580.984,100.912 L588.28,100.912 L588.28,134 L580.984,134 L580.984,100.912 Z M627.384,134 L620.472,134 L620.472,129.52 L620.344,129.52 C619.362662,131.44001 617.933343,132.815996 616.056,133.648 C614.178657,134.480004 612.194677,134.896 610.104,134.896 C607.50132,134.896 605.229343,134.437338 603.288,133.52 C601.346657,132.602662 599.736006,131.354675 598.456,129.776 C597.175994,128.197325 596.216003,126.330677 595.576,124.176 C594.935997,122.021323 594.616,119.706679 594.616,117.232 C594.616,114.245318 595.021329,111.664011 595.832,109.488 C596.642671,107.311989 597.719993,105.520007 599.064,104.112 C600.408007,102.703993 601.943991,101.669337 603.672,101.008 C605.400009,100.346663 607.159991,100.016 608.952,100.016 C609.976005,100.016 611.021328,100.111999 612.088,100.304 C613.154672,100.496001 614.178662,100.805331 615.16,101.232 C616.141338,101.658669 617.047996,102.202663 617.88,102.864 C618.712004,103.525337 619.405331,104.303996 619.96,105.2 L620.088,105.2 L620.088,88.304 L627.384,88.304 L627.384,134 Z M601.912,117.808 C601.912,119.216007 602.093332,120.60266 602.456,121.968 C602.818668,123.33334 603.37333,124.549328 604.12,125.616 C604.86667,126.682672 605.815994,127.535997 606.968,128.176 C608.120006,128.816003 609.485325,129.136 611.064,129.136 C612.685341,129.136 614.082661,128.79467 615.256,128.112 C616.429339,127.42933 617.38933,126.533339 618.136,125.424 C618.88267,124.314661 619.437332,123.066674 619.8,121.68 C620.162668,120.293326 620.344,118.874674 620.344,117.424 C620.344,113.754648 619.522675,110.89601 617.88,108.848 C616.237325,106.79999 614.008014,105.776 611.192,105.776 C609.485325,105.776 608.045339,106.127996 606.872,106.832 C605.698661,107.536004 604.73867,108.453328 603.992,109.584 C603.24533,110.714672 602.712002,111.99466 602.392,113.424 C602.071998,114.85334 601.912,116.314659 601.912,117.808 L601.912,117.808 Z M666.488,134 L659.576,134 L659.576,129.52 L659.448,129.52 C658.466662,131.44001 657.037343,132.815996 655.16,133.648 C653.282657,134.480004 651.298677,134.896 649.208,134.896 C646.60532,134.896 644.333343,134.437338 642.392,133.52 C640.450657,132.602662 638.840006,131.354675 637.56,129.776 C636.279994,128.197325 635.320003,126.330677 634.68,124.176 C634.039997,122.021323 633.72,119.706679 633.72,117.232 C633.72,114.245318 634.125329,111.664011 634.936,109.488 C635.746671,107.311989 636.823993,105.520007 638.168,104.112 C639.512007,102.703993 641.047991,101.669337 642.776,101.008 C644.504009,100.346663 646.263991,100.016 648.056,100.016 C649.080005,100.016 650.125328,100.111999 651.192,100.304 C652.258672,100.496001 653.282662,100.805331 654.264,101.232 C655.245338,101.658669 656.151996,102.202663 656.984,102.864 C657.816004,103.525337 658.509331,104.303996 659.064,105.2 L659.192,105.2 L659.192,88.304 L666.488,88.304 L666.488,134 Z M641.016,117.808 C641.016,119.216007 641.197332,120.60266 641.56,121.968 C641.922668,123.33334 642.47733,124.549328 643.224,125.616 C643.97067,126.682672 644.919994,127.535997 646.072,128.176 C647.224006,128.816003 648.589325,129.136 650.168,129.136 C651.789341,129.136 653.186661,128.79467 654.36,128.112 C655.533339,127.42933 656.49333,126.533339 657.24,125.424 C657.98667,124.314661 658.541332,123.066674 658.904,121.68 C659.266668,120.293326 659.448,118.874674 659.448,117.424 C659.448,113.754648 658.626675,110.89601 656.984,108.848 C655.341325,106.79999 653.112014,105.776 650.296,105.776 C648.589325,105.776 647.149339,106.127996 645.976,106.832 C644.802661,107.536004 643.84267,108.453328 643.096,109.584 C642.34933,110.714672 641.816002,111.99466 641.496,113.424 C641.175998,114.85334 641.016,116.314659 641.016,117.808 L641.016,117.808 Z M674.616,88.304 L681.912,88.304 L681.912,134 L674.616,134 L674.616,88.304 Z M686.2,100.912 L694.2,100.912 L702.84,125.616 L702.968,125.616 L711.352,100.912 L718.968,100.912 L706.104,135.792 C705.506664,137.285341 704.920003,138.71466 704.344,140.08 C703.767997,141.44534 703.064004,142.650661 702.232,143.696 C701.399996,144.741339 700.36534,145.57333 699.128,146.192 C697.89066,146.81067 696.31201,147.12 694.392,147.12 C692.685325,147.12 691.000008,146.992001 689.336,146.736 L689.336,140.592 C689.933336,140.677334 690.509331,140.773333 691.064,140.88 C691.618669,140.986667 692.194664,141.04 692.792,141.04 C693.645338,141.04 694.349331,140.933334 694.904,140.72 C695.458669,140.506666 695.917332,140.197335 696.28,139.792 C696.642668,139.386665 696.951999,138.906669 697.208,138.352 C697.464001,137.797331 697.698666,137.157337 697.912,136.432 L698.744,133.872 L686.2,100.912 Z M719.608,88.304 L727.736,88.304 L735.992,123.248 L736.12,123.248 L745.336,88.304 L753.528,88.304 L762.488,123.248 L762.616,123.248 L771.128,88.304 L779.256,88.304 L766.648,134 L758.52,134 L749.368,99.056 L749.24,99.056 L739.896,134 L731.64,134 L719.608,88.304 Z M783.672,88.304 L790.968,88.304 L790.968,95.216 L783.672,95.216 L783.672,88.304 Z M783.672,100.912 L790.968,100.912 L790.968,134 L783.672,134 L783.672,100.912 Z M799.096,88.304 L806.392,88.304 L806.392,114.288 L819.576,100.912 L828.536,100.912 L815.864,113.072 L829.752,134 L820.856,134 L810.744,117.936 L806.392,122.16 L806.392,134 L799.096,134 L799.096,88.304 Z M833.464,88.304 L840.76,88.304 L840.76,95.216 L833.464,95.216 L833.464,88.304 Z M833.464,100.912 L840.76,100.912 L840.76,134 L833.464,134 L833.464,100.912 Z\\\" fill=\\\"#FFFFFF\\\"></path>\\n <path d=\\\"M48.592,108.656 L48.72,108.656 C48.9760013,107.845329 49.4026637,106.949338 50,105.968 C50.5973363,104.986662 51.3866618,104.080004 52.368,103.248 C53.3493382,102.415996 54.5333264,101.722669 55.92,101.168 C57.3066736,100.613331 58.895991,100.336 60.688,100.336 C63.2053459,100.336 65.3919907,100.805329 67.248,101.744 C69.1040093,102.682671 70.6399939,103.941325 71.856,105.52 C73.0720061,107.098675 73.9786637,108.933323 74.576,111.024 C75.1733363,113.114677 75.472,115.311988 75.472,117.616 C75.472,120.133346 75.1733363,122.437323 74.576,124.528 C73.9786637,126.618677 73.0720061,128.421326 71.856,129.936 C70.6399939,131.450674 69.1040093,132.634662 67.248,133.488 C65.3919907,134.341338 63.2053459,134.768 60.688,134.768 C57.9573197,134.768 55.525344,134.170673 53.392,132.976 C51.258656,131.781327 49.7013382,129.840013 48.72,127.152 L48.592,127.152 L48.592,145.776 L46.16,145.776 L46.16,101.104 L48.592,101.104 L48.592,108.656 Z M60.688,132.656 C62.821344,132.656 64.6666589,132.250671 66.224,131.44 C67.7813411,130.629329 69.0613283,129.54134 70.064,128.176 C71.0666717,126.81066 71.8133309,125.221342 72.304,123.408 C72.7946691,121.594658 73.04,119.66401 73.04,117.616 C73.04,115.738657 72.8053357,113.893342 72.336,112.08 C71.8666643,110.266658 71.1413382,108.64534 70.16,107.216 C69.1786618,105.78666 67.9093411,104.634671 66.352,103.76 C64.7946589,102.885329 62.9066778,102.448 60.688,102.448 C58.5119891,102.448 56.6560077,102.874662 55.12,103.728 C53.5839923,104.581338 52.3360048,105.711993 51.376,107.12 C50.4159952,108.528007 49.7226688,110.138658 49.296,111.952 C48.8693312,113.765342 48.656,115.653324 48.656,117.616 C48.656,119.578676 48.8479981,121.466658 49.232,123.28 C49.6160019,125.093342 50.2666621,126.693326 51.184,128.08 C52.1013379,129.466674 53.3386589,130.575996 54.896,131.408 C56.4533411,132.240004 58.3839885,132.656 60.688,132.656 L60.688,132.656 Z M79.632,117.552 C79.632,115.205322 79.9626634,112.997344 80.624,110.928 C81.2853366,108.858656 82.2559936,107.034675 83.536,105.456 C84.8160064,103.877325 86.3946573,102.629338 88.272,101.712 C90.1493427,100.794662 92.3039878,100.336 94.736,100.336 C97.1680122,100.336 99.3226573,100.794662 101.2,101.712 C103.077343,102.629338 104.655994,103.877325 105.936,105.456 C107.216006,107.034675 108.186663,108.858656 108.848,110.928 C109.509337,112.997344 109.84,115.205322 109.84,117.552 C109.84,119.898678 109.509337,122.117323 108.848,124.208 C108.186663,126.298677 107.216006,128.122659 105.936,129.68 C104.655994,131.237341 103.077343,132.474662 101.2,133.392 C99.3226573,134.309338 97.1680122,134.768 94.736,134.768 C92.3039878,134.768 90.1493427,134.309338 88.272,133.392 C86.3946573,132.474662 84.8160064,131.237341 83.536,129.68 C82.2559936,128.122659 81.2853366,126.298677 80.624,124.208 C79.9626634,122.117323 79.632,119.898678 79.632,117.552 L79.632,117.552 Z M82.064,117.552 C82.064,119.514676 82.3413306,121.402658 82.896,123.216 C83.4506694,125.029342 84.261328,126.639993 85.328,128.048 C86.394672,129.456007 87.7173254,130.575996 89.296,131.408 C90.8746746,132.240004 92.6879898,132.656 94.736,132.656 C96.7840102,132.656 98.5973254,132.240004 100.176,131.408 C101.754675,130.575996 103.077328,129.456007 104.144,128.048 C105.210672,126.639993 106.021331,125.029342 106.576,123.216 C107.130669,121.402658 107.408,119.514676 107.408,117.552 C107.408,115.589324 107.130669,113.701342 106.576,111.888 C106.021331,110.074658 105.210672,108.464007 104.144,107.056 C103.077328,105.647993 101.754675,104.528004 100.176,103.696 C98.5973254,102.863996 96.7840102,102.448 94.736,102.448 C92.6879898,102.448 90.8746746,102.863996 89.296,103.696 C87.7173254,104.528004 86.394672,105.647993 85.328,107.056 C84.261328,108.464007 83.4506694,110.074658 82.896,111.888 C82.3413306,113.701342 82.064,115.589324 82.064,117.552 L82.064,117.552 Z M123.728,131.184 L123.856,131.184 L132.816,101.104 L136.08,101.104 L145.104,131.184 L145.232,131.184 L154.448,101.104 L157.136,101.104 L146.576,134 L143.568,134 L134.544,104.176 L134.416,104.176 L125.328,134 L122.256,134 L111.824,101.104 L114.448,101.104 L123.728,131.184 Z M161.552,117.872 L161.552,118.256 C161.552,120.17601 161.807997,122.010658 162.32,123.76 C162.832003,125.509342 163.589328,127.045327 164.592,128.368 C165.594672,129.690673 166.853326,130.735996 168.368,131.504 C169.882674,132.272004 171.642657,132.656 173.648,132.656 C176.93335,132.656 179.53599,131.792009 181.456,130.064 C183.37601,128.335991 184.698663,125.936015 185.424,122.864 L187.856,122.864 C187.130663,126.704019 185.562679,129.64799 183.152,131.696 C180.741321,133.74401 177.55202,134.768 173.584,134.768 C171.151988,134.768 169.029342,134.330671 167.216,133.456 C165.402658,132.581329 163.888006,131.386674 162.672,129.872 C161.455994,128.357326 160.549336,126.565344 159.952,124.496 C159.354664,122.426656 159.056,120.197345 159.056,117.808 C159.056,115.503988 159.36533,113.296011 159.984,111.184 C160.60267,109.071989 161.53066,107.216008 162.768,105.616 C164.00534,104.015992 165.551991,102.736005 167.408,101.776 C169.264009,100.815995 171.450654,100.336 173.968,100.336 C176.272012,100.336 178.309324,100.762662 180.08,101.616 C181.850676,102.469338 183.333327,103.631993 184.528,105.104 C185.722673,106.576007 186.62933,108.282657 187.248,110.224 C187.86667,112.165343 188.176,114.245322 188.176,116.464 C188.176,116.677334 188.165333,116.922665 188.144,117.2 C188.122667,117.477335 188.112,117.701332 188.112,117.872 L161.552,117.872 Z M185.68,115.76 C185.594666,113.967991 185.296003,112.272008 184.784,110.672 C184.271997,109.071992 183.514672,107.664006 182.512,106.448 C181.509328,105.231994 180.29334,104.261337 178.864,103.536 C177.43466,102.810663 175.802676,102.448 173.968,102.448 C172.005324,102.448 170.277341,102.82133 168.784,103.568 C167.290659,104.31467 166.032005,105.295994 165.008,106.512 C163.983995,107.728006 163.194669,109.146659 162.64,110.768 C162.085331,112.389341 161.744001,114.053325 161.616,115.76 L185.68,115.76 Z M196.24,108.4 L196.432,108.4 C196.730668,107.333328 197.274663,106.330671 198.064,105.392 C198.853337,104.453329 199.813328,103.64267 200.944,102.96 C202.074672,102.27733 203.333326,101.754668 204.72,101.392 C206.106674,101.029332 207.546659,100.869333 209.04,100.912 L209.04,103.344 C207.759994,103.173332 206.298675,103.301331 204.656,103.728 C203.013325,104.154669 201.445341,105.093326 199.952,106.544 C199.354664,107.184003 198.832002,107.802664 198.384,108.4 C197.935998,108.997336 197.562668,109.658663 197.264,110.384 C196.965332,111.109337 196.730668,111.919996 196.56,112.816 C196.389332,113.712004 196.282667,114.77866 196.24,116.016 L196.24,134 L193.808,134 L193.808,101.104 L196.24,101.104 L196.24,108.4 Z M211.792,117.872 L211.792,118.256 C211.792,120.17601 212.047997,122.010658 212.56,123.76 C213.072003,125.509342 213.829328,127.045327 214.832,128.368 C215.834672,129.690673 217.093326,130.735996 218.608,131.504 C220.122674,132.272004 221.882657,132.656 223.888,132.656 C227.17335,132.656 229.77599,131.792009 231.696,130.064 C233.61601,128.335991 234.938663,125.936015 235.664,122.864 L238.096,122.864 C237.370663,126.704019 235.802679,129.64799 233.392,131.696 C230.981321,133.74401 227.79202,134.768 223.824,134.768 C221.391988,134.768 219.269342,134.330671 217.456,133.456 C215.642658,132.581329 214.128006,131.386674 212.912,129.872 C211.695994,128.357326 210.789336,126.565344 210.192,124.496 C209.594664,122.426656 209.296,120.197345 209.296,117.808 C209.296,115.503988 209.60533,113.296011 210.224,111.184 C210.84267,109.071989 211.77066,107.216008 213.008,105.616 C214.24534,104.015992 215.791991,102.736005 217.648,101.776 C219.504009,100.815995 221.690654,100.336 224.208,100.336 C226.512012,100.336 228.549324,100.762662 230.32,101.616 C232.090676,102.469338 233.573327,103.631993 234.768,105.104 C235.962673,106.576007 236.86933,108.282657 237.488,110.224 C238.10667,112.165343 238.416,114.245322 238.416,116.464 C238.416,116.677334 238.405333,116.922665 238.384,117.2 C238.362667,117.477335 238.352,117.701332 238.352,117.872 L211.792,117.872 Z M235.92,115.76 C235.834666,113.967991 235.536003,112.272008 235.024,110.672 C234.511997,109.071992 233.754672,107.664006 232.752,106.448 C231.749328,105.231994 230.53334,104.261337 229.104,103.536 C227.67466,102.810663 226.042676,102.448 224.208,102.448 C222.245324,102.448 220.517341,102.82133 219.024,103.568 C217.530659,104.31467 216.272005,105.295994 215.248,106.512 C214.223995,107.728006 213.434669,109.146659 212.88,110.768 C212.325331,112.389341 211.984001,114.053325 211.856,115.76 L235.92,115.76 Z M269.456,126.96 L269.328,126.96 C267.96266,129.56268 266.25601,131.51466 264.208,132.816 C262.15999,134.11734 259.664015,134.768 256.72,134.768 C254.245321,134.768 252.112009,134.298671 250.32,133.36 C248.527991,132.421329 247.056006,131.162675 245.904,129.584 C244.751994,128.005325 243.898669,126.181344 243.344,124.112 C242.789331,122.042656 242.512,119.877345 242.512,117.616 C242.512,115.183988 242.810664,112.912011 243.408,110.8 C244.005336,108.687989 244.911994,106.864008 246.128,105.328 C247.344006,103.791992 248.869324,102.576004 250.704,101.68 C252.538676,100.783996 254.693321,100.336 257.168,100.336 C258.490673,100.336 259.791994,100.517332 261.072,100.88 C262.352006,101.242668 263.535995,101.76533 264.624,102.448 C265.712005,103.13067 266.661329,103.983995 267.472,105.008 C268.282671,106.032005 268.901331,107.183994 269.328,108.464 L269.456,108.464 L269.456,88.304 L271.888,88.304 L271.888,134 L269.456,134 L269.456,126.96 Z M257.232,132.656 C259.322677,132.656 261.125326,132.229338 262.64,131.376 C264.154674,130.522662 265.413328,129.392007 266.416,127.984 C267.418672,126.575993 268.165331,124.965342 268.656,123.152 C269.146669,121.338658 269.392,119.493343 269.392,117.616 C269.392,115.69599 269.146669,113.829342 268.656,112.016 C268.165331,110.202658 267.429338,108.58134 266.448,107.152 C265.466662,105.72266 264.197341,104.581338 262.64,103.728 C261.082659,102.874662 259.258677,102.448 257.168,102.448 C254.991989,102.448 253.136008,102.863996 251.6,103.696 C250.063992,104.528004 248.794672,105.647993 247.792,107.056 C246.789328,108.464007 246.064002,110.085324 245.616,111.92 C245.167998,113.754676 244.944,115.653324 244.944,117.616 C244.944,119.53601 245.189331,121.402658 245.68,123.216 C246.170669,125.029342 246.917328,126.639993 247.92,128.048 C248.922672,129.456007 250.191992,130.575996 251.728,131.408 C253.264008,132.240004 255.098656,132.656 257.232,132.656 L257.232,132.656 Z M298,88.304 L300.432,88.304 L300.432,108.08 L300.56,108.08 C301.029336,106.799994 301.690662,105.680005 302.544,104.72 C303.397338,103.759995 304.378661,102.949337 305.488,102.288 C306.597339,101.626663 307.791994,101.136002 309.072,100.816 C310.352006,100.495998 311.67466,100.336 313.04,100.336 C315.472012,100.336 317.573324,100.762662 319.344,101.616 C321.114676,102.469338 322.597327,103.642659 323.792,105.136 C324.986673,106.629341 325.871997,108.36799 326.448,110.352 C327.024003,112.33601 327.312,114.479988 327.312,116.784 C327.312,120.709353 326.778672,123.855988 325.712,126.224 C324.645328,128.592012 323.365341,130.405327 321.872,131.664 C320.378659,132.922673 318.821341,133.754665 317.2,134.16 C315.578659,134.565335 314.192006,134.768 313.04,134.768 C310.863989,134.768 309.018674,134.42667 307.504,133.744 C305.989326,133.06133 304.741338,132.261338 303.76,131.344 C302.778662,130.426662 302.032003,129.520004 301.52,128.624 C301.007997,127.727996 300.688001,127.066669 300.56,126.64 L300.432,126.64 L300.432,134 L298,134 L298,88.304 Z M313.04,132.656 C315.216011,132.656 317.050659,132.186671 318.544,131.248 C320.037341,130.309329 321.253329,129.082674 322.192,127.568 C323.130671,126.053326 323.813331,124.346676 324.24,122.448 C324.666669,120.549324 324.88,118.661343 324.88,116.784 C324.88,114.949324 324.634669,113.178675 324.144,111.472 C323.653331,109.765325 322.906672,108.240007 321.904,106.896 C320.901328,105.551993 319.664007,104.474671 318.192,103.664 C316.719993,102.853329 315.002676,102.448 313.04,102.448 C310.906656,102.448 309.050675,102.810663 307.472,103.536 C305.893325,104.261337 304.592005,105.263994 303.568,106.544 C302.543995,107.824006 301.776003,109.338658 301.264,111.088 C300.751997,112.837342 300.496,114.73599 300.496,116.784 C300.496,118.789343 300.730664,120.75199 301.2,122.672 C301.669336,124.59201 302.405328,126.287993 303.408,127.76 C304.410672,129.232007 305.701325,130.415996 307.28,131.312 C308.858675,132.208004 310.778655,132.656 313.04,132.656 L313.04,132.656 Z M329.04,101.104 L331.92,101.104 L344.144,131.12 L355.408,101.104 L358.16,101.104 L344.08,137.52 C343.39733,139.141341 342.768003,140.538661 342.192,141.712 C341.615997,142.885339 340.965337,143.749331 340.24,144.304 C339.386662,144.98667 338.373339,145.402666 337.2,145.552 C336.026661,145.701334 334.48001,145.776 332.56,145.776 L332.56,143.664 C334.309342,143.664 335.674662,143.525335 336.656,143.248 C337.637338,142.970665 338.554662,142.405338 339.408,141.552 C339.877336,141.082664 340.367997,140.218673 340.88,138.96 C341.392003,137.701327 342.031996,135.984011 342.8,133.808 L329.04,101.104 Z\\\" fill=\\\"#FFFFFF\\\"></path>\\n </g>\\n</svg>\\n\"\n },\n \"$:/plugins/tiddlywiki/powered-by-tiddlywiki/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/powered-by-tiddlywiki/readme\",\n \"text\": \"This plugin adds a \\\"Powered by ~TiddlyWiki\\\" banner that links back to https://tiddlywiki.com\\n\\nIt's very basic at the moment, but the plan is to improve it by making it more customisable.\\n\"\n },\n \"$:/plugins/tiddlywiki/powered-by-tiddlywiki/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/powered-by-tiddlywiki/styles\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \".tc-powered-by-tiddlywiki-banner {\\n\\tposition: fixed;\\n\\tright: 1em;\\n\\tbottom: 0;\\n z-index: 2000;\\n}\"\n }\n }\n}"},"$:/plugins/tiddlywiki/qrcode":{"title":"$:/plugins/tiddlywiki/qrcode","name":"QR Code","description":"QR Code generator","author":"Zeno Zeng","list":"readme usage examples license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/qrcode/MakeContactQR\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/MakeContactQR\",\n \"tags\": \"$:/tags/MakeQR\",\n \"caption\": \"Contact\",\n \"text\": \"\\\\define wifi-url()\\nWIFI:wifi name;T:WPA;S:SSID;P:password;\\n\\\\end\\n\\n\\\\define image(firstname,lastname,address,tel,email)\\n<img src=<<makeqr text:\\\"\\\"\\\"MECARD:N:$lastname$,$firstname$;ADR:$address$;TEL:$tel$;EMAIL:$email$;;\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n! Enter the contact details\\n\\nFirst name: <$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/firstname\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nLast name: <$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/lastname\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nAddress: <$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/address\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nTelephone: <$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/tel\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nEmail: <$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/contact/email\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\n! Here is your QR code\\n\\n<$macrocall $name=\\\"image\\\" firstname={{$:/config/plugins/tiddlywiki/qrcode/contact/firstname}} lastname={{$:/config/plugins/tiddlywiki/qrcode/contact/lastname}} address={{$:/config/plugins/tiddlywiki/qrcode/contact/address}} tel={{$:/config/plugins/tiddlywiki/qrcode/contact/tel}} email={{$:/config/plugins/tiddlywiki/qrcode/contact/email}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/MakeGenericQR\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/MakeGenericQR\",\n \"tags\": \"$:/tags/MakeQR\",\n \"caption\": \"Generic\",\n \"text\": \"\\\\define image(content)\\n<img src=<<makeqr text:\\\"\\\"\\\"$content$\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n! Enter the details\\n\\nYou can also use this form to encode URLs.\\n\\n<$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/generic\\\" default=\\\"\\\" class=\\\"tc-edit-texteditor\\\"/>\\n\\n! Here is your QR code\\n\\n<$macrocall $name=\\\"image\\\" content={{$:/config/plugins/tiddlywiki/qrcode/generic}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/MakeWifiQR\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/MakeWifiQR\",\n \"tags\": \"$:/tags/MakeQR\",\n \"caption\": \"Wifi\",\n \"text\": \"\\\\define wifi-url()\\nWIFI:T:WPA;S:SSID;P:password;;\\n\\\\end\\n\\n\\\\define image(network,encryption,ssid,password)\\n<img src=<<makeqr text:\\\"\\\"\\\"WIFI:T:$encryption$;S:$ssid$;P:$password$;;\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n! Enter the details of your wifi network\\n\\nEncryption: <$select tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/wifi/encryption\\\" default=\\\"none\\\">\\n<option value=\\\"none\\\">None</option>\\n<option value=\\\"WEP\\\">WEP</option>\\n<option value=\\\"WPA\\\">WPA</option>\\n<option value=\\\"WPA2\\\">WPA2</option>\\n</$select>\\n\\nSSID: <$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/wifi/ssid\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\nPassword: <$edit-text tiddler=\\\"$:/config/plugins/tiddlywiki/qrcode/wifi/password\\\" tag=\\\"input\\\" default=\\\"\\\"/>\\n\\n! Here is your QR code\\n\\n<$macrocall $name=\\\"image\\\" network={{$:/config/plugins/tiddlywiki/qrcode/wifi/network}} encryption={{$:/config/plugins/tiddlywiki/qrcode/wifi/encryption}} ssid={{$:/config/plugins/tiddlywiki/qrcode/wifi/ssid}} password={{$:/config/plugins/tiddlywiki/qrcode/wifi/password}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton\",\n \"tags\": \"$:/tags/ViewToolbar\",\n \"list-before\": \"$:/core/ui/Buttons/close\",\n \"caption\": \"{{$:/plugins/tiddlywiki/qrcode/icon}}\",\n \"short-caption\": \"QR code\",\n \"description\": \"Generate QR code for this tiddler\",\n \"text\": \"\\\\whitespace trim\\n<span class=\\\"tc-popup-keep\\\">\\n<$button popup=<<qualify \\\"$:/state/popup/qrcode\\\">> tooltip={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!description}} aria-label={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!short-caption}} class=<<tv-config-toolbar-class>> class=<<tv-config-toolbar-class>> selectedClass=\\\"tc-selected\\\">\\n<$list filter=\\\"[<tv-config-toolbar-icons>match[yes]]\\\">\\n{{$:/plugins/tiddlywiki/qrcode/icon}}\\n</$list>\\n<$list filter=\\\"[<tv-config-toolbar-text>match[yes]]\\\">\\n<span class=\\\"tc-btn-text\\\">\\n<$text text=\\\" \\\"/>\\n<$text text={{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton!!short-caption}}/>\\n</span>\\n</$list>\\n</$button>\\n</span>\\n<$reveal state=<<qualify \\\"$:/state/popup/qrcode\\\">> type=\\\"popup\\\" position=\\\"below\\\" animate=\\\"yes\\\">\\n\\n<div class=\\\"tc-drop-down\\\">\\n\\n{{$:/plugins/tiddlywiki/qrcode/ViewToolbarButton||description}}\\n\\n<$set name=\\\"tv-config-toolbar-icons\\\" value=\\\"yes\\\">\\n\\n<$set name=\\\"tv-config-toolbar-text\\\" value=\\\"yes\\\">\\n\\n<$set name=\\\"tv-config-toolbar-class\\\" value=\\\"tc-btn-invisible\\\">\\n\\n<$set name=\\\"targetTiddler\\\" value=<<currentTiddler>>>\\n\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbarButton/QRcode]!has[draft.of]]\\\">\\n\\n<$button popup=<<qualify \\\"$:/state/popup/qrcode/type\\\">> class=\\\"tc-btn-invisible\\\" selectedClass=\\\"tc-selected\\\">\\n\\n<$action-sendmessage $message=\\\"tm-modal\\\" $param=<<currentTiddler>> currentTiddler=<<targetTiddler>>/>\\n\\n<$transclude field=\\\"caption\\\" mode=\\\"inline\\\"/>\\n\\n</$button>\\n\\n</$list>\\n\\n</$set>\\n\\n</$set>\\n\\n</$set>\\n\\n</$set>\\n\\n</div>\\n\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/Raw\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/Raw\",\n \"tags\": \"$:/tags/ViewToolbarButton/QRcode\",\n \"caption\": \"Raw content of this tiddler\",\n \"subtitle\": \"QR code of raw tiddler content\",\n \"text\": \"\\\\define image()\\n<img src=<<makeqr text:\\\"\\\"\\\"$(content)$\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n<$set name=\\\"content\\\" value={{!!text}}>\\n<<image>>\\n</$set>\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/Rendered\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/Rendered\",\n \"tags\": \"$:/tags/ViewToolbarButton/QRcode\",\n \"caption\": \"Rendered content of this tiddler\",\n \"subtitle\": \"QR code of rendered tiddler content\",\n \"text\": \"\\\\define image()\\n<img src=<<makeqr text:\\\"\\\"\\\"$(content)$\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n<$wikify name=\\\"content\\\" text={{!!text}} type=\\\"text\\\" mode=\\\"block\\\" output=\\\"formattedtext\\\">\\n<<image>>\\n</$wikify>\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/URL\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/ViewToolbarButton/URL\",\n \"tags\": \"$:/tags/ViewToolbarButton/QRcode\",\n \"caption\": \"URL of this tiddler\",\n \"subtitle\": \"QR code of URL of this tiddler\",\n \"text\": \"\\\\define image()\\n<img src=<<makeqr text:\\\"\\\"\\\"$(url)$#$(hash)$\\\"\\\"\\\" size:\\\"350\\\">>/>\\n\\\\end\\n\\n<$set name=\\\"url\\\" value={{$:/info/url/full}}>\\n<$set name=\\\"hash\\\" filter=\\\"[<currentTiddler>encodeuricomponent[]]\\\" select=\\\"0\\\">\\n<<image>>\\n</$set>\\n</$set>\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-drop-down .tc-qrcode-drop-down img {\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/examples\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/examples\",\n \"text\": \"<<tabs \\\"[all[shadows+tiddlers]tag[$:/tags/MakeQR]!has[draft.of]]\\\" \\\"$:/plugins/tiddlywiki/qrcode/MakeGenericQR\\\">>\"\n },\n \"$:/plugins/tiddlywiki/qrcode/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/readme\",\n \"text\": \"The QR code plugin provides a macro that enables any text to be rendered as a [[QR code|https://en.wikipedia.org/wiki/QR_code]]. QR codes are a type of 2-dimensional bar code that encodes arbitrary data: text, numbers, links. QR code readers are available or built-in for smartphones, making them a convenient means to transfer information between devices\\n\\nThe QR code plugin adds the following features to TiddlyWiki:\\n\\n* A new [[makeqr Macro]] that renders specified text as a QR code image that can be displayed or printed\\n* A new toolbar button that can display several QR code renderings of the content of a tiddler:\\n** Raw content\\n** Rendered, formatted content\\n** URL of tiddler\\n\\nThe QR code plugin is based on the library [[qrcode.js by Zeno Zeng|https://github.com/zenozeng/node-yaqrcode]].\"\n },\n \"$:/plugins/tiddlywiki/qrcode/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/usage\",\n \"text\": \"! `makeqr` Macro\\n\\nThe <<.def makeqr>> [[macro|Macros]] converts text data into an image of the corresponding QR code. The image is returned as [[base64-encoded data URI|https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs]].\\n\\n!! Parameters\\n\\n;text\\n: The text to encode\\n;size\\n: The size of the image in pixels (defaults to 500)\\n;errorCorrectLevel\\n: Determines the amount of error correction applied to the image; see below (defaults to \\\"M\\\").\\n;fallback\\n: The fallback image to be returned in case of an error (see below)\\n\\nThe conversion will fail if the text is too long and/or complex and the macro will return the provided fallback image. If no fallback image is provided then an error image is generated.\\n\\nThe error correction level is a [[QR code feature|http://www.qrcode.com/en/about/error_correction.html]]:\\n\\n<<<\\nQR Code has error correction capability to restore data if the code is dirty or damaged. ... Level Q or H may be selected for factory environment where QR Code get dirty, whereas Level L may be selected for clean environment with the large amount of data. Typically, Level M (15%) is most frequently selected.\\n<<<\\n\\n!! Examples\\n\\nMaking a QR code for a simple string of text:\\n\\n```\\n<<makeqr \\\"Hello there!\\\">>\\n```\\n\\nMaking a QR code for the URL field of the current tiddler:\\n\\n```\\n<$macrocall $name=\\\"makeqr\\\" text={{!!url}}/>\\n```\\n\\nMaking a QR code for the URL of the current wiki:\\n\\n```\\n<$macrocall $name=\\\"makeqr\\\" text={{$:/info/url/full}}/>\\n```\\n\"\n },\n \"$:/plugins/tiddlywiki/qrcode/qrcode.js\": {\n \"text\": \"//---------------------------------------------------------------------\\n//\\n// QR Code Generator for JavaScript\\n//\\n// Copyright (c) 2009 Kazuhiko Arase\\n//\\n// URL: http://www.d-project.com/\\n//\\n// Licensed under the MIT license:\\n//\\thttp://www.opensource.org/licenses/mit-license.php\\n//\\n// The word 'QR Code' is registered trademark of\\n// DENSO WAVE INCORPORATED\\n//\\thttp://www.denso-wave.com/qrcode/faqpatent-e.html\\n//\\n//---------------------------------------------------------------------\\n\\n//---------------------------------------------------------------------\\n// qrcode\\n//---------------------------------------------------------------------\\n\\n/**\\n * qrcode\\n * @param typeNumber 1 to 40\\n * @param errorCorrectLevel 'L','M','Q','H'\\n */\\nvar qrcode = function(typeNumber, errorCorrectLevel) {\\n\\n var PAD0 = 0xEC;\\n var PAD1 = 0x11;\\n\\n var _typeNumber = typeNumber;\\n var _errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel];\\n var _modules = null;\\n var _moduleCount = 0;\\n var _dataCache = null;\\n var _dataList = new Array();\\n\\n var _this = {};\\n\\n var makeImpl = function(test, maskPattern) {\\n\\n\\t_moduleCount = _typeNumber * 4 + 17;\\n\\t_modules = function(moduleCount) {\\n\\t var modules = new Array(moduleCount);\\n\\t for (var row = 0; row < moduleCount; row += 1) {\\n\\t\\tmodules[row] = new Array(moduleCount);\\n\\t\\tfor (var col = 0; col < moduleCount; col += 1) {\\n\\t\\t modules[row][col] = null;\\n\\t\\t}\\n\\t }\\n\\t return modules;\\n\\t}(_moduleCount);\\n\\n\\tsetupPositionProbePattern(0, 0);\\n\\tsetupPositionProbePattern(_moduleCount - 7, 0);\\n\\tsetupPositionProbePattern(0, _moduleCount - 7);\\n\\tsetupPositionAdjustPattern();\\n\\tsetupTimingPattern();\\n\\tsetupTypeInfo(test, maskPattern);\\n\\n\\tif (_typeNumber >= 7) {\\n\\t setupTypeNumber(test);\\n\\t}\\n\\n\\tif (_dataCache == null) {\\n\\t _dataCache = createData(_typeNumber, _errorCorrectLevel, _dataList);\\n\\t}\\n\\n\\tmapData(_dataCache, maskPattern);\\n };\\n\\n var setupPositionProbePattern = function(row, col) {\\n\\n\\tfor (var r = -1; r <= 7; r += 1) {\\n\\n\\t if (row + r <= -1 || _moduleCount <= row + r) continue;\\n\\n\\t for (var c = -1; c <= 7; c += 1) {\\n\\n\\t\\tif (col + c <= -1 || _moduleCount <= col + c) continue;\\n\\n\\t\\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\\n\\t\\t || (0 <= c && c <= 6 && (r == 0 || r == 6) )\\n\\t\\t || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\\n\\t\\t _modules[row + r][col + c] = true;\\n\\t\\t} else {\\n\\t\\t _modules[row + r][col + c] = false;\\n\\t\\t}\\n\\t }\\n\\t}\\n };\\n\\n var getBestMaskPattern = function() {\\n\\n\\tvar minLostPoint = 0;\\n\\tvar pattern = 0;\\n\\n\\tfor (var i = 0; i < 8; i += 1) {\\n\\n\\t makeImpl(true, i);\\n\\n\\t var lostPoint = QRUtil.getLostPoint(_this);\\n\\n\\t if (i == 0 || minLostPoint > lostPoint) {\\n\\t\\tminLostPoint = lostPoint;\\n\\t\\tpattern = i;\\n\\t }\\n\\t}\\n\\n\\treturn pattern;\\n };\\n\\n var setupTimingPattern = function() {\\n\\n\\tfor (var r = 8; r < _moduleCount - 8; r += 1) {\\n\\t if (_modules[r][6] != null) {\\n\\t\\tcontinue;\\n\\t }\\n\\t _modules[r][6] = (r % 2 == 0);\\n\\t}\\n\\n\\tfor (var c = 8; c < _moduleCount - 8; c += 1) {\\n\\t if (_modules[6][c] != null) {\\n\\t\\tcontinue;\\n\\t }\\n\\t _modules[6][c] = (c % 2 == 0);\\n\\t}\\n };\\n\\n var setupPositionAdjustPattern = function() {\\n\\n\\tvar pos = QRUtil.getPatternPosition(_typeNumber);\\n\\n\\tfor (var i = 0; i < pos.length; i += 1) {\\n\\n\\t for (var j = 0; j < pos.length; j += 1) {\\n\\n\\t\\tvar row = pos[i];\\n\\t\\tvar col = pos[j];\\n\\n\\t\\tif (_modules[row][col] != null) {\\n\\t\\t continue;\\n\\t\\t}\\n\\n\\t\\tfor (var r = -2; r <= 2; r += 1) {\\n\\n\\t\\t for (var c = -2; c <= 2; c += 1) {\\n\\n\\t\\t\\tif (r == -2 || r == 2 || c == -2 || c == 2\\n\\t\\t\\t || (r == 0 && c == 0) ) {\\n\\t\\t\\t _modules[row + r][col + c] = true;\\n\\t\\t\\t} else {\\n\\t\\t\\t _modules[row + r][col + c] = false;\\n\\t\\t\\t}\\n\\t\\t }\\n\\t\\t}\\n\\t }\\n\\t}\\n };\\n\\n var setupTypeNumber = function(test) {\\n\\n\\tvar bits = QRUtil.getBCHTypeNumber(_typeNumber);\\n\\n\\tfor (var i = 0; i < 18; i += 1) {\\n\\t var mod = (!test && ( (bits >> i) & 1) == 1);\\n\\t _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\\n\\t}\\n\\n\\tfor (var i = 0; i < 18; i += 1) {\\n\\t var mod = (!test && ( (bits >> i) & 1) == 1);\\n\\t _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\\n\\t}\\n };\\n\\n var setupTypeInfo = function(test, maskPattern) {\\n\\n\\tvar data = (_errorCorrectLevel << 3) | maskPattern;\\n\\tvar bits = QRUtil.getBCHTypeInfo(data);\\n\\n\\t// vertical\\n\\tfor (var i = 0; i < 15; i += 1) {\\n\\n\\t var mod = (!test && ( (bits >> i) & 1) == 1);\\n\\n\\t if (i < 6) {\\n\\t\\t_modules[i][8] = mod;\\n\\t } else if (i < 8) {\\n\\t\\t_modules[i + 1][8] = mod;\\n\\t } else {\\n\\t\\t_modules[_moduleCount - 15 + i][8] = mod;\\n\\t }\\n\\t}\\n\\n\\t// horizontal\\n\\tfor (var i = 0; i < 15; i += 1) {\\n\\n\\t var mod = (!test && ( (bits >> i) & 1) == 1);\\n\\n\\t if (i < 8) {\\n\\t\\t_modules[8][_moduleCount - i - 1] = mod;\\n\\t } else if (i < 9) {\\n\\t\\t_modules[8][15 - i - 1 + 1] = mod;\\n\\t } else {\\n\\t\\t_modules[8][15 - i - 1] = mod;\\n\\t }\\n\\t}\\n\\n\\t// fixed module\\n\\t_modules[_moduleCount - 8][8] = (!test);\\n };\\n\\n var mapData = function(data, maskPattern) {\\n\\n\\tvar inc = -1;\\n\\tvar row = _moduleCount - 1;\\n\\tvar bitIndex = 7;\\n\\tvar byteIndex = 0;\\n\\tvar maskFunc = QRUtil.getMaskFunction(maskPattern);\\n\\n\\tfor (var col = _moduleCount - 1; col > 0; col -= 2) {\\n\\n\\t if (col == 6) col -= 1;\\n\\n\\t while (true) {\\n\\n\\t\\tfor (var c = 0; c < 2; c += 1) {\\n\\n\\t\\t if (_modules[row][col - c] == null) {\\n\\n\\t\\t\\tvar dark = false;\\n\\n\\t\\t\\tif (byteIndex < data.length) {\\n\\t\\t\\t dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar mask = maskFunc(row, col - c);\\n\\n\\t\\t\\tif (mask) {\\n\\t\\t\\t dark = !dark;\\n\\t\\t\\t}\\n\\n\\t\\t\\t_modules[row][col - c] = dark;\\n\\t\\t\\tbitIndex -= 1;\\n\\n\\t\\t\\tif (bitIndex == -1) {\\n\\t\\t\\t byteIndex += 1;\\n\\t\\t\\t bitIndex = 7;\\n\\t\\t\\t}\\n\\t\\t }\\n\\t\\t}\\n\\n\\t\\trow += inc;\\n\\n\\t\\tif (row < 0 || _moduleCount <= row) {\\n\\t\\t row -= inc;\\n\\t\\t inc = -inc;\\n\\t\\t break;\\n\\t\\t}\\n\\t }\\n\\t}\\n };\\n\\n var createBytes = function(buffer, rsBlocks) {\\n\\n\\tvar offset = 0;\\n\\n\\tvar maxDcCount = 0;\\n\\tvar maxEcCount = 0;\\n\\n\\tvar dcdata = new Array(rsBlocks.length);\\n\\tvar ecdata = new Array(rsBlocks.length);\\n\\n\\tfor (var r = 0; r < rsBlocks.length; r += 1) {\\n\\n\\t var dcCount = rsBlocks[r].dataCount;\\n\\t var ecCount = rsBlocks[r].totalCount - dcCount;\\n\\n\\t maxDcCount = Math.max(maxDcCount, dcCount);\\n\\t maxEcCount = Math.max(maxEcCount, ecCount);\\n\\n\\t dcdata[r] = new Array(dcCount);\\n\\n\\t for (var i = 0; i < dcdata[r].length; i += 1) {\\n\\t\\tdcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\\n\\t }\\n\\t offset += dcCount;\\n\\n\\t var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\\n\\t var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\\n\\n\\t var modPoly = rawPoly.mod(rsPoly);\\n\\t ecdata[r] = new Array(rsPoly.getLength() - 1);\\n\\t for (var i = 0; i < ecdata[r].length; i += 1) {\\n\\t\\tvar modIndex = i + modPoly.getLength() - ecdata[r].length;\\n\\t\\tecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\\n\\t }\\n\\t}\\n\\n\\tvar totalCodeCount = 0;\\n\\tfor (var i = 0; i < rsBlocks.length; i += 1) {\\n\\t totalCodeCount += rsBlocks[i].totalCount;\\n\\t}\\n\\n\\tvar data = new Array(totalCodeCount);\\n\\tvar index = 0;\\n\\n\\tfor (var i = 0; i < maxDcCount; i += 1) {\\n\\t for (var r = 0; r < rsBlocks.length; r += 1) {\\n\\t\\tif (i < dcdata[r].length) {\\n\\t\\t data[index] = dcdata[r][i];\\n\\t\\t index += 1;\\n\\t\\t}\\n\\t }\\n\\t}\\n\\n\\tfor (var i = 0; i < maxEcCount; i += 1) {\\n\\t for (var r = 0; r < rsBlocks.length; r += 1) {\\n\\t\\tif (i < ecdata[r].length) {\\n\\t\\t data[index] = ecdata[r][i];\\n\\t\\t index += 1;\\n\\t\\t}\\n\\t }\\n\\t}\\n\\n\\treturn data;\\n };\\n\\n var createData = function(typeNumber, errorCorrectLevel, dataList) {\\n\\n\\tvar rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\\n\\n\\tvar buffer = qrBitBuffer();\\n\\n\\tfor (var i = 0; i < dataList.length; i += 1) {\\n\\t var data = dataList[i];\\n\\t buffer.put(data.getMode(), 4);\\n\\t buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\\n\\t data.write(buffer);\\n\\t}\\n\\n\\t// calc num max data.\\n\\tvar totalDataCount = 0;\\n\\tfor (var i = 0; i < rsBlocks.length; i += 1) {\\n\\t totalDataCount += rsBlocks[i].dataCount;\\n\\t}\\n\\n\\tif (buffer.getLengthInBits() > totalDataCount * 8) {\\n\\t throw new Error('code length overflow. ('\\n\\t\\t\\t + buffer.getLengthInBits()\\n\\t\\t\\t + '>'\\n\\t\\t\\t + totalDataCount * 8\\n\\t\\t\\t + ')');\\n\\t}\\n\\n\\t// end code\\n\\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\\n\\t buffer.put(0, 4);\\n\\t}\\n\\n\\t// padding\\n\\twhile (buffer.getLengthInBits() % 8 != 0) {\\n\\t buffer.putBit(false);\\n\\t}\\n\\n\\t// padding\\n\\twhile (true) {\\n\\n\\t if (buffer.getLengthInBits() >= totalDataCount * 8) {\\n\\t\\tbreak;\\n\\t }\\n\\t buffer.put(PAD0, 8);\\n\\n\\t if (buffer.getLengthInBits() >= totalDataCount * 8) {\\n\\t\\tbreak;\\n\\t }\\n\\t buffer.put(PAD1, 8);\\n\\t}\\n\\n\\treturn createBytes(buffer, rsBlocks);\\n };\\n\\n _this.addData = function(data) {\\n\\tvar newData = qr8BitByte(data);\\n\\t_dataList.push(newData);\\n\\t_dataCache = null;\\n };\\n\\n _this.isDark = function(row, col) {\\n\\tif (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\\n\\t throw new Error(row + ',' + col);\\n\\t}\\n\\treturn _modules[row][col];\\n };\\n\\n _this.getModuleCount = function() {\\n\\treturn _moduleCount;\\n };\\n\\n _this.make = function() {\\n\\tmakeImpl(false, getBestMaskPattern() );\\n };\\n\\n _this.createTableTag = function(cellSize, margin) {\\n\\n\\tcellSize = cellSize || 2;\\n\\tmargin = (typeof margin == 'undefined')? cellSize * 4 : margin;\\n\\n\\tvar qrHtml = '';\\n\\n\\tqrHtml += '<table style=\\\"';\\n\\tqrHtml += ' border-width: 0px; border-style: none;';\\n\\tqrHtml += ' border-collapse: collapse;';\\n\\tqrHtml += ' padding: 0px; margin: ' + margin + 'px;';\\n\\tqrHtml += '\\\">';\\n\\tqrHtml += '<tbody>';\\n\\n\\tfor (var r = 0; r < _this.getModuleCount(); r += 1) {\\n\\n\\t qrHtml += '<tr>';\\n\\n\\t for (var c = 0; c < _this.getModuleCount(); c += 1) {\\n\\t\\tqrHtml += '<td style=\\\"';\\n\\t\\tqrHtml += ' border-width: 0px; border-style: none;';\\n\\t\\tqrHtml += ' border-collapse: collapse;';\\n\\t\\tqrHtml += ' padding: 0px; margin: 0px;';\\n\\t\\tqrHtml += ' width: ' + cellSize + 'px;';\\n\\t\\tqrHtml += ' height: ' + cellSize + 'px;';\\n\\t\\tqrHtml += ' background-color: ';\\n\\t\\tqrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\\n\\t\\tqrHtml += ';';\\n\\t\\tqrHtml += '\\\"/>';\\n\\t }\\n\\n\\t qrHtml += '</tr>';\\n\\t}\\n\\n\\tqrHtml += '</tbody>';\\n\\tqrHtml += '</table>';\\n\\n\\treturn qrHtml;\\n };\\n\\n _this.createImgTag = function(cellSize, margin, size) {\\n\\n\\tcellSize = cellSize || 2;\\n\\tmargin = (typeof margin == 'undefined')? cellSize * 4 : margin;\\n\\n\\tvar min = margin;\\n\\tvar max = _this.getModuleCount() * cellSize + margin;\\n\\n\\treturn createImgTag(size, size, function(x, y) {\\n\\t if (min <= x && x < max && min <= y && y < max) {\\n\\t\\tvar c = Math.floor( (x - min) / cellSize);\\n\\t\\tvar r = Math.floor( (y - min) / cellSize);\\n\\t\\treturn _this.isDark(r, c)? 0 : 1;\\n\\t } else {\\n\\t\\treturn 1;\\n\\t }\\n\\t} );\\n };\\n\\n return _this;\\n};\\n\\n//---------------------------------------------------------------------\\n// qrcode.stringToBytes\\n//---------------------------------------------------------------------\\n\\nqrcode.stringToBytes = function(s) {\\n var bytes = new Array();\\n for (var i = 0; i < s.length; i += 1) {\\n\\tvar c = s.charCodeAt(i);\\n\\tbytes.push(c & 0xff);\\n }\\n return bytes;\\n};\\n\\n//---------------------------------------------------------------------\\n// qrcode.createStringToBytes\\n//---------------------------------------------------------------------\\n\\n/**\\n * @param unicodeData base64 string of byte array.\\n * [16bit Unicode],[16bit Bytes], ...\\n * @param numChars\\n */\\nqrcode.createStringToBytes = function(unicodeData, numChars) {\\n\\n // create conversion map.\\n\\n var unicodeMap = function() {\\n\\n\\tvar bin = base64DecodeInputStream(unicodeData);\\n\\tvar read = function() {\\n\\t var b = bin.read();\\n\\t if (b == -1) throw new Error();\\n\\t return b;\\n\\t};\\n\\n\\tvar count = 0;\\n\\tvar unicodeMap = {};\\n\\twhile (true) {\\n\\t var b0 = bin.read();\\n\\t if (b0 == -1) break;\\n\\t var b1 = read();\\n\\t var b2 = read();\\n\\t var b3 = read();\\n\\t var k = String.fromCharCode( (b0 << 8) | b1);\\n\\t var v = (b2 << 8) | b3;\\n\\t unicodeMap[k] = v;\\n\\t count += 1;\\n\\t}\\n\\tif (count != numChars) {\\n\\t throw new Error(count + ' != ' + numChars);\\n\\t}\\n\\n\\treturn unicodeMap;\\n }();\\n\\n var unknownChar = '?'.charCodeAt(0);\\n\\n return function(s) {\\n\\tvar bytes = new Array();\\n\\tfor (var i = 0; i < s.length; i += 1) {\\n\\t var c = s.charCodeAt(i);\\n\\t if (c < 128) {\\n\\t\\tbytes.push(c);\\n\\t } else {\\n\\t\\tvar b = unicodeMap[s.charAt(i)];\\n\\t\\tif (typeof b == 'number') {\\n\\t\\t if ( (b & 0xff) == b) {\\n\\t\\t\\t// 1byte\\n\\t\\t\\tbytes.push(b);\\n\\t\\t } else {\\n\\t\\t\\t// 2bytes\\n\\t\\t\\tbytes.push(b >>> 8);\\n\\t\\t\\tbytes.push(b & 0xff);\\n\\t\\t }\\n\\t\\t} else {\\n\\t\\t bytes.push(unknownChar);\\n\\t\\t}\\n\\t }\\n\\t}\\n\\treturn bytes;\\n };\\n};\\n\\n//---------------------------------------------------------------------\\n// QRMode\\n//---------------------------------------------------------------------\\n\\nvar QRMode = {\\n MODE_NUMBER :\\t\\t1 << 0,\\n MODE_ALPHA_NUM : \\t1 << 1,\\n MODE_8BIT_BYTE : \\t1 << 2,\\n MODE_KANJI :\\t\\t1 << 3\\n};\\n\\n//---------------------------------------------------------------------\\n// QRErrorCorrectLevel\\n//---------------------------------------------------------------------\\n\\nvar QRErrorCorrectLevel = {\\n L : 1,\\n M : 0,\\n Q : 3,\\n H : 2\\n};\\n\\n//---------------------------------------------------------------------\\n// QRMaskPattern\\n//---------------------------------------------------------------------\\n\\nvar QRMaskPattern = {\\n PATTERN000 : 0,\\n PATTERN001 : 1,\\n PATTERN010 : 2,\\n PATTERN011 : 3,\\n PATTERN100 : 4,\\n PATTERN101 : 5,\\n PATTERN110 : 6,\\n PATTERN111 : 7\\n};\\n\\n//---------------------------------------------------------------------\\n// QRUtil\\n//---------------------------------------------------------------------\\n\\nvar QRUtil = function() {\\n\\n var PATTERN_POSITION_TABLE = [\\n\\t[],\\n\\t[6, 18],\\n\\t[6, 22],\\n\\t[6, 26],\\n\\t[6, 30],\\n\\t[6, 34],\\n\\t[6, 22, 38],\\n\\t[6, 24, 42],\\n\\t[6, 26, 46],\\n\\t[6, 28, 50],\\n\\t[6, 30, 54],\\n\\t[6, 32, 58],\\n\\t[6, 34, 62],\\n\\t[6, 26, 46, 66],\\n\\t[6, 26, 48, 70],\\n\\t[6, 26, 50, 74],\\n\\t[6, 30, 54, 78],\\n\\t[6, 30, 56, 82],\\n\\t[6, 30, 58, 86],\\n\\t[6, 34, 62, 90],\\n\\t[6, 28, 50, 72, 94],\\n\\t[6, 26, 50, 74, 98],\\n\\t[6, 30, 54, 78, 102],\\n\\t[6, 28, 54, 80, 106],\\n\\t[6, 32, 58, 84, 110],\\n\\t[6, 30, 58, 86, 114],\\n\\t[6, 34, 62, 90, 118],\\n\\t[6, 26, 50, 74, 98, 122],\\n\\t[6, 30, 54, 78, 102, 126],\\n\\t[6, 26, 52, 78, 104, 130],\\n\\t[6, 30, 56, 82, 108, 134],\\n\\t[6, 34, 60, 86, 112, 138],\\n\\t[6, 30, 58, 86, 114, 142],\\n\\t[6, 34, 62, 90, 118, 146],\\n\\t[6, 30, 54, 78, 102, 126, 150],\\n\\t[6, 24, 50, 76, 102, 128, 154],\\n\\t[6, 28, 54, 80, 106, 132, 158],\\n\\t[6, 32, 58, 84, 110, 136, 162],\\n\\t[6, 26, 54, 82, 110, 138, 166],\\n\\t[6, 30, 58, 86, 114, 142, 170]\\n ];\\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\\n\\n var _this = {};\\n\\n var getBCHDigit = function(data) {\\n\\tvar digit = 0;\\n\\twhile (data != 0) {\\n\\t digit += 1;\\n\\t data >>>= 1;\\n\\t}\\n\\treturn digit;\\n };\\n\\n _this.getBCHTypeInfo = function(data) {\\n\\tvar d = data << 10;\\n\\twhile (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\\n\\t d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\\n\\t}\\n\\treturn ( (data << 10) | d) ^ G15_MASK;\\n };\\n\\n _this.getBCHTypeNumber = function(data) {\\n\\tvar d = data << 12;\\n\\twhile (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\\n\\t d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\\n\\t}\\n\\treturn (data << 12) | d;\\n };\\n\\n _this.getPatternPosition = function(typeNumber) {\\n\\treturn PATTERN_POSITION_TABLE[typeNumber - 1];\\n };\\n\\n _this.getMaskFunction = function(maskPattern) {\\n\\n\\tswitch (maskPattern) {\\n\\n\\t case QRMaskPattern.PATTERN000 :\\n\\t\\treturn function(i, j) { return (i + j) % 2 == 0; };\\n\\t case QRMaskPattern.PATTERN001 :\\n\\t\\treturn function(i, j) { return i % 2 == 0; };\\n\\t case QRMaskPattern.PATTERN010 :\\n\\t\\treturn function(i, j) { return j % 3 == 0; };\\n\\t case QRMaskPattern.PATTERN011 :\\n\\t\\treturn function(i, j) { return (i + j) % 3 == 0; };\\n\\t case QRMaskPattern.PATTERN100 :\\n\\t\\treturn function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\\n\\t case QRMaskPattern.PATTERN101 :\\n\\t\\treturn function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\\n\\t case QRMaskPattern.PATTERN110 :\\n\\t\\treturn function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\\n\\t case QRMaskPattern.PATTERN111 :\\n\\t\\treturn function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\\n\\n\\t\\tdefault :\\n\\t\\tthrow new Error('bad maskPattern:' + maskPattern);\\n\\t}\\n };\\n\\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\\n\\tvar a = qrPolynomial([1], 0);\\n\\tfor (var i = 0; i < errorCorrectLength; i += 1) {\\n\\t a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\\n\\t}\\n\\treturn a;\\n };\\n\\n _this.getLengthInBits = function(mode, type) {\\n\\n\\tif (1 <= type && type < 10) {\\n\\n\\t // 1 - 9\\n\\n\\t switch(mode) {\\n\\t\\tcase QRMode.MODE_NUMBER \\t: return 10;\\n\\t\\tcase QRMode.MODE_ALPHA_NUM \\t: return 9;\\n\\t\\tcase QRMode.MODE_8BIT_BYTE\\t: return 8;\\n\\t\\tcase QRMode.MODE_KANJI\\t\\t: return 8;\\n\\t\\t default :\\n\\t\\t throw new Error('mode:' + mode);\\n\\t }\\n\\n\\t} else if (type < 27) {\\n\\n\\t // 10 - 26\\n\\n\\t switch(mode) {\\n\\t\\tcase QRMode.MODE_NUMBER \\t: return 12;\\n\\t\\tcase QRMode.MODE_ALPHA_NUM \\t: return 11;\\n\\t\\tcase QRMode.MODE_8BIT_BYTE\\t: return 16;\\n\\t\\tcase QRMode.MODE_KANJI\\t\\t: return 10;\\n\\t\\t default :\\n\\t\\t throw new Error('mode:' + mode);\\n\\t }\\n\\n\\t} else if (type < 41) {\\n\\n\\t // 27 - 40\\n\\n\\t switch(mode) {\\n\\t\\tcase QRMode.MODE_NUMBER \\t: return 14;\\n\\t\\tcase QRMode.MODE_ALPHA_NUM\\t: return 13;\\n\\t\\tcase QRMode.MODE_8BIT_BYTE\\t: return 16;\\n\\t\\tcase QRMode.MODE_KANJI\\t\\t: return 12;\\n\\t\\t default :\\n\\t\\t throw new Error('mode:' + mode);\\n\\t }\\n\\n\\t} else {\\n\\t throw new Error('type:' + type);\\n\\t}\\n };\\n\\n _this.getLostPoint = function(qrcode) {\\n\\n\\tvar moduleCount = qrcode.getModuleCount();\\n\\n\\tvar lostPoint = 0;\\n\\n\\t// LEVEL1\\n\\n\\tfor (var row = 0; row < moduleCount; row += 1) {\\n\\t for (var col = 0; col < moduleCount; col += 1) {\\n\\n\\t\\tvar sameCount = 0;\\n\\t\\tvar dark = qrcode.isDark(row, col);\\n\\n\\t\\tfor (var r = -1; r <= 1; r += 1) {\\n\\n\\t\\t if (row + r < 0 || moduleCount <= row + r) {\\n\\t\\t\\tcontinue;\\n\\t\\t }\\n\\n\\t\\t for (var c = -1; c <= 1; c += 1) {\\n\\n\\t\\t\\tif (col + c < 0 || moduleCount <= col + c) {\\n\\t\\t\\t continue;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (r == 0 && c == 0) {\\n\\t\\t\\t continue;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (dark == qrcode.isDark(row + r, col + c) ) {\\n\\t\\t\\t sameCount += 1;\\n\\t\\t\\t}\\n\\t\\t }\\n\\t\\t}\\n\\n\\t\\tif (sameCount > 5) {\\n\\t\\t lostPoint += (3 + sameCount - 5);\\n\\t\\t}\\n\\t }\\n\\t};\\n\\n\\t// LEVEL2\\n\\n\\tfor (var row = 0; row < moduleCount - 1; row += 1) {\\n\\t for (var col = 0; col < moduleCount - 1; col += 1) {\\n\\t\\tvar count = 0;\\n\\t\\tif (qrcode.isDark(row, col) ) count += 1;\\n\\t\\tif (qrcode.isDark(row + 1, col) ) count += 1;\\n\\t\\tif (qrcode.isDark(row, col + 1) ) count += 1;\\n\\t\\tif (qrcode.isDark(row + 1, col + 1) ) count += 1;\\n\\t\\tif (count == 0 || count == 4) {\\n\\t\\t lostPoint += 3;\\n\\t\\t}\\n\\t }\\n\\t}\\n\\n\\t// LEVEL3\\n\\n\\tfor (var row = 0; row < moduleCount; row += 1) {\\n\\t for (var col = 0; col < moduleCount - 6; col += 1) {\\n\\t\\tif (qrcode.isDark(row, col)\\n\\t\\t && !qrcode.isDark(row, col + 1)\\n\\t\\t && qrcode.isDark(row, col + 2)\\n\\t\\t && qrcode.isDark(row, col + 3)\\n\\t\\t && qrcode.isDark(row, col + 4)\\n\\t\\t && !qrcode.isDark(row, col + 5)\\n\\t\\t && qrcode.isDark(row, col + 6) ) {\\n\\t\\t lostPoint += 40;\\n\\t\\t}\\n\\t }\\n\\t}\\n\\n\\tfor (var col = 0; col < moduleCount; col += 1) {\\n\\t for (var row = 0; row < moduleCount - 6; row += 1) {\\n\\t\\tif (qrcode.isDark(row, col)\\n\\t\\t && !qrcode.isDark(row + 1, col)\\n\\t\\t && qrcode.isDark(row + 2, col)\\n\\t\\t && qrcode.isDark(row + 3, col)\\n\\t\\t && qrcode.isDark(row + 4, col)\\n\\t\\t && !qrcode.isDark(row + 5, col)\\n\\t\\t && qrcode.isDark(row + 6, col) ) {\\n\\t\\t lostPoint += 40;\\n\\t\\t}\\n\\t }\\n\\t}\\n\\n\\t// LEVEL4\\n\\n\\tvar darkCount = 0;\\n\\n\\tfor (var col = 0; col < moduleCount; col += 1) {\\n\\t for (var row = 0; row < moduleCount; row += 1) {\\n\\t\\tif (qrcode.isDark(row, col) ) {\\n\\t\\t darkCount += 1;\\n\\t\\t}\\n\\t }\\n\\t}\\n\\n\\tvar ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\\n\\tlostPoint += ratio * 10;\\n\\n\\treturn lostPoint;\\n };\\n\\n return _this;\\n}();\\n\\n//---------------------------------------------------------------------\\n// QRMath\\n//---------------------------------------------------------------------\\n\\nvar QRMath = function() {\\n\\n var EXP_TABLE = new Array(256);\\n var LOG_TABLE = new Array(256);\\n\\n // initialize tables\\n for (var i = 0; i < 8; i += 1) {\\n\\tEXP_TABLE[i] = 1 << i;\\n }\\n for (var i = 8; i < 256; i += 1) {\\n\\tEXP_TABLE[i] = EXP_TABLE[i - 4]\\n\\t ^ EXP_TABLE[i - 5]\\n\\t ^ EXP_TABLE[i - 6]\\n\\t ^ EXP_TABLE[i - 8];\\n }\\n for (var i = 0; i < 255; i += 1) {\\n\\tLOG_TABLE[EXP_TABLE[i] ] = i;\\n }\\n\\n var _this = {};\\n\\n _this.glog = function(n) {\\n\\n\\tif (n < 1) {\\n\\t throw new Error('glog(' + n + ')');\\n\\t}\\n\\n\\treturn LOG_TABLE[n];\\n };\\n\\n _this.gexp = function(n) {\\n\\n\\twhile (n < 0) {\\n\\t n += 255;\\n\\t}\\n\\n\\twhile (n >= 256) {\\n\\t n -= 255;\\n\\t}\\n\\n\\treturn EXP_TABLE[n];\\n };\\n\\n return _this;\\n}();\\n\\n//---------------------------------------------------------------------\\n// qrPolynomial\\n//---------------------------------------------------------------------\\n\\nfunction qrPolynomial(num, shift) {\\n\\n if (typeof num.length == 'undefined') {\\n\\tthrow new Error(num.length + '/' + shift);\\n }\\n\\n var _num = function() {\\n\\tvar offset = 0;\\n\\twhile (offset < num.length && num[offset] == 0) {\\n\\t offset += 1;\\n\\t}\\n\\tvar _num = new Array(num.length - offset + shift);\\n\\tfor (var i = 0; i < num.length - offset; i += 1) {\\n\\t _num[i] = num[i + offset];\\n\\t}\\n\\treturn _num;\\n }();\\n\\n var _this = {};\\n\\n _this.getAt = function(index) {\\n\\treturn _num[index];\\n };\\n\\n _this.getLength = function() {\\n\\treturn _num.length;\\n };\\n\\n _this.multiply = function(e) {\\n\\n\\tvar num = new Array(_this.getLength() + e.getLength() - 1);\\n\\n\\tfor (var i = 0; i < _this.getLength(); i += 1) {\\n\\t for (var j = 0; j < e.getLength(); j += 1) {\\n\\t\\tnum[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\\n\\t }\\n\\t}\\n\\n\\treturn qrPolynomial(num, 0);\\n };\\n\\n _this.mod = function(e) {\\n\\n\\tif (_this.getLength() - e.getLength() < 0) {\\n\\t return _this;\\n\\t}\\n\\n\\tvar ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\\n\\n\\tvar num = new Array(_this.getLength() );\\n\\tfor (var i = 0; i < _this.getLength(); i += 1) {\\n\\t num[i] = _this.getAt(i);\\n\\t}\\n\\n\\tfor (var i = 0; i < e.getLength(); i += 1) {\\n\\t num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\\n\\t}\\n\\n\\t// recursive call\\n\\treturn qrPolynomial(num, 0).mod(e);\\n };\\n\\n return _this;\\n};\\n\\n//---------------------------------------------------------------------\\n// QRRSBlock\\n//---------------------------------------------------------------------\\n\\nvar QRRSBlock = function() {\\n\\n\\n // [1: [L, M, Q, H], ..]\\n var RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];\\n\\n var qrRSBlock = function(totalCount, dataCount) {\\n\\tvar _this = {};\\n\\t_this.totalCount = totalCount;\\n\\t_this.dataCount = dataCount;\\n\\treturn _this;\\n };\\n\\n var _this = {};\\n\\n var getRsBlockTable = function(typeNumber, errorCorrectLevel) {\\n\\n\\tswitch(errorCorrectLevel) {\\n\\t case QRErrorCorrectLevel.L :\\n\\t\\treturn RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\\n\\t case QRErrorCorrectLevel.M :\\n\\t\\treturn RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\\n\\t case QRErrorCorrectLevel.Q :\\n\\t\\treturn RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\\n\\t case QRErrorCorrectLevel.H :\\n\\t\\treturn RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\\n\\t\\tdefault :\\n\\t\\treturn undefined;\\n\\t}\\n };\\n\\n _this.getRSBlocks = function(typeNumber, errorCorrectLevel) {\\n\\n\\tvar rsBlock = getRsBlockTable(typeNumber, errorCorrectLevel);\\n\\n\\tif (typeof rsBlock == 'undefined') {\\n\\t throw new Error('bad rs block @ typeNumber:' + typeNumber +\\n\\t\\t\\t '/errorCorrectLevel:' + errorCorrectLevel);\\n\\t}\\n\\n\\tvar length = rsBlock.length / 3;\\n\\n\\tvar list = new Array();\\n\\n\\tfor (var i = 0; i < length; i += 1) {\\n\\n\\t var count = rsBlock[i * 3 + 0];\\n\\t var totalCount = rsBlock[i * 3 + 1];\\n\\t var dataCount = rsBlock[i * 3 + 2];\\n\\n\\t for (var j = 0; j < count; j += 1) {\\n\\t\\tlist.push(qrRSBlock(totalCount, dataCount) );\\n\\t }\\n\\t}\\n\\n\\treturn list;\\n };\\n\\n return _this;\\n}();\\n\\n//---------------------------------------------------------------------\\n// qrBitBuffer\\n//---------------------------------------------------------------------\\n\\nvar qrBitBuffer = function() {\\n\\n var _buffer = new Array();\\n var _length = 0;\\n\\n var _this = {};\\n\\n _this.getBuffer = function() {\\n\\treturn _buffer;\\n };\\n\\n _this.getAt = function(index) {\\n\\tvar bufIndex = Math.floor(index / 8);\\n\\treturn ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\\n };\\n\\n _this.put = function(num, length) {\\n\\tfor (var i = 0; i < length; i += 1) {\\n\\t _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\\n\\t}\\n };\\n\\n _this.getLengthInBits = function() {\\n\\treturn _length;\\n };\\n\\n _this.putBit = function(bit) {\\n\\n\\tvar bufIndex = Math.floor(_length / 8);\\n\\tif (_buffer.length <= bufIndex) {\\n\\t _buffer.push(0);\\n\\t}\\n\\n\\tif (bit) {\\n\\t _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\\n\\t}\\n\\n\\t_length += 1;\\n };\\n\\n return _this;\\n};\\n\\n//---------------------------------------------------------------------\\n// qr8BitByte\\n//---------------------------------------------------------------------\\n\\nvar qr8BitByte = function(data) {\\n\\n var _mode = QRMode.MODE_8BIT_BYTE;\\n var _data = data;\\n var _parsedData = [];\\n\\n var _this = {};\\n\\n\\n // Added to support UTF-8 Characters\\n for (var i = 0, l = _data.length; i < l; i++) {\\n\\tvar byteArray = [];\\n\\tvar code = _data.charCodeAt(i);\\n\\n\\tif (code > 0x10000) {\\n\\t byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);\\n\\t byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);\\n\\t byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);\\n\\t byteArray[3] = 0x80 | (code & 0x3F);\\n\\t} else if (code > 0x800) {\\n\\t byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);\\n\\t byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);\\n\\t byteArray[2] = 0x80 | (code & 0x3F);\\n\\t} else if (code > 0x80) {\\n\\t byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);\\n\\t byteArray[1] = 0x80 | (code & 0x3F);\\n\\t} else {\\n\\t byteArray[0] = code;\\n\\t}\\n\\n // Fix Unicode corruption bug\\n _parsedData.push(byteArray);\\n }\\n\\n _parsedData = Array.prototype.concat.apply([], _parsedData);\\n\\n if (_parsedData.length != _data.length) {\\n\\t_parsedData.unshift(191);\\n\\t_parsedData.unshift(187);\\n\\t_parsedData.unshift(239);\\n }\\n\\n var _bytes = _parsedData;\\n\\n _this.getMode = function() {\\n\\treturn _mode;\\n };\\n\\n _this.getLength = function(buffer) {\\n\\treturn _bytes.length;\\n };\\n\\n _this.write = function(buffer) {\\n\\tfor (var i = 0; i < _bytes.length; i += 1) {\\n\\t buffer.put(_bytes[i], 8);\\n\\t}\\n };\\n\\n return _this;\\n};\\n\\n//=====================================================================\\n// GIF Support etc.\\n//\\n\\n//---------------------------------------------------------------------\\n// byteArrayOutputStream\\n//---------------------------------------------------------------------\\n\\nvar byteArrayOutputStream = function() {\\n\\n var _bytes = new Array();\\n\\n var _this = {};\\n\\n _this.writeByte = function(b) {\\n\\t_bytes.push(b & 0xff);\\n };\\n\\n _this.writeShort = function(i) {\\n\\t_this.writeByte(i);\\n\\t_this.writeByte(i >>> 8);\\n };\\n\\n _this.writeBytes = function(b, off, len) {\\n\\toff = off || 0;\\n\\tlen = len || b.length;\\n\\tfor (var i = 0; i < len; i += 1) {\\n\\t _this.writeByte(b[i + off]);\\n\\t}\\n };\\n\\n _this.writeString = function(s) {\\n\\tfor (var i = 0; i < s.length; i += 1) {\\n\\t _this.writeByte(s.charCodeAt(i) );\\n\\t}\\n };\\n\\n _this.toByteArray = function() {\\n\\treturn _bytes;\\n };\\n\\n _this.toString = function() {\\n\\tvar s = '';\\n\\ts += '[';\\n\\tfor (var i = 0; i < _bytes.length; i += 1) {\\n\\t if (i > 0) {\\n\\t\\ts += ',';\\n\\t }\\n\\t s += _bytes[i];\\n\\t}\\n\\ts += ']';\\n\\treturn s;\\n };\\n\\n return _this;\\n};\\n\\n//---------------------------------------------------------------------\\n// base64EncodeOutputStream\\n//---------------------------------------------------------------------\\n\\nvar base64EncodeOutputStream = function() {\\n\\n var _buffer = 0;\\n var _buflen = 0;\\n var _length = 0;\\n var _base64 = '';\\n\\n var _this = {};\\n\\n var writeEncoded = function(b) {\\n\\t_base64 += String.fromCharCode(encode(b & 0x3f) );\\n };\\n\\n var encode = function(n) {\\n\\tif (n < 0) {\\n\\t // error.\\n\\t} else if (n < 26) {\\n\\t return 0x41 + n;\\n\\t} else if (n < 52) {\\n\\t return 0x61 + (n - 26);\\n\\t} else if (n < 62) {\\n\\t return 0x30 + (n - 52);\\n\\t} else if (n == 62) {\\n\\t return 0x2b;\\n\\t} else if (n == 63) {\\n\\t return 0x2f;\\n\\t}\\n\\tthrow new Error('n:' + n);\\n };\\n\\n _this.writeByte = function(n) {\\n\\n\\t_buffer = (_buffer << 8) | (n & 0xff);\\n\\t_buflen += 8;\\n\\t_length += 1;\\n\\n\\twhile (_buflen >= 6) {\\n\\t writeEncoded(_buffer >>> (_buflen - 6) );\\n\\t _buflen -= 6;\\n\\t}\\n };\\n\\n _this.flush = function() {\\n\\n\\tif (_buflen > 0) {\\n\\t writeEncoded(_buffer << (6 - _buflen) );\\n\\t _buffer = 0;\\n\\t _buflen = 0;\\n\\t}\\n\\n\\tif (_length % 3 != 0) {\\n\\t // padding\\n\\t var padlen = 3 - _length % 3;\\n\\t for (var i = 0; i < padlen; i += 1) {\\n\\t\\t_base64 += '=';\\n\\t }\\n\\t}\\n };\\n\\n _this.toString = function() {\\n\\treturn _base64;\\n };\\n\\n return _this;\\n};\\n\\n//---------------------------------------------------------------------\\n// base64DecodeInputStream\\n//---------------------------------------------------------------------\\n\\nvar base64DecodeInputStream = function(str) {\\n\\n var _str = str;\\n var _pos = 0;\\n var _buffer = 0;\\n var _buflen = 0;\\n\\n var _this = {};\\n\\n _this.read = function() {\\n\\n\\twhile (_buflen < 8) {\\n\\n\\t if (_pos >= _str.length) {\\n\\t\\tif (_buflen == 0) {\\n\\t\\t return -1;\\n\\t\\t}\\n\\t\\tthrow new Error('unexpected end of file./' + _buflen);\\n\\t }\\n\\n\\t var c = _str.charAt(_pos);\\n\\t _pos += 1;\\n\\n\\t if (c == '=') {\\n\\t\\t_buflen = 0;\\n\\t\\treturn -1;\\n\\t } else if (c.match(/^\\\\s$/) ) {\\n\\t\\t// ignore if whitespace.\\n\\t\\tcontinue;\\n\\t }\\n\\n\\t _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\\n\\t _buflen += 6;\\n\\t}\\n\\n\\tvar n = (_buffer >>> (_buflen - 8) ) & 0xff;\\n\\t_buflen -= 8;\\n\\treturn n;\\n };\\n\\n var decode = function(c) {\\n\\tif (0x41 <= c && c <= 0x5a) {\\n\\t return c - 0x41;\\n\\t} else if (0x61 <= c && c <= 0x7a) {\\n\\t return c - 0x61 + 26;\\n\\t} else if (0x30 <= c && c <= 0x39) {\\n\\t return c - 0x30 + 52;\\n\\t} else if (c == 0x2b) {\\n\\t return 62;\\n\\t} else if (c == 0x2f) {\\n\\t return 63;\\n\\t} else {\\n\\t throw new Error('c:' + c);\\n\\t}\\n };\\n\\n return _this;\\n};\\n\\n//---------------------------------------------------------------------\\n// gifImage (B/W)\\n//---------------------------------------------------------------------\\n\\nvar gifImage = function(width, height) {\\n\\n var _width = width;\\n var _height = height;\\n var _data = new Array(width * height);\\n\\n var _this = {};\\n\\n _this.setPixel = function(x, y, pixel) {\\n\\t_data[y * _width + x] = pixel;\\n };\\n\\n _this.write = function(out) {\\n\\n\\t//---------------------------------\\n\\t// GIF Signature\\n\\n\\tout.writeString('GIF87a');\\n\\n\\t//---------------------------------\\n\\t// Screen Descriptor\\n\\n\\tout.writeShort(_width);\\n\\tout.writeShort(_height);\\n\\n\\tout.writeByte(0x80); // 2bit\\n\\tout.writeByte(0);\\n\\tout.writeByte(0);\\n\\n\\t//---------------------------------\\n\\t// Global Color Map\\n\\n\\t// black\\n\\tout.writeByte(0x00);\\n\\tout.writeByte(0x00);\\n\\tout.writeByte(0x00);\\n\\n\\t// white\\n\\tout.writeByte(0xff);\\n\\tout.writeByte(0xff);\\n\\tout.writeByte(0xff);\\n\\n\\t//---------------------------------\\n\\t// Image Descriptor\\n\\n\\tout.writeString(',');\\n\\tout.writeShort(0);\\n\\tout.writeShort(0);\\n\\tout.writeShort(_width);\\n\\tout.writeShort(_height);\\n\\tout.writeByte(0);\\n\\n\\t//---------------------------------\\n\\t// Local Color Map\\n\\n\\t//---------------------------------\\n\\t// Raster Data\\n\\n\\tvar lzwMinCodeSize = 2;\\n\\tvar raster = getLZWRaster(lzwMinCodeSize);\\n\\n\\tout.writeByte(lzwMinCodeSize);\\n\\n\\tvar offset = 0;\\n\\n\\twhile (raster.length - offset > 255) {\\n\\t out.writeByte(255);\\n\\t out.writeBytes(raster, offset, 255);\\n\\t offset += 255;\\n\\t}\\n\\n\\tout.writeByte(raster.length - offset);\\n\\tout.writeBytes(raster, offset, raster.length - offset);\\n\\tout.writeByte(0x00);\\n\\n\\t//---------------------------------\\n\\t// GIF Terminator\\n\\tout.writeString(';');\\n };\\n\\n var bitOutputStream = function(out) {\\n\\n\\tvar _out = out;\\n\\tvar _bitLength = 0;\\n\\tvar _bitBuffer = 0;\\n\\n\\tvar _this = {};\\n\\n\\t_this.write = function(data, length) {\\n\\n\\t if ( (data >>> length) != 0) {\\n\\t\\tthrow new Error('length over');\\n\\t }\\n\\n\\t while (_bitLength + length >= 8) {\\n\\t\\t_out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\\n\\t\\tlength -= (8 - _bitLength);\\n\\t\\tdata >>>= (8 - _bitLength);\\n\\t\\t_bitBuffer = 0;\\n\\t\\t_bitLength = 0;\\n\\t }\\n\\n\\t _bitBuffer = (data << _bitLength) | _bitBuffer;\\n\\t _bitLength = _bitLength + length;\\n\\t};\\n\\n\\t_this.flush = function() {\\n\\t if (_bitLength > 0) {\\n\\t\\t_out.writeByte(_bitBuffer);\\n\\t }\\n\\t};\\n\\n\\treturn _this;\\n };\\n\\n var getLZWRaster = function(lzwMinCodeSize) {\\n\\n\\tvar clearCode = 1 << lzwMinCodeSize;\\n\\tvar endCode = (1 << lzwMinCodeSize) + 1;\\n\\tvar bitLength = lzwMinCodeSize + 1;\\n\\n\\t// Setup LZWTable\\n\\tvar table = lzwTable();\\n\\n\\tfor (var i = 0; i < clearCode; i += 1) {\\n\\t table.add(String.fromCharCode(i) );\\n\\t}\\n\\ttable.add(String.fromCharCode(clearCode) );\\n\\ttable.add(String.fromCharCode(endCode) );\\n\\n\\tvar byteOut = byteArrayOutputStream();\\n\\tvar bitOut = bitOutputStream(byteOut);\\n\\n\\t// clear code\\n\\tbitOut.write(clearCode, bitLength);\\n\\n\\tvar dataIndex = 0;\\n\\n\\tvar s = String.fromCharCode(_data[dataIndex]);\\n\\tdataIndex += 1;\\n\\n\\twhile (dataIndex < _data.length) {\\n\\n\\t var c = String.fromCharCode(_data[dataIndex]);\\n\\t dataIndex += 1;\\n\\n\\t if (table.contains(s + c) ) {\\n\\n\\t\\ts = s + c;\\n\\n\\t } else {\\n\\n\\t\\tbitOut.write(table.indexOf(s), bitLength);\\n\\n\\t\\tif (table.size() < 0xfff) {\\n\\n\\t\\t if (table.size() == (1 << bitLength) ) {\\n\\t\\t\\tbitLength += 1;\\n\\t\\t }\\n\\n\\t\\t table.add(s + c);\\n\\t\\t}\\n\\n\\t\\ts = c;\\n\\t }\\n\\t}\\n\\n\\tbitOut.write(table.indexOf(s), bitLength);\\n\\n\\t// end code\\n\\tbitOut.write(endCode, bitLength);\\n\\n\\tbitOut.flush();\\n\\n\\treturn byteOut.toByteArray();\\n };\\n\\n var lzwTable = function() {\\n\\n\\tvar _map = {};\\n\\tvar _size = 0;\\n\\n\\tvar _this = {};\\n\\n\\t_this.add = function(key) {\\n\\t if (_this.contains(key) ) {\\n\\t\\tthrow new Error('dup key:' + key);\\n\\t }\\n\\t _map[key] = _size;\\n\\t _size += 1;\\n\\t};\\n\\n\\t_this.size = function() {\\n\\t return _size;\\n\\t};\\n\\n\\t_this.indexOf = function(key) {\\n\\t return _map[key];\\n\\t};\\n\\n\\t_this.contains = function(key) {\\n\\t return typeof _map[key] != 'undefined';\\n\\t};\\n\\n\\treturn _this;\\n };\\n\\n return _this;\\n};\\n\\nvar createImgTag = function(width, height, getPixel, alt) {\\n\\n var gif = gifImage(width, height);\\n for (var y = 0; y < height; y += 1) {\\n\\tfor (var x = 0; x < width; x += 1) {\\n\\t gif.setPixel(x, y, getPixel(x, y) );\\n\\t}\\n }\\n\\n var b = byteArrayOutputStream();\\n gif.write(b);\\n\\n var base64 = base64EncodeOutputStream();\\n var bytes = b.toByteArray();\\n for (var i = 0; i < bytes.length; i += 1) {\\n\\tbase64.writeByte(bytes[i]);\\n }\\n base64.flush();\\n\\n var img = '';\\n img += 'data:image/gif;base64,';\\n img += base64;\\n\\n return img;\\n};\\n\\n//---------------------------------------------------------------------\\n// returns qrcode function.\\n\\nmodule.exports = qrcode;\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/qrcode/qrcode.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/qrcode/license\": {\n \"text\": \"The MIT License (MIT)\\n\\nCopyright (c) 2013 Zeno Zeng\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of\\nthis software and associated documentation files (the \\\"Software\\\"), to deal in\\nthe Software without restriction, including without limitation the rights to\\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\\nthe Software, and to permit persons to whom the Software is furnished to do so,\\nsubject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all\\ncopies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/qrcode/license\"\n },\n \"$:/plugins/tiddlywiki/qrcode/icon\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/icon\",\n \"tags\": \"$:/tags/Image\",\n \"text\": \"<svg class=\\\"tc-image-qrcode tc-image-button\\\" viewBox=\\\"0 0 128 128\\\" width=\\\"22pt\\\" height=\\\"22pt\\\">\\n <g fill-rule=\\\"evenodd\\\">\\n <path d=\\\"M0,15.9969199 C0,7.16206498 7.16987059,0 15.9969199,0 L64.0030801,0 C72.837935,0 80,7.16987059 80,15.9969199 L80,64.0030801 C80,72.837935 72.8301294,80 64.0030801,80 L15.9969199,80 C7.16206498,80 0,72.8301294 0,64.0030801 L0,15.9969199 Z M16,22.0063866 C16,18.6891509 18.6835413,16 22.0063866,16 L57.9936134,16 C61.3108491,16 64,18.6835413 64,22.0063866 L64,57.9936134 C64,61.3108491 61.3164587,64 57.9936134,64 L22.0063866,64 C18.6891509,64 16,61.3164587 16,57.9936134 L16,22.0063866 Z M28,31.990053 C28,29.7864076 29.7842933,28 31.990053,28 L48.009947,28 C50.2135924,28 52,29.7842933 52,31.990053 L52,48.009947 C52,50.2135924 50.2157067,52 48.009947,52 L31.990053,52 C29.7864076,52 28,50.2157067 28,48.009947 L28,31.990053 Z\\\"></path>\\n <path d=\\\"M112,16 L112,8.49833453 L112,6.00333095 C112,2.68778282 114.67804,0 118.003331,0 L121.996669,0 C125.312217,0 128,2.67804027 128,6.00333095 L128,8.49833453 L128,23.0016655 L128,25.9966691 C128,29.3122172 125.32196,32 121.996669,32 L119.001665,32 L104.998335,32 L102.003331,32 C98.6877828,32 96,29.3219597 96,25.9966691 L96,22.0033309 C96,18.6877828 98.6780403,16 102.003331,16 L104.998335,16 L112,16 Z\\\"></path>\\n <path d=\\\"M96,56.9983345 L96,54.0033309 C96,50.6877828 98.6780403,48 102.003331,48 L104.998335,48 L119.001665,48 L121.996669,48 C125.312217,48 128,50.6780403 128,54.0033309 L128,57.9966691 C128,61.3122172 125.32196,64 121.996669,64 L119.001665,64 L112,64 L112,71.0016655 L112,73.9966691 C112,77.3122172 109.32196,80 105.996669,80 L102.003331,80 C98.6877828,80 96,77.3219597 96,73.9966691 L96,71.0016655 L96,56.9983345 Z\\\"></path>\\n <path d=\\\"M16,112 L23.0016655,112 L24.9983345,112 L32,112 L32,104.998335 L32,102.003331 C32,98.6877828 34.6780403,96 38.0033309,96 L40.9983345,96 L55.0016655,96 L57.9966691,96 C61.3122172,96 64,98.6780403 64,102.003331 L64,105.996669 C64,109.312217 61.3219597,112 57.9966691,112 L55.0016655,112 L48,112 L48,119.001665 L48,121.996669 C48,125.312217 45.3219597,128 41.9966691,128 L39.0016655,128 L24.9983345,128 L23.0016655,128 L8.99833453,128 L6.00333095,128 C2.68778282,128 0,125.32196 0,121.996669 L0,119.001665 L0,104.998335 L0,102.003331 C0,98.6877828 2.67804027,96 6.00333095,96 L9.99666905,96 C13.3122172,96 16,98.6780403 16,102.003331 L16,104.998335 L16,112 Z\\\"></path>\\n <path d=\\\"M103.001665,96 L105.996669,96 C109.312217,96 112,98.6780403 112,102.003331 L112,105.996669 C112,109.312217 109.32196,112 105.996669,112 L103.001665,112 L88.9983345,112 L86.0033309,112 C82.6877828,112 80,109.32196 80,105.996669 L80,102.003331 C80,98.6877828 82.6780403,96 86.0033309,96 L88.9983345,96 L103.001665,96 Z\\\"></path>\\n <path d=\\\"M72.9983345,112 L70.0033309,112 C66.6780403,112 64,114.687783 64,118.003331 L64,121.996669 C64,125.32196 66.6877828,128 70.0033309,128 L72.9983345,128 L87.0016655,128 L89.9966691,128 C93.3219597,128 96,125.312217 96,121.996669 L96,118.003331 C96,114.67804 93.3122172,112 89.9966691,112 L87.0016655,112 L72.9983345,112 Z\\\"></path>\\n <rect x=\\\"112\\\" y=\\\"80\\\" width=\\\"16\\\" height=\\\"16\\\" rx=\\\"6\\\"></rect>\\n <rect x=\\\"112\\\" y=\\\"112\\\" width=\\\"16\\\" height=\\\"16\\\" rx=\\\"6\\\"></rect>\\n </g>\\n</svg>\"\n },\n \"$:/plugins/tiddlywiki/qrcode/makeqr.js\": {\n \"title\": \"$:/plugins/tiddlywiki/qrcode/makeqr.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/qrcode/makeqr.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to convert a string into a QR Code\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n/*\\nInformation about this macro\\n*/\\n\\nvar qrcode = require(\\\"$:/plugins/tiddlywiki/qrcode/qrcode.js\\\");\\n\\nvar QRCODE_GENERATION_ERROR_PREFIX = '<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 300 300\\\"><text x=\\\"0\\\" y=\\\"30\\\" fill=\\\"red\\\" font-family=\\\"Helvetica, sans-serif\\\" font-size=\\\"18\\\">',\\n\\tQRCODE_GENERATION_ERROR_SUFFIX = '</text></svg>';\\n\\nexports.name = \\\"makeqr\\\";\\n\\nexports.params = [\\n\\t{name: \\\"text\\\"},\\n\\t{name: \\\"size\\\"},\\n\\t{name: \\\"errorCorrectLevel\\\"},\\n\\t{name: \\\"fallback\\\"}\\n];\\n\\n/*\\nRun the macro\\n*/\\nexports.run = function(text,size,errorCorrectLevel,fallback) {\\n\\tvar result;\\n\\ttry {\\n\\t\\tresult = generateQrCode(text,{size: size, errorCorrectLevel: errorCorrectLevel});\\n\\t} catch (ex) {\\n\\t\\tconsole.log(\\\"makeqr error: \\\" + ex);\\n\\t\\tresult = fallback || (\\\"data:image/svg+xml,\\\" + encodeURI(QRCODE_GENERATION_ERROR_PREFIX + ex + QRCODE_GENERATION_ERROR_SUFFIX));\\n\\t}\\n\\treturn result || \\\"\\\";\\n};\\n\\nfunction generateQrCode(text,options) {\\n\\toptions = options || {};\\n\\tvar typeNumber = options.typeNumber || 4,\\n\\t\\terrorCorrectLevel = options.errorCorrectLevel || \\\"M\\\",\\n\\t\\tsize = options.size || 500,\\n\\t\\tqr;\\n\\ttry {\\n\\t\\tqr = qrcode(typeNumber,errorCorrectLevel);\\n\\t\\tqr.addData(text);\\n\\t\\tqr.make();\\n\\t} catch (e) {\\n\\t\\tif(typeNumber >= 40) {\\n\\t\\t\\tthrow new Error(\\\"Text too long to encode\\\");\\n\\t\\t} else {\\n\\t\\t\\treturn generateQrCode(text, {\\n\\t\\t\\t\\tsize: size,\\n\\t\\t\\t\\terrorCorrectLevel: errorCorrectLevel,\\n\\t\\t\\t\\ttypeNumber: typeNumber + 1\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\tvar cellsize = parseInt(size / qr.getModuleCount()),\\n\\t\\tmargin = parseInt((size - qr.getModuleCount() * cellsize) / 2);\\n\\treturn qr.createImgTag(cellsize, margin, size);\\n}\\n\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"macro\"\n }\n }\n}"},"$:/plugins/tiddlywiki/railroad":{"title":"$:/plugins/tiddlywiki/railroad","name":"Railroad","description":"Railroad diagram generator","author":"Astrid Elocson","list":"readme usage syntax example","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/railroad/components.js\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/components.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/railroad/components.js\\ntype: application/javascript\\nmodule-type: library\\n\\nComponents of a railroad diagram.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar railroad = require(\\\"$:/plugins/tiddlywiki/railroad/railroad-diagrams.js\\\");\\n\\n/////////////////////////// Base component\\n\\nvar Component = function() {\\n\\tthis.type = \\\"Component\\\";\\n};\\n\\n// Set up a leaf component\\nComponent.prototype.initialiseLeaf = function(type,text) {\\n\\tthis.type = type;\\n\\tthis.text = text;\\n};\\n\\n// Set up a component with a single child\\nComponent.prototype.initialiseWithChild = function(type,content) {\\n\\tthis.type = type;\\n\\tthis.child = toSingleChild(content);\\n};\\n\\n// Set up a component with an array of children\\nComponent.prototype.initialiseWithChildren = function(type,content) {\\n\\tthis.type = type;\\n\\t// Force the content to be an array\\n\\tthis.children = $tw.utils.isArray(content) ? content : [content];\\n}\\n\\n// Return an array of the SVG strings of an array of children\\nComponent.prototype.getSvgOfChildren = function() {\\n\\treturn this.children.map(function(child) {\\n\\t\\treturn child.toSvg();\\n\\t});\\n}\\n\\nComponent.prototype.toSvg = function() {\\n\\treturn \\\"\\\";\\n}\\n\\nComponent.prototype.debug = function(output,indent) {\\n\\toutput.push(indent);\\n\\toutput.push(this.type);\\n\\t// Add the text of a leaf component\\n\\tif(this.text && this.text !== \\\"\\\") {\\n\\t\\toutput.push(\\\": \\\");\\n\\t\\toutput.push(this.text);\\n\\t}\\n\\t// Flag the normal route\\n\\tif(this.normal !== undefined) {\\n\\t\\tif(this.normal === true) {\\n\\t\\t\\toutput.push(\\\" (normal)\\\");\\n\\t\\t} else if(this.normal !== false) {\\n\\t\\t\\toutput.push(\\\" (normal: \\\");\\n\\t\\t\\toutput.push(this.normal);\\n\\t\\t\\toutput.push(\\\")\\\");\\n\\t\\t}\\n\\t}\\n\\toutput.push(\\\"\\\\n\\\");\\n\\tvar contentIndent = indent + \\\" \\\";\\n\\t// Add the one child\\n\\tif(this.child) {\\n\\t\\tthis.child.debug(output,contentIndent);\\n\\t}\\n\\t// Add the array of children\\n\\tif(this.children) {\\n\\t\\tthis.debugArray(this.children,output,contentIndent);\\n\\t}\\n \\t// Add the separator if there is one\\n\\tif(this.separator) {\\n\\t\\toutput.push(indent);\\n\\t\\toutput.push(\\\"(separator)\\\\n\\\");\\n\\t\\tthis.separator.debug(output,contentIndent);\\n\\t}\\n};\\n\\nComponent.prototype.debugArray = function(array,output,indent) {\\n\\tfor(var i=0; i<array.length; i++) {\\n\\t\\tvar item = array[i];\\n\\t\\t// Choice content is a special case: we number the branches\\n\\t\\tif(item.isChoiceBranch) {\\n\\t\\t\\toutput.push(indent);\\n\\t\\t\\toutput.push(\\\"(\\\");\\n\\t\\t\\toutput.push(i);\\n\\t\\t\\toutput.push(\\\")\\\\n\\\");\\n\\t\\t\\titem.debug(output,\\\" \\\"+indent);\\n\\t\\t} else {\\n\\t\\t\\titem.debug(output,indent);\\n\\t\\t}\\n\\t}\\n}\\n\\nvar toSingleChild = function(content) {\\n\\tif($tw.utils.isArray(content)) {\\n\\t\\t// Reduce an array of one child to just the child\\n\\t\\tif(content.length === 1) {\\n\\t\\t\\treturn content[0];\\n\\t\\t} else {\\n\\t\\t\\t// Never allow an empty sequence\\n\\t\\t \\tif(content.length === 0) {\\n \\t\\t\\t\\tcontent.push(new Dummy());\\n\\t\\t \\t}\\n\\t\\t\\t// Wrap multiple children into a single sequence component\\n\\t\\t\\treturn new Sequence(content);\\n\\t\\t}\\n\\t} else {\\n\\t\\t// Already single\\n\\t\\treturn content;\\n\\t}\\n}\\n\\n/////////////////////////// Leaf components\\n\\nvar Comment = function(text) {\\n\\tthis.initialiseLeaf(\\\"Comment\\\",text);\\n};\\n\\nComment.prototype = new Component();\\n\\nComment.prototype.toSvg = function() {\\n\\treturn railroad.Comment(this.text);\\n}\\n\\nvar Dummy = function() {\\n\\tthis.initialiseLeaf(\\\"Dummy\\\");\\n};\\n\\nDummy.prototype = new Component();\\n\\nDummy.prototype.toSvg = function() {\\n\\treturn railroad.Skip();\\n}\\n\\nvar Nonterminal = function(text) {\\n\\tthis.initialiseLeaf(\\\"Nonterminal\\\",text);\\n};\\n\\nNonterminal.prototype = new Component();\\n\\nNonterminal.prototype.toSvg = function() {\\n\\treturn railroad.NonTerminal(this.text);\\n}\\n\\nvar Terminal = function(text) {\\n\\tthis.initialiseLeaf(\\\"Terminal\\\",text);\\n};\\n\\nTerminal.prototype = new Component();\\n\\nTerminal.prototype.toSvg = function() {\\n\\treturn railroad.Terminal(this.text);\\n}\\n\\n/////////////////////////// Components with one child\\n\\nvar Optional = function(content,normal) {\\n\\tthis.initialiseWithChild(\\\"Optional\\\",content);\\n\\tthis.normal = normal;\\n};\\n\\nOptional.prototype = new Component();\\n\\nOptional.prototype.toSvg = function() {\\n\\t// Call Optional(component,\\\"skip\\\")\\n\\treturn railroad.Optional(this.child.toSvg(), this.normal ? undefined : \\\"skip\\\");\\n}\\n\\nvar OptionalRepeated = function(content,separator,normal,wantArrow) {\\n\\tthis.initialiseWithChild(\\\"OptionalRepeated\\\",content);\\n\\tthis.separator = toSingleChild(separator);\\n\\tthis.normal = normal;\\n\\tthis.wantArrow = wantArrow;\\n};\\n\\nOptionalRepeated.prototype = new Component();\\n\\nOptionalRepeated.prototype.toSvg = function() {\\n\\t// Call ZeroOrMore(component,separator,\\\"skip\\\")\\n\\tvar separatorSvg = this.separator ? this.separator.toSvg() : null;\\n\\tvar skip = this.normal ? undefined : \\\"skip\\\";\\n\\treturn railroad.ZeroOrMore(this.child.toSvg(),separatorSvg,skip,this.wantArrow);\\n}\\n\\nvar Repeated = function(content,separator,wantArrow) {\\n\\tthis.initialiseWithChild(\\\"Repeated\\\",content);\\n\\tthis.separator = toSingleChild(separator);\\n\\tthis.wantArrow = wantArrow;\\n};\\n\\nRepeated.prototype = new Component();\\n\\nRepeated.prototype.toSvg = function() {\\n\\t// Call OneOrMore(component,separator)\\n\\tvar separatorSvg = this.separator ? this.separator.toSvg() : null;\\n\\treturn railroad.OneOrMore(this.child.toSvg(),separatorSvg,this.wantArrow);\\n}\\n\\nvar Link = function(content,options) {\\n\\tthis.initialiseWithChild(\\\"Link\\\",content);\\n\\tthis.options = options;\\n};\\n\\nLink.prototype = new Component();\\n\\nLink.prototype.toSvg = function() {\\n\\treturn railroad.Link(this.child.toSvg(),this.options);\\n}\\n\\nvar Transclusion = function(content) {\\n\\tthis.initialiseWithChild(\\\"Transclusion\\\",content);\\n};\\n\\nTransclusion.prototype = new Component();\\n\\nTransclusion.prototype.toSvg = function() {\\n\\treturn this.child.toSvg();\\n}\\n\\n/////////////////////////// Components with an array of children\\n\\nvar Root = function(content) {\\n\\tthis.initialiseWithChildren(\\\"Root\\\",content);\\n};\\n\\nRoot.prototype = new Component();\\n\\nRoot.prototype.toSvg = function(options) {\\n\\tvar args = this.getSvgOfChildren();\\n\\targs.unshift(options);\\n\\t// Call Diagram(options,component1,component2,...)\\n\\treturn railroad.Diagram.apply(null,args);\\n}\\n\\nvar Sequence = function(content) {\\n\\tthis.initialiseWithChildren(\\\"Sequence\\\",content);\\n};\\n\\nSequence.prototype = new Component();\\n\\nSequence.prototype.toSvg = function() {\\n\\t// Call Sequence(component1,component2,...)\\n\\treturn railroad.Sequence.apply(null,this.getSvgOfChildren());\\n}\\n\\nvar Choice = function(content,normal) {\\n\\tthis.initialiseWithChildren(\\\"Choice\\\",content.map(toSingleChild));\\n\\tfor(var i=0; i<this.children.length; i++) {\\n\\t\\tthis.children[i].isChoiceBranch = true;\\n\\t}\\n\\tthis.normal = normal;\\n};\\n\\nChoice.prototype = new Component();\\n\\nChoice.prototype.toSvg = function() {\\n\\t// Call Choice(normal,component1,component2,...)\\n\\tvar args = this.getSvgOfChildren();\\n\\targs.unshift(this.normal);\\n\\treturn railroad.Choice.apply(null,args);\\n}\\n\\n/////////////////////////// Exports\\n\\nexports.components = {\\n\\tChoice: Choice,\\n\\tComment: Comment,\\n\\tDummy: Dummy,\\n\\tLink: Link,\\n\\tNonterminal: Nonterminal,\\n\\tOptional: Optional,\\n\\tOptionalRepeated: OptionalRepeated,\\n\\tRepeated: Repeated,\\n\\tRoot: Root,\\n\\tSequence: Sequence,\\n\\tTerminal: Terminal,\\n\\tTransclusion: Transclusion\\n};\\n\\n})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/railroad/example-source\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/example-source\",\n \"created\": \"20150103184022184\",\n \"modified\": \"20150119214125000\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki.railroad\",\n \"text\": \"[\\\"+\\\"]\\n({ [[digit|GettingStarted]] } | \\\"#\\\" <'escape sequence'>)\\n[{(\\\"@\\\" name-char | :\\\"--\\\" )}]\\n\"\n },\n \"$:/plugins/tiddlywiki/railroad/example\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/example\",\n \"created\": \"20150102165032410\",\n \"modified\": \"20150120090735000\",\n \"tags\": \"\",\n \"text\": \"Notation:\\n\\n<pre><code><$text text={{$:/plugins/tiddlywiki/railroad/example-source}}/></code></pre>\\n\\nDiagram:\\n\\n{{$:/plugins/tiddlywiki/railroad/example-source}}\\n\\nDebug mode:\\n\\n<$railroad debug=\\\"yes\\\" text={{$:/plugins/tiddlywiki/railroad/example-source}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/railroad/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/readme\",\n \"created\": \"20150102163222184\",\n \"modified\": \"20150119231005000\",\n \"text\": \"This plugin provides a `<$railroad>` widget for generating railroad diagrams as SVG images.\\n\\nAlternatively, the [[diagram notation|$:/plugins/tiddlywiki/railroad/syntax]] can be stored in a dedicated tiddler with its `type` field set to `text/vnd.tiddlywiki.railroad`, and that tiddler can simply be transcluded to wherever it is needed.\\n\\nThe plugin is based on [[a library by Tab Atkins|https://github.com/tabatkins/railroad-diagrams]], and has been extended to make it more flexible, including allowing components of a diagram to function as links or be transcluded from other tiddlers.\\n\"\n },\n \"$:/plugins/tiddlywiki/railroad/syntax-string\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/syntax-string\",\n \"created\": \"20150103184022184\",\n \"modified\": \"20150103184022184\",\n \"text\": \"('\\\"' text '\\\"' | \\\"'\\\" text \\\"'\\\" | '\\\"\\\"\\\"' text '\\\"\\\"\\\"')\"\n },\n \"$:/plugins/tiddlywiki/railroad/syntax\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/syntax\",\n \"created\": \"20150103184022184\",\n \"modified\": \"20150119220342000\",\n \"text\": \"The railroad widget uses a special notation to construct the components defined below.\\n\\n`x` and `y` here stand for any component.\\n\\nNames (as opposed to quoted strings) are available when a value starts with a letter and contains only letters, digits, underscores, dots and hyphens.\\n\\n---\\n\\n; sequence\\n: <$railroad text=\\\"\\\"\\\" [\\\"<-\\\"] {x} [\\\"->\\\"] \\\"\\\"\\\"/>\\n* A sequence of components\\n* The `<-` and `->` delimiters allow you to force a single component to be treated as a sequence. This is occasionally useful for spacing a diagram out\\n\\n---\\n\\n; optional\\n: <$railroad text=\\\"\\\"\\\" \\\"[\\\" [\\\":\\\"] x \\\"]\\\" \\\"\\\"\\\"/>\\n* A component that can be omitted\\n* The colon makes `x` appear straight ahead\\n\\n---\\n\\n; repeated\\n: <$railroad text=\\\"\\\"\\\" \\\"{\\\" x [:\\\"+\\\" y] \\\"}\\\" \\\"\\\"\\\"/>\\n* A list of one or more `x`\\n* The `+` suffix adds `y` as a separator between each `x` and the next\\n\\n---\\n\\n; optional repeated\\n: <$railroad text=\\\"\\\"\\\" \\\"[{\\\" [\\\":\\\"] x [:\\\"+\\\" y] \\\"}]\\\" \\\"\\\"\\\"/>\\n* An optional list of `x`, i.e. a list of zero or more `x`\\n\\n---\\n\\n; choice\\n: <$railroad text=\\\"\\\"\\\" \\\"(\\\" {[:\\\":\\\"] x +\\\"|\\\"} \\\")\\\" \\\"\\\"\\\"/>\\n* A set of alternatives\\n* The colon indicates which branch appears straight ahead. By default, it's the first branch\\n\\n---\\n\\n; string / terminal\\n: <$railroad text={{$:/plugins/tiddlywiki/railroad/syntax-string}}/>\\n* A literal or terminal component\\n* This follows the normal ~TiddlyWiki rules for quoted strings\\n\\n---\\n\\n; nonterminal\\n: <$railroad text=\\\"\\\"\\\" (name | \\\"<\\\" string \\\">\\\") \\\"\\\"\\\"/>\\n* A nonterminal component, i.e. the name of another diagram\\n\\n---\\n\\n; comment\\n: <$railroad text=\\\"\\\"\\\" \\\"/\\\" string \\\"/\\\" \\\"\\\"\\\"/>\\n* A comment\\n\\n---\\n\\n; dummy\\n: <$railroad text=\\\"\\\"\\\" \\\"-\\\" \\\"\\\"\\\"/>\\n* The absence of a component\\n\\n---\\n\\n; link\\n: <$railroad text=\\\"\\\"\\\" \\\"[[\\\" x \\\"|\\\" (name|string) \\\"]]\\\" \\\"\\\"\\\"/>\\n* A link to the tiddler title or URI given by the string or name\\n\\n---\\n\\n; transclusion\\n: <$railroad text=\\\"\\\"\\\" \\\"{{\\\" (name|string) \\\"}}\\\" \\\"\\\"\\\"/>\\n* Treats the content of another tiddler as diagram syntax and transcludes it into the current diagram\\n\\n---\\n\\n; arrow pragma\\n: <$railroad text=\\\"\\\"\\\" \\\"\\\\arrow\\\" (\\\"yes\\\" | \\\"no\\\") \\\"\\\"\\\"/>\\n* Controls whether repeat paths have an arrow on them\\n* Can be toggled on and off in mid-diagram, if desired\\n\\n---\\n\\n; debug pragma\\n: <$railroad text=\\\"\\\"\\\" \\\"\\\\debug\\\" \\\"\\\"\\\"/>\\n* Causes the diagram to display its parse tree\\n\\n---\\n\\n; start/end pragma\\n: <$railroad text=\\\"\\\"\\\" (\\\"\\\\start\\\" |: \\\"\\\\end\\\") (\\\"none\\\" |: \\\"single\\\" | \\\"double\\\") \\\"\\\"\\\"/>\\n* Controls the style of the diagram's startpoint or endpoint\\n\"\n },\n \"$:/plugins/tiddlywiki/railroad/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/usage\",\n \"created\": \"20150102163222184\",\n \"modified\": \"20150119231005000\",\n \"text\": \"The content of the `<$railroad>` widget is ignored.\\n\\n|!Attribute |!Description |!Default |\\n|text |Text in a special notation that defines the diagram's layout |-- |\\n|arrow |If set to `no`, repeat paths do not have an arrow on them |`yes` |\\n|start |Style of the startpoint: `single`, `double`, `none` |`single` |\\n|end |Style of the endpoint: `single`, `double`, `none` |`single` |\\n|debug |If set to `yes`, the diagram displays its parse tree |`no` |\\n\\nThese options can also be specified via pragmas in the diagram notation, or globally via a dictionary tiddler called `$:/config/railroad`:\\n\\n```\\narrow: yes\\nstart: single\\nend: single\\ndebug: no\\n```\\n\"\n },\n \"$:/plugins/tiddlywiki/railroad/railroad-diagrams.css\": {\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n/* CSS modified for TiddlyWiki */\\n\\nsvg.railroad-diagram {\\n\\tbackground-color: <<colour background>>;\\n\\tborder-radius: 5px;\\n}\\n/*\\nsvg.railroad-diagram:hover {\\n\\tbackground-color: hsl(30,20%,96%);\\n}\\n*/\\nsvg.railroad-diagram path,\\nsvg.railroad-diagram rect {\\n\\tstroke-width: 2;\\n\\tstroke: <<colour message-border>>;\\n}\\nsvg.railroad-diagram path {\\n\\tfill: <<colour background>>;\\n}\\nsvg.railroad-diagram rect {\\n\\tfill: <<colour message-background>>;\\n}\\nsvg.railroad-diagram text {\\n\\tfont: 14px monospace;\\n\\ttext-anchor: middle;\\n\\tfill: <<colour message-foreground>>;\\n}\\nsvg.railroad-diagram text.label {\\n\\ttext-anchor: start;\\n}\\nsvg.railroad-diagram text.comment {\\n\\tfont: italic 12px monospace;\\n}\\nsvg.railroad-diagram path.arrow {\\n stroke-width: 2;\\n}\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"title\": \"$:/plugins/tiddlywiki/railroad/railroad-diagrams.css\",\n \"tags\": \"$:/tags/Stylesheet\"\n },\n \"$:/plugins/tiddlywiki/railroad/railroad-diagrams.js\": {\n \"text\": \"(function(document) {\\n/* TiddlyWiki: modifications to the original library are commented like this */\\n\\n/*\\nRailroad Diagrams\\nby Tab Atkins Jr. (and others)\\nhttp://xanthir.com\\nhttp://twitter.com/tabatkins\\nhttp://github.com/tabatkins/railroad-diagrams\\n\\nThis document and all associated files in the github project are licensed under CC0: http://creativecommons.org/publicdomain/zero/1.0/\\nThis means you can reuse, remix, or otherwise appropriate this project for your own use WITHOUT RESTRICTION.\\n(The actual legal meaning can be found at the above link.)\\nDon't ask me for permission to use any part of this project, JUST USE IT.\\nI would appreciate attribution, but that is not required by the license.\\n*/\\n\\n/*\\nThis file uses a module pattern to avoid leaking names into the global scope.\\nThe only accidental leakage is the name \\\"temp\\\".\\nThe exported names can be found at the bottom of this file;\\nsimply change the names in the array of strings to change what they are called in your application.\\n\\nAs well, several configuration constants are passed into the module function at the bottom of this file.\\nAt runtime, these constants can be found on the Diagram class.\\n*/\\n\\nvar temp = (function(options) {\\n\\tfunction subclassOf(baseClass, superClass) {\\n\\t\\tbaseClass.prototype = Object.create(superClass.prototype);\\n\\t\\tbaseClass.prototype.$super = superClass.prototype;\\n\\t}\\n\\n\\tfunction unnull(/* children */) {\\n\\t\\treturn [].slice.call(arguments).reduce(function(sofar, x) { return sofar !== undefined ? sofar : x; });\\n\\t}\\n\\n\\tfunction determineGaps(outer, inner) {\\n\\t\\tvar diff = outer - inner;\\n\\t\\tswitch(Diagram.INTERNAL_ALIGNMENT) {\\n\\t\\t\\tcase 'left': return [0, diff]; break;\\n\\t\\t\\tcase 'right': return [diff, 0]; break;\\n\\t\\t\\tcase 'center':\\n\\t\\t\\tdefault: return [diff/2, diff/2]; break;\\n\\t\\t}\\n\\t}\\n\\n\\tfunction wrapString(value) {\\n\\t\\treturn ((typeof value) == 'string') ? new Terminal(value) : value;\\n\\t}\\n\\n\\n\\tfunction SVG(name, attrs, text) {\\n\\t\\tattrs = attrs || {};\\n\\t\\ttext = text || '';\\n\\t\\tvar el = document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",name);\\n\\t\\tfor(var attr in attrs) {\\n\\t\\t\\tel.setAttribute(attr, attrs[attr]);\\n\\t\\t}\\n\\t\\tel.textContent = text;\\n\\t\\treturn el;\\n\\t}\\n\\n\\tfunction FakeSVG(tagName, attrs, text){\\n\\t\\tif(!(this instanceof FakeSVG)) return new FakeSVG(tagName, attrs, text);\\n\\t\\tif(text) this.children = text;\\n\\t\\telse this.children = [];\\n\\t\\tthis.tagName = tagName;\\n\\t\\tthis.attrs = unnull(attrs, {});\\n\\t\\treturn this;\\n\\t};\\n\\tFakeSVG.prototype.format = function(x, y, width) {\\n\\t\\t// Virtual\\n\\t};\\n\\tFakeSVG.prototype.addTo = function(parent) {\\n\\t\\tif(parent instanceof FakeSVG) {\\n\\t\\t\\tparent.children.push(this);\\n\\t\\t\\treturn this;\\n\\t\\t} else {\\n\\t\\t\\tvar svg = this.toSVG();\\n\\t\\t\\tparent.appendChild(svg);\\n\\t\\t\\treturn svg;\\n\\t\\t}\\n\\t};\\n\\tFakeSVG.prototype.toSVG = function() {\\n\\t\\tvar el = SVG(this.tagName, this.attrs);\\n\\t\\tif(typeof this.children == 'string') {\\n\\t\\t\\tel.textContent = this.children;\\n\\t\\t} else {\\n\\t\\t\\tthis.children.forEach(function(e) {\\n\\t\\t\\t\\tel.appendChild(e.toSVG());\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\treturn el;\\n\\t};\\n\\tFakeSVG.prototype.toString = function() {\\n\\t\\tvar str = '<' + this.tagName;\\n\\t\\tvar group = this.tagName == \\\"g\\\" || this.tagName == \\\"svg\\\";\\n\\t\\tfor(var attr in this.attrs) {\\n\\t\\t\\tstr += ' ' + attr + '=\\\"' + (this.attrs[attr]+'').replace(/&/g, '&').replace(/\\\"/g, '"') + '\\\"';\\n\\t\\t}\\n\\t\\tstr += '>';\\n\\t\\tif(group) str += \\\"\\\\n\\\";\\n\\t\\tif(typeof this.children == 'string') {\\n\\t\\t\\tstr += this.children.replace(/&/g, '&').replace(/</g, '<');\\n\\t\\t} else {\\n\\t\\t\\tthis.children.forEach(function(e) {\\n\\t\\t\\t\\tstr += e;\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\tstr += '</' + this.tagName + '>\\\\n';\\n\\t\\treturn str;\\n\\t}\\n\\n\\tfunction Path(x,y,attrs) {\\n\\t\\tif(!(this instanceof Path)) return new Path(x,y,attrs);\\n\\t\\tFakeSVG.call(this, 'path', attrs);\\n\\t\\tthis.attrs.d = \\\"M\\\"+x+' '+y;\\n\\t}\\n\\tsubclassOf(Path, FakeSVG);\\n\\tPath.prototype.m = function(x,y) {\\n\\t\\tthis.attrs.d += 'm'+x+' '+y;\\n\\t\\treturn this;\\n\\t}\\n\\tPath.prototype.h = function(val) {\\n\\t\\tthis.attrs.d += 'h'+val;\\n\\t\\treturn this;\\n\\t}\\n\\tPath.prototype.right = Path.prototype.h;\\n\\tPath.prototype.left = function(val) { return this.h(-val); }\\n\\tPath.prototype.v = function(val) {\\n\\t\\tthis.attrs.d += 'v'+val;\\n\\t\\treturn this;\\n\\t}\\n\\tPath.prototype.down = Path.prototype.v;\\n\\tPath.prototype.up = function(val) { return this.v(-val); }\\n\\tPath.prototype.arc = function(sweep){\\n\\t\\tvar x = Diagram.ARC_RADIUS;\\n\\t\\tvar y = Diagram.ARC_RADIUS;\\n\\t\\tif(sweep[0] == 'e' || sweep[1] == 'w') {\\n\\t\\t\\tx *= -1;\\n\\t\\t}\\n\\t\\tif(sweep[0] == 's' || sweep[1] == 'n') {\\n\\t\\t\\ty *= -1;\\n\\t\\t}\\n\\t\\tif(sweep == 'ne' || sweep == 'es' || sweep == 'sw' || sweep == 'wn') {\\n\\t\\t\\tvar cw = 1;\\n\\t\\t} else {\\n\\t\\t\\tvar cw = 0;\\n\\t\\t}\\n\\t\\tthis.attrs.d += \\\"a\\\"+Diagram.ARC_RADIUS+\\\" \\\"+Diagram.ARC_RADIUS+\\\" 0 0 \\\"+cw+' '+x+' '+y;\\n\\t\\treturn this;\\n\\t}\\n\\tPath.prototype.format = function() {\\n\\t\\t// All paths in this library start/end horizontally.\\n\\t\\t// The extra .5 ensures a minor overlap, so there's no seams in bad rasterizers.\\n\\t\\tthis.attrs.d += 'h.5';\\n\\t\\treturn this;\\n\\t}\\n/* TiddlyWiki: added support for arbitrary straight lines */\\n\\tPath.prototype.line = function(dx,dy) {\\n\\t\\tthis.attrs.d += \\\"l\\\"+dx+\\\" \\\"+dy;\\n\\t\\treturn this;\\n\\t}\\n\\n/* TiddlyWiki: added twOptions parameter, passing it to Start() and End() */\\n\\tfunction Diagram(twOptions, items) {\\n\\t\\tif(!(this instanceof Diagram)) return new Diagram(twOptions, [].slice.call(arguments,1));\\n\\t\\tFakeSVG.call(this, 'svg', {class: Diagram.DIAGRAM_CLASS});\\n\\t\\tthis.items = items.map(wrapString);\\n\\t\\tthis.items.unshift(new Start(twOptions.start));\\n\\t\\tthis.items.push(new End(twOptions.end));\\n\\t\\tthis.width = this.items.reduce(function(sofar, el) { return sofar + el.width + (el.needsSpace?20:0)}, 0)+1;\\n\\t\\tthis.up = Math.max.apply(null, this.items.map(function (x) { return x.up; }));\\n\\t\\tthis.down = Math.max.apply(null, this.items.map(function (x) { return x.down; }));\\n\\t\\tthis.formatted = false;\\t\\t\\n\\t}\\n\\tsubclassOf(Diagram, FakeSVG);\\n\\tfor(var option in options) {\\n\\t\\tDiagram[option] = options[option];\\n\\t}\\n\\tDiagram.prototype.format = function(paddingt, paddingr, paddingb, paddingl) {\\n\\t\\tpaddingt = unnull(paddingt, 20);\\n\\t\\tpaddingr = unnull(paddingr, paddingt, 20);\\n\\t\\tpaddingb = unnull(paddingb, paddingt, 20);\\n\\t\\tpaddingl = unnull(paddingl, paddingr, 20);\\n\\t\\tvar x = paddingl;\\n\\t\\tvar y = paddingt;\\n\\t\\ty += this.up;\\n\\t\\tvar g = FakeSVG('g', Diagram.STROKE_ODD_PIXEL_LENGTH ? {transform:'translate(.5 .5)'} : {});\\n\\t\\tfor(var i = 0; i < this.items.length; i++) {\\n\\t\\t\\tvar item = this.items[i];\\n\\t\\t\\tif(item.needsSpace) {\\n\\t\\t\\t\\tPath(x,y).h(10).addTo(g);\\n\\t\\t\\t\\tx += 10;\\n\\t\\t\\t}\\n\\t\\t\\titem.format(x, y, item.width).addTo(g);\\n\\t\\t\\tx += item.width;\\n\\t\\t\\tif(item.needsSpace) {\\n\\t\\t\\t\\tPath(x,y).h(10).addTo(g);\\n\\t\\t\\t\\tx += 10;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tthis.attrs.width = this.width + paddingl + paddingr;\\n\\t\\tthis.attrs.height = this.up + this.down + paddingt + paddingb;\\n\\t\\tthis.attrs.viewBox = \\\"0 0 \\\" + this.attrs.width + \\\" \\\" + this.attrs.height;\\n\\t\\tg.addTo(this);\\n\\t\\tthis.formatted = true;\\n\\t\\treturn this;\\n\\t}\\n\\tDiagram.prototype.addTo = function(parent) {\\n\\t\\tvar scriptTag = document.getElementsByTagName('script');\\n\\t\\tscriptTag = scriptTag[scriptTag.length - 1];\\n\\t\\tvar parentTag = scriptTag.parentNode;\\n\\t\\tparent = parent || parentTag;\\n\\t\\treturn this.$super.addTo.call(this, parent);\\n\\t}\\n\\tDiagram.prototype.toSVG = function() {\\n\\t\\tif (!this.formatted) {\\n\\t\\t\\tthis.format();\\n\\t\\t}\\n\\t\\treturn this.$super.toSVG.call(this);\\n\\t}\\n\\tDiagram.prototype.toString = function() {\\n\\t\\tif (!this.formatted) {\\n\\t\\t\\tthis.format();\\n\\t\\t}\\n\\t\\treturn this.$super.toString.call(this);\\n\\t}\\n\\n\\tfunction Sequence(items) {\\n\\t\\tif(!(this instanceof Sequence)) return new Sequence([].slice.call(arguments));\\n\\t\\tFakeSVG.call(this, 'g');\\n\\t\\tthis.items = items.map(wrapString);\\n\\t\\tthis.width = this.items.reduce(function(sofar, el) { return sofar + el.width + (el.needsSpace?20:0)}, 0);\\n\\t\\tthis.up = this.items.reduce(function(sofar,el) { return Math.max(sofar, el.up)}, 0);\\n\\t\\tthis.down = this.items.reduce(function(sofar,el) { return Math.max(sofar, el.down)}, 0);\\n\\t}\\n\\tsubclassOf(Sequence, FakeSVG);\\n\\tSequence.prototype.format = function(x,y,width) {\\n\\t\\t// Hook up the two sides if this is narrower than its stated width.\\n\\t\\tvar gaps = determineGaps(width, this.width);\\n\\t\\tPath(x,y).h(gaps[0]).addTo(this);\\n\\t\\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\\n\\t\\tx += gaps[0];\\n\\n\\t\\tfor(var i = 0; i < this.items.length; i++) {\\n\\t\\t\\tvar item = this.items[i];\\n\\t\\t\\tif(item.needsSpace) {\\n\\t\\t\\t\\tPath(x,y).h(10).addTo(this);\\n\\t\\t\\t\\tx += 10;\\n\\t\\t\\t}\\n\\t\\t\\titem.format(x, y, item.width).addTo(this);\\n\\t\\t\\tx += item.width;\\n\\t\\t\\tif(item.needsSpace) {\\n\\t\\t\\t\\tPath(x,y).h(10).addTo(this);\\n\\t\\t\\t\\tx += 10;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n\\tfunction Choice(normal, items) {\\n\\t\\tif(!(this instanceof Choice)) return new Choice(normal, [].slice.call(arguments,1));\\n\\t\\tFakeSVG.call(this, 'g');\\n\\t\\tif( typeof normal !== \\\"number\\\" || normal !== Math.floor(normal) ) {\\n\\t\\t\\tthrow new TypeError(\\\"The first argument of Choice() must be an integer.\\\");\\n\\t\\t} else if(normal < 0 || normal >= items.length) {\\n\\t\\t\\tthrow new RangeError(\\\"The first argument of Choice() must be an index for one of the items.\\\");\\n\\t\\t} else {\\n\\t\\t\\tthis.normal = normal;\\n\\t\\t}\\n\\t\\tthis.items = items.map(wrapString);\\n\\t\\tthis.width = this.items.reduce(function(sofar, el){return Math.max(sofar, el.width)},0) + Diagram.ARC_RADIUS*4;\\n\\t\\tthis.up = this.down = 0;\\n\\t\\tfor(var i = 0; i < this.items.length; i++) {\\n\\t\\t\\tvar item = this.items[i];\\n\\t\\t\\tif(i < normal) { this.up += Math.max(Diagram.ARC_RADIUS,item.up + item.down + Diagram.VERTICAL_SEPARATION); }\\n\\t\\t\\tif(i == normal) { this.up += Math.max(Diagram.ARC_RADIUS, item.up); this.down += Math.max(Diagram.ARC_RADIUS, item.down); }\\n\\t\\t\\tif(i > normal) { this.down += Math.max(Diagram.ARC_RADIUS,Diagram.VERTICAL_SEPARATION + item.up + item.down); }\\n\\t\\t}\\n\\t}\\n\\tsubclassOf(Choice, FakeSVG);\\n\\tChoice.prototype.format = function(x,y,width) {\\n\\t\\t// Hook up the two sides if this is narrower than its stated width.\\n\\t\\tvar gaps = determineGaps(width, this.width);\\n\\t\\tPath(x,y).h(gaps[0]).addTo(this);\\n\\t\\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\\n\\t\\tx += gaps[0];\\n\\n\\t\\tvar last = this.items.length -1;\\n\\t\\tvar innerWidth = this.width - Diagram.ARC_RADIUS*4;\\n\\n\\t\\t// Do the elements that curve above\\n\\t\\tfor(var i = this.normal - 1; i >= 0; i--) {\\n\\t\\t\\tvar item = this.items[i];\\n\\t\\t\\tif( i == this.normal - 1 ) {\\n\\t\\t\\t\\tvar distanceFromY = Math.max(Diagram.ARC_RADIUS*2, this.items[i+1].up + Diagram.VERTICAL_SEPARATION + item.down);\\n\\t\\t\\t}\\n\\t\\t\\tPath(x,y).arc('se').up(distanceFromY - Diagram.ARC_RADIUS*2).arc('wn').addTo(this);\\n\\t\\t\\titem.format(x+Diagram.ARC_RADIUS*2,y - distanceFromY,innerWidth).addTo(this);\\n\\t\\t\\tPath(x+Diagram.ARC_RADIUS*2+innerWidth, y-distanceFromY).arc('ne').down(distanceFromY - Diagram.ARC_RADIUS*2).arc('ws').addTo(this);\\n\\t\\t\\tdistanceFromY += Math.max(Diagram.ARC_RADIUS, item.up + Diagram.VERTICAL_SEPARATION + (i == 0 ? 0 : this.items[i-1].down));\\n\\t\\t}\\n\\n\\t\\t// Do the straight-line path.\\n\\t\\tPath(x,y).right(Diagram.ARC_RADIUS*2).addTo(this);\\n\\t\\tthis.items[this.normal].format(x+Diagram.ARC_RADIUS*2, y, innerWidth).addTo(this);\\n\\t\\tPath(x+Diagram.ARC_RADIUS*2+innerWidth, y).right(Diagram.ARC_RADIUS*2).addTo(this);\\n\\n\\t\\t// Do the elements that curve below\\n\\t\\tfor(var i = this.normal+1; i <= last; i++) {\\n\\t\\t\\tvar item = this.items[i];\\n\\t\\t\\tif( i == this.normal + 1 ) {\\n\\t\\t\\t\\tvar distanceFromY = Math.max(Diagram.ARC_RADIUS*2, this.items[i-1].down + Diagram.VERTICAL_SEPARATION + item.up);\\n\\t\\t\\t}\\n\\t\\t\\tPath(x,y).arc('ne').down(distanceFromY - Diagram.ARC_RADIUS*2).arc('ws').addTo(this);\\n\\t\\t\\titem.format(x+Diagram.ARC_RADIUS*2, y+distanceFromY, innerWidth).addTo(this);\\n\\t\\t\\tPath(x+Diagram.ARC_RADIUS*2+innerWidth, y+distanceFromY).arc('se').up(distanceFromY - Diagram.ARC_RADIUS*2).arc('wn').addTo(this);\\n\\t\\t\\tdistanceFromY += Math.max(Diagram.ARC_RADIUS, item.down + Diagram.VERTICAL_SEPARATION + (i == last ? 0 : this.items[i+1].up));\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tfunction Optional(item, skip) {\\n\\t\\tif( skip === undefined )\\n\\t\\t\\treturn Choice(1, Skip(), item);\\n\\t\\telse if ( skip === \\\"skip\\\" )\\n\\t\\t\\treturn Choice(0, Skip(), item);\\n\\t\\telse\\n\\t\\t\\tthrow \\\"Unknown value for Optional()'s 'skip' argument.\\\";\\n\\t}\\n\\n/* TiddlyWiki: added wantArrow */\\n\\tfunction OneOrMore(item, rep, wantArrow) {\\n\\t\\tif(!(this instanceof OneOrMore)) return new OneOrMore(item, rep, wantArrow);\\n\\t\\tFakeSVG.call(this, 'g');\\n\\n/* TiddlyWiki: code added */\\n\\t\\tthis.wantArrow = wantArrow;\\n\\n\\t\\trep = rep || (new Skip);\\n\\t\\tthis.item = wrapString(item);\\n\\t\\tthis.rep = wrapString(rep);\\n\\t\\tthis.width = Math.max(this.item.width, this.rep.width) + Diagram.ARC_RADIUS*2;\\n\\t\\tthis.up = this.item.up;\\n\\t\\tthis.down = Math.max(Diagram.ARC_RADIUS*2, this.item.down + Diagram.VERTICAL_SEPARATION + this.rep.up + this.rep.down);\\n\\n/* TiddlyWiki: moved calculation of distanceFromY (of the repeat arc) to here */\\n\\t\\tthis.distanceFromY = Math.max(Diagram.ARC_RADIUS*2, this.item.down+Diagram.VERTICAL_SEPARATION+this.rep.up);\\n\\t}\\n\\tsubclassOf(OneOrMore, FakeSVG);\\n\\tOneOrMore.prototype.needsSpace = true;\\n\\tOneOrMore.prototype.format = function(x,y,width) {\\n\\t\\t// Hook up the two sides if this is narrower than its stated width.\\n\\t\\tvar gaps = determineGaps(width, this.width);\\n\\t\\tPath(x,y).h(gaps[0]).addTo(this);\\n\\t\\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\\n\\t\\tx += gaps[0];\\n\\n\\t\\t// Draw item\\n\\t\\tPath(x,y).right(Diagram.ARC_RADIUS).addTo(this);\\n\\t\\tthis.item.format(x+Diagram.ARC_RADIUS,y,this.width-Diagram.ARC_RADIUS*2).addTo(this);\\n\\t\\tPath(x+this.width-Diagram.ARC_RADIUS,y).right(Diagram.ARC_RADIUS).addTo(this);\\n\\n\\t\\t// Draw repeat arc\\n/* TiddlyWiki: moved calculation of distanceFromY from here to constructor */\\n\\t\\tvar distanceFromY = this.distanceFromY;\\n\\t\\t\\n\\t\\tPath(x+Diagram.ARC_RADIUS,y).arc('nw').down(distanceFromY-Diagram.ARC_RADIUS*2).arc('ws').addTo(this);\\n\\t\\tthis.rep.format(x+Diagram.ARC_RADIUS, y+distanceFromY, this.width - Diagram.ARC_RADIUS*2).addTo(this);\\n\\t\\tPath(x+this.width-Diagram.ARC_RADIUS, y+distanceFromY).arc('se').up(distanceFromY-Diagram.ARC_RADIUS*2).arc('en').addTo(this);\\n\\t\\t\\n/* TiddlyWiki: code added */\\n\\t\\tif(this.wantArrow) {\\n\\t\\t\\tvar arrowSize = Diagram.ARC_RADIUS/2;\\n\\t\\t\\t// Compensate for the illusion that makes the arrow look unbalanced if it's too close to the curve below it\\n\\t\\t\\tvar multiplier = (distanceFromY < arrowSize*5) ? 1.2 : 1;\\n\\t\\t\\tPath(x-arrowSize, y+distanceFromY/2 + arrowSize/2, {class:\\\"arrow\\\"}).\\n\\t\\t\\t\\tline(arrowSize, -arrowSize).line(arrowSize*multiplier, arrowSize).addTo(this);\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t}\\n\\n\\tfunction ZeroOrMore(item, rep, skip, wantArrow) {\\n\\t\\treturn Optional(OneOrMore(item, rep, wantArrow), skip);\\n\\t}\\n\\n/* TiddlyWiki: added type parameter */\\n\\tfunction Start(type) {\\n\\t\\tif(!(this instanceof Start)) return new Start(type);\\n\\t\\tFakeSVG.call(this, 'path');\\n\\t\\tthis.type = type || 'single'\\n\\t\\tthis.width = (this.type === 'double') ? 20 : 10;\\n\\t\\tthis.up = 10;\\n\\t\\tthis.down = 10;\\n\\t}\\n\\tsubclassOf(Start, FakeSVG);\\n\\tStart.prototype.format = function(x,y) {\\n/* TiddlyWiki: added types */\\n\\t\\tif(this.type === 'single') {\\n\\t\\t\\tthis.attrs.d = 'M '+x+' '+(y-10)+' v 20 m 0 -10 h 10.5';\\n\\t\\t} else if(this.type === 'double') {\\n\\t\\t\\tthis.attrs.d = 'M '+x+' '+(y-10)+' v 20 m 10 -20 v 20 m -10 -10 h 20.5';\\n\\t\\t} else { // 'none'\\n\\t\\t\\tthis.attrs.d = 'M '+x+' '+y+' h 10.5';\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n/* TiddlyWiki: added type parameter */\\n\\tfunction End(type) {\\n\\t\\tif(!(this instanceof End)) return new End(type);\\n\\t\\tFakeSVG.call(this, 'path');\\n\\t\\tthis.type = type || 'double';\\n\\t\\tthis.width = (this.type === 'double') ? 20 : 10;\\n\\t\\tthis.up = 10;\\n\\t\\tthis.down = 10;\\n\\t}\\n\\tsubclassOf(End, FakeSVG);\\n\\tEnd.prototype.format = function(x,y) {\\n/* TiddlyWiki: added types */\\n\\t\\tif(this.type === 'single') {\\n\\t\\t\\tthis.attrs.d = 'M '+x+' '+y+' h 10 m 0 -10 v 20';\\n\\t\\t} else if(this.type === 'double') {\\n\\t\\t\\tthis.attrs.d = 'M '+x+' '+y+' h 20 m -10 -10 v 20 m 10 -20 v 20';\\n\\t\\t} else { // 'none'\\n\\t\\t\\tthis.attrs.d = 'M '+x+' '+y+' h 10';\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n\\n\\tfunction Terminal(text) {\\n\\t\\tif(!(this instanceof Terminal)) return new Terminal(text);\\n\\t\\tFakeSVG.call(this, 'g');\\n\\t\\tthis.text = text;\\n\\t\\tthis.width = text.length * 8 + 20; /* Assume that each char is .5em, and that the em is 16px */\\n\\t\\tthis.up = 11;\\n\\t\\tthis.down = 11;\\n\\t}\\n\\tsubclassOf(Terminal, FakeSVG);\\n\\tTerminal.prototype.needsSpace = true;\\n\\tTerminal.prototype.format = function(x, y, width) {\\n\\t\\t// Hook up the two sides if this is narrower than its stated width.\\n\\t\\tvar gaps = determineGaps(width, this.width);\\n\\t\\tPath(x,y).h(gaps[0]).addTo(this);\\n\\t\\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\\n\\t\\tx += gaps[0];\\n\\n\\t\\tFakeSVG('rect', {x:x, y:y-11, width:this.width, height:this.up+this.down, rx:10, ry:10}).addTo(this);\\n\\t\\tFakeSVG('text', {x:x+this.width/2, y:y+4}, this.text).addTo(this);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tfunction NonTerminal(text) {\\n\\t\\tif(!(this instanceof NonTerminal)) return new NonTerminal(text);\\n\\t\\tFakeSVG.call(this, 'g');\\n\\t\\tthis.text = text;\\n\\t\\tthis.width = text.length * 8 + 20;\\n\\t\\tthis.up = 11;\\n\\t\\tthis.down = 11;\\n\\t}\\n\\tsubclassOf(NonTerminal, FakeSVG);\\n\\tNonTerminal.prototype.needsSpace = true;\\n\\tNonTerminal.prototype.format = function(x, y, width) {\\n\\t\\t// Hook up the two sides if this is narrower than its stated width.\\n\\t\\tvar gaps = determineGaps(width, this.width);\\n\\t\\tPath(x,y).h(gaps[0]).addTo(this);\\n\\t\\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\\n\\t\\tx += gaps[0];\\n\\n\\t\\tFakeSVG('rect', {x:x, y:y-11, width:this.width, height:this.up+this.down}).addTo(this);\\n\\t\\tFakeSVG('text', {x:x+this.width/2, y:y+4}, this.text).addTo(this);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tfunction Comment(text) {\\n\\t\\tif(!(this instanceof Comment)) return new Comment(text);\\n\\t\\tFakeSVG.call(this, 'g');\\n\\t\\tthis.text = text;\\n\\t\\tthis.width = text.length * 7 + 10;\\n\\t\\tthis.up = 11;\\n\\t\\tthis.down = 11;\\n\\t}\\n\\tsubclassOf(Comment, FakeSVG);\\n\\tComment.prototype.needsSpace = true;\\n\\tComment.prototype.format = function(x, y, width) {\\n\\t\\t// Hook up the two sides if this is narrower than its stated width.\\n\\t\\tvar gaps = determineGaps(width, this.width);\\n\\t\\tPath(x,y).h(gaps[0]).addTo(this);\\n\\t\\tPath(x+gaps[0]+this.width,y).h(gaps[1]).addTo(this);\\n\\t\\tx += gaps[0];\\n\\n\\t\\tFakeSVG('text', {x:x+this.width/2, y:y+5, class:'comment'}, this.text).addTo(this);\\n\\t\\treturn this;\\n\\t}\\n\\n\\tfunction Skip() {\\n\\t\\tif(!(this instanceof Skip)) return new Skip();\\n\\t\\tFakeSVG.call(this, 'g');\\n\\t\\tthis.width = 0;\\n\\t\\tthis.up = 0;\\n\\t\\tthis.down = 0;\\n\\t}\\n\\tsubclassOf(Skip, FakeSVG);\\n\\tSkip.prototype.format = function(x, y, width) {\\n\\t\\tPath(x,y).right(width).addTo(this);\\n\\t\\treturn this;\\n\\t}\\n\\t\\n/* TiddlyWiki: added linking ability */\\n\\tfunction Link(item,options) {\\n\\t\\tif(!(this instanceof Link)) return new Link(item,options);\\n\\t\\tFakeSVG.call(this,'a',options);\\n\\t\\tthis.item = item;\\n\\t\\tthis.width = item.width;\\n\\t\\tthis.up = item.up;\\n\\t\\tthis.down = item.down;\\n\\t}\\n\\tsubclassOf(Link, FakeSVG);\\n\\tLink.prototype.needsSpace = true;\\n\\tLink.prototype.format = function(x, y, width) {\\n\\t\\tthis.item.format(x,y,width).addTo(this);\\n\\t\\treturn this;\\n\\t}\\n\\n/* TiddlyWiki: this block replaces the export mechanism in the original library */\\n\\tif (exports) {\\n\\t\\texports.Diagram = Diagram;\\n\\t\\texports.Sequence = Sequence;\\n\\t\\texports.Choice = Choice;\\n\\t\\texports.Optional = Optional;\\n\\t\\texports.OneOrMore = OneOrMore;\\n\\t\\texports.ZeroOrMore = ZeroOrMore;\\n\\t\\texports.Terminal = Terminal;\\n\\t\\texports.NonTerminal = NonTerminal;\\n\\t\\texports.Comment = Comment;\\n\\t\\texports.Skip = Skip;\\n\\t\\texports.Link = Link;\\n\\t};\\n})(\\n\\t{\\n\\tVERTICAL_SEPARATION: 8,\\n\\tARC_RADIUS: 10,\\n\\tDIAGRAM_CLASS: 'railroad-diagram',\\n\\tSTROKE_ODD_PIXEL_LENGTH: true,\\n\\tINTERNAL_ALIGNMENT: 'center',\\n\\t}\\n);\\n\\n/* TiddlyWiki: removed assignments to properties of the window object */\\n\\n})($tw.node ? $tw.fakeDocument : window.document)\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/railroad/railroad-diagrams.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/railroad/parser.js\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/parser.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/railroad/parser.js\\ntype: application/javascript\\nmodule-type: library\\n\\nParser for the source of a railroad diagram.\\n\\n[:x]\\t\\t\\toptional, normally included\\n[x]\\t\\t\\t\\toptional, normally omitted\\n{x}\\t\\t\\t\\tone or more\\n{x +\\\",\\\"}\\t\\tone or more, comma-separated\\n[{:x}]\\t\\t\\tzero or more, normally included\\n[{:x +\\\",\\\"}]\\t\\tzero or more, comma-separated, normally included\\n[{x}]\\t\\t\\tzero or more, normally omitted\\n[{x +\\\",\\\"}]\\t\\tzero or more, comma-separated, normally omitted\\nx y z\\t\\t\\tsequence\\n<-x y z->\\t\\texplicit sequence\\n(x|y|z)\\t\\t\\talternatives\\n(x|:y|z)\\t\\talternatives, normally y\\n\\\"x\\\"\\t\\t\\t\\tterminal\\n<\\\"x\\\">\\t\\t\\tnonterminal\\n/\\\"blah\\\"/\\t\\tcomment\\n-\\t\\t\\t\\tdummy\\n[[x|\\\"tiddler\\\"]]\\tlink\\n{{\\\"tiddler\\\"}}\\ttransclusion\\n\\n\\\"x\\\" can also be written 'x' or \\\"\\\"\\\"x\\\"\\\"\\\"\\n\\npragmas:\\n\\t\\\\arrow yes|no\\n\\t\\\\debug yes|no\\n\\t\\\\start single|double|none\\n\\t\\\\end single|double|none\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar components = require(\\\"$:/plugins/tiddlywiki/railroad/components.js\\\").components;\\n\\nvar Parser = function(widget,source,options) {\\n\\tthis.widget = widget;\\n\\tthis.source = source;\\n\\tthis.options = options;\\n\\tthis.tokens = this.tokenise(source);\\n\\tthis.tokenPos = 0;\\n\\tthis.advance();\\n\\tthis.content = this.parseContent();\\n\\tthis.root = new components.Root(this.content);\\n\\tthis.checkFinished();\\n};\\n\\n/////////////////////////// Parser dispatch\\n\\nParser.prototype.parseContent = function() {\\n\\tvar content = [];\\n\\t// Parse zero or more components\\n\\twhile(true) {\\n\\t\\tvar component = this.parseComponent();\\n\\t\\tif(!component) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\tif(!component.isPragma) {\\n\\t\\t\\tcontent.push(component);\\n\\t\\t}\\n\\t}\\n\\treturn content;\\n};\\n\\nParser.prototype.parseComponent = function() {\\n\\tvar component = null;\\n\\tif(this.token) {\\n\\t\\tif(this.at(\\\"string\\\")) {\\n\\t\\t\\tcomponent = this.parseTerminal();\\n\\t\\t} else if(this.at(\\\"name\\\")) {\\n\\t\\t\\tcomponent = this.parseName();\\n\\t\\t} else if(this.at(\\\"pragma\\\")) {\\n\\t\\t\\tcomponent = this.parsePragma();\\n\\t\\t} else {\\n\\t\\t\\tswitch(this.token.value) {\\n\\t\\t\\t\\tcase \\\"[\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseOptional();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\"{\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseRepeated();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\"<\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseNonterminal();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\"(\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseChoice();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\"/\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseComment();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\"[[\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseLink();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\"{{\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseTransclusion();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\"<-\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseSequence();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\"-\\\":\\n\\t\\t\\t\\t\\tcomponent = this.parseDummy();\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn component;\\n};\\n\\n/////////////////////////// Specific components\\n\\nParser.prototype.parseChoice = function() {\\n\\t// Consume the (\\n\\tthis.advance();\\n\\tvar content = [],\\n\\t\\tcolon = -1;\\n\\tdo {\\n\\t\\t// Allow at most one branch to be prefixed with a colon\\n\\t\\tif(colon === -1 && this.eat(\\\":\\\")) {\\n\\t\\t\\tcolon = content.length;\\n\\t\\t}\\n\\t\\t// Parse the next branch\\n\\t\\tcontent.push(this.parseContent());\\n\\t} while(this.eat(\\\"|\\\"));\\n\\t// Consume the closing bracket\\n\\tthis.close(\\\")\\\");\\n\\t// Create a component\\n\\treturn new components.Choice(content,colon === -1 ? 0 : colon);\\n};\\n\\nParser.prototype.parseComment = function() {\\n\\t// Consume the /\\n\\tthis.advance();\\n\\t// The comment's content should be in a string literal\\n\\tvar content = this.expectString(\\\"after /\\\");\\n\\t// Consume the closing /\\n\\tthis.close(\\\"/\\\");\\n\\t// Create a component\\n\\treturn new components.Comment(content);\\n};\\n\\nParser.prototype.parseDummy = function() {\\n\\t// Consume the -\\n\\tthis.advance();\\n\\t// Create a component\\n\\treturn new components.Dummy();\\n};\\n\\nParser.prototype.parseLink = function() {\\n\\t// Consume the [[\\n\\tthis.advance();\\n\\t// Parse the content\\n\\tvar content = this.parseContent();\\n\\t// Consume the |\\n\\tthis.expect(\\\"|\\\");\\n\\t// Consume the target\\n\\tvar target = this.expectNameOrString(\\\"as link target\\\");\\n\\t// Prepare some attributes for the SVG \\\"a\\\" element to carry\\n\\tvar options = {\\\"data-tw-target\\\": target};\\n\\tif($tw.utils.isLinkExternal(target)) {\\n\\t\\toptions[\\\"data-tw-external\\\"] = true;\\n\\t}\\n\\t// Consume the closing ]]\\n\\tthis.close(\\\"]]\\\");\\n\\t// Create a component\\n\\treturn new components.Link(content,options);\\n};\\n\\nParser.prototype.parseName = function() {\\n\\t// Create a component\\n\\tvar component = new components.Nonterminal(this.token.value);\\n\\t// Consume the name\\n\\tthis.advance();\\n\\treturn component;\\n};\\n\\nParser.prototype.parseNonterminal = function() {\\n\\t// Consume the <\\n\\tthis.advance();\\n\\t// The nonterminal's name should be in a string literal\\n\\tvar content = this.expectString(\\\"after <\\\");\\n\\t// Consume the closing bracket\\n\\tthis.close(\\\">\\\");\\n\\t// Create a component\\n\\treturn new components.Nonterminal(content);\\n};\\n\\nParser.prototype.parseOptional = function() {\\n\\tvar wantArrow = this.options.arrow;\\n\\t// Consume the [\\n\\tthis.advance();\\n\\t// Consume the { if there is one\\n\\tvar repeated = this.eat(\\\"{\\\");\\n\\t// Note whether omission is the normal route\\n\\tvar normal = this.eat(\\\":\\\");\\n\\t// Parse the content\\n\\tvar content = this.parseContent(),\\n\\t\\tseparator = null;\\n\\t// Parse the separator if there is one\\n\\tif(repeated && this.eat(\\\"+\\\")) {\\n\\t\\tseparator = this.parseContent();\\n\\t}\\n\\t// Consume the closing brackets\\n\\tif(repeated) {\\n\\t\\tthis.close(\\\"}\\\");\\n\\t}\\n\\tthis.close(\\\"]\\\");\\n\\t// Create a component\\n\\treturn repeated ? new components.OptionalRepeated(content,separator,normal,wantArrow)\\n\\t\\t: new components.Optional(content,normal);\\n};\\n\\nParser.prototype.parseRepeated = function() {\\n\\tvar wantArrow = this.options.arrow;\\n\\t// Consume the {\\n\\tthis.advance();\\n\\t// Parse the content\\n\\tvar content = this.parseContent(),\\n\\t\\tseparator = null;\\n\\t// Parse the separator if there is one\\n\\tif(this.eat(\\\"+\\\")) {\\n\\t\\tseparator = this.parseContent();\\n\\t}\\n\\t// Consume the closing bracket\\n\\tthis.close(\\\"}\\\");\\n\\t// Create a component\\n\\treturn new components.Repeated(content,separator,wantArrow);\\n};\\n\\nParser.prototype.parseSequence = function() {\\n\\t// Consume the <-\\n\\tthis.advance();\\n\\t// Parse the content\\n\\tvar content = this.parseContent();\\n\\t// Consume the closing ->\\n\\tthis.close(\\\"->\\\");\\n\\t// Create a component\\n\\treturn new components.Sequence(content);\\n};\\n\\nParser.prototype.parseTerminal = function() {\\n\\tvar component = new components.Terminal(this.token.value);\\n\\t// Consume the string literal\\n\\tthis.advance();\\n return component;\\n};\\n\\nParser.prototype.parseTransclusion = function() {\\n\\t// Consume the {{\\n\\tthis.advance();\\n\\t// Consume the text reference\\n\\tvar textRef = this.expectNameOrString(\\\"as transclusion source\\\");\\n\\t// Consume the closing }}\\n\\tthis.close(\\\"}}\\\");\\n\\t// Retrieve the content of the text reference\\n\\tvar source = this.widget.wiki.getTextReference(textRef,\\\"\\\",this.widget.getVariable(\\\"currentTiddler\\\"));\\n\\t// Parse the content\\n\\tvar content = new Parser(this.widget,source).content;\\n\\t// Create a component\\n\\treturn new components.Transclusion(content);\\n};\\n\\n/////////////////////////// Pragmas\\n\\nParser.prototype.parsePragma = function() {\\n\\t// Create a dummy component\\n\\tvar component = { isPragma: true };\\n\\t// Consume the pragma\\n\\tvar pragma = this.token.value;\\n\\tthis.advance();\\n\\t// Apply the setting\\n\\tif(pragma === \\\"arrow\\\") {\\n\\t\\tthis.options.arrow = this.parseYesNo(pragma);\\t\\t\\n\\t} else if(pragma === \\\"debug\\\") {\\n\\t\\tthis.options.debug = true;\\n\\t} else if(pragma === \\\"start\\\") {\\n\\t\\tthis.options.start = this.parseTerminusStyle(pragma);\\t\\t\\n\\t} else if(pragma === \\\"end\\\") {\\n\\t\\tthis.options.end = this.parseTerminusStyle(pragma);\\t\\t\\n\\t} else {\\n\\t\\tthrow \\\"Invalid pragma\\\";\\n\\t}\\n\\treturn component;\\n};\\n\\nParser.prototype.parseYesNo = function(pragma) {\\n\\treturn this.parseSetting([\\\"yes\\\",\\\"no\\\"],pragma) === \\\"yes\\\";\\n}\\n\\nParser.prototype.parseTerminusStyle = function(pragma) {\\n\\treturn this.parseSetting([\\\"single\\\",\\\"double\\\",\\\"none\\\"],pragma);\\n}\\n\\nParser.prototype.parseSetting = function(options,pragma) {\\n\\tif(this.at(\\\"name\\\") && options.indexOf(this.token.value) !== -1) {\\n\\t\\treturn this.tokenValueEaten();\\t\\t\\n\\t}\\n\\tthrow options.join(\\\" or \\\") + \\\" expected after \\\\\\\\\\\" + pragma;\\n}\\n\\n/////////////////////////// Token manipulation\\n\\nParser.prototype.advance = function() {\\n\\tif(this.tokenPos >= this.tokens.length) {\\n\\t\\tthis.token = null;\\n\\t}\\n\\tthis.token = this.tokens[this.tokenPos++];\\n};\\n\\nParser.prototype.at = function(token) {\\n\\treturn this.token && (this.token.type === token || this.token.type === \\\"token\\\" && this.token.value === token);\\n};\\n\\nParser.prototype.eat = function(token) {\\n\\tvar at = this.at(token);\\n\\tif(at) {\\n\\t\\tthis.advance();\\n\\t}\\n\\treturn at;\\n};\\n\\nParser.prototype.tokenValueEaten = function() {\\n\\tvar output = this.token.value;\\n\\tthis.advance();\\n\\treturn output;\\n};\\n\\nParser.prototype.close = function(token) {\\n\\tif(!this.eat(token)) {\\n\\t\\tthrow \\\"Closing \\\" + token + \\\" expected\\\";\\n\\t}\\n};\\n\\nParser.prototype.checkFinished = function() {\\n\\tif(this.token) {\\n\\t\\tthrow \\\"Syntax error at \\\" + this.token.value;\\n\\t}\\n};\\n\\nParser.prototype.expect = function(token) {\\n\\tif(!this.eat(token)) {\\n\\t\\tthrow token + \\\" expected\\\";\\n\\t}\\n};\\n\\nParser.prototype.expectString = function(context,token) {\\n\\tif(!this.at(\\\"string\\\")) {\\n\\t\\ttoken = token || \\\"String\\\";\\n\\t\\tthrow token + \\\" expected \\\" + context;\\n\\t}\\n\\treturn this.tokenValueEaten();\\n};\\n\\nParser.prototype.expectNameOrString = function(context) {\\n\\tif(this.at(\\\"name\\\")) {\\n\\t\\treturn this.tokenValueEaten();\\n\\t}\\n\\treturn this.expectString(context,\\\"Name or string\\\");\\n};\\n\\n/////////////////////////// Tokenisation\\n\\nParser.prototype.tokenise = function(source) {\\n\\tvar tokens = [],\\n\\t\\tpos = 0,\\n\\t\\tc, s, token;\\n\\twhile(pos < source.length) {\\n\\t\\t// Initialise this iteration\\n\\t\\ts = token = null;\\n\\t\\t// Skip whitespace\\n\\t\\tpos = $tw.utils.skipWhiteSpace(source,pos);\\n\\t\\t// Avoid falling off the end of the string\\n\\t\\tif (pos >= source.length) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Examine the next character\\n\\t\\tc = source.charAt(pos);\\n\\t\\tif(\\\"\\\\\\\"'\\\".indexOf(c) !== -1) {\\n\\t\\t\\t// String literal\\n\\t\\t\\ttoken = $tw.utils.parseStringLiteral(source,pos);\\n\\t\\t\\tif(!token) {\\n\\t\\t\\t\\tthrow \\\"Unterminated string literal\\\";\\n\\t\\t\\t}\\n\\t\\t} else if(\\\"[]{}\\\".indexOf(c) !== -1) {\\n\\t\\t\\t// Single or double character\\n\\t\\t\\ts = source.charAt(pos+1) === c ? c + c : c;\\n\\t\\t} else if(c === \\\"<\\\") {\\n\\t\\t\\t// < or <-\\n\\t\\t\\ts = source.charAt(pos+1) === \\\"-\\\" ? \\\"<-\\\" : \\\"<\\\";\\n\\t\\t} else if(c === \\\"-\\\") {\\n\\t\\t\\t// - or ->\\n\\t\\t\\ts = source.charAt(pos+1) === \\\">\\\" ? \\\"->\\\" : \\\"-\\\";\\n\\t\\t} else if(\\\"()>+/:|\\\".indexOf(c) !== -1) {\\n\\t\\t\\t// Single character\\n\\t\\t\\ts = c;\\n\\t\\t} else if(c.match(/[a-zA-Z]/)) {\\n\\t\\t\\t// Name\\n\\t\\t\\ttoken = this.readName(source,pos);\\n\\t\\t} else if(c.match(/\\\\\\\\/)) {\\n\\t\\t\\t// Pragma\\n\\t\\t\\ttoken = this.readPragma(source,pos);\\n\\t\\t} else {\\n\\t\\t\\tthrow \\\"Syntax error at \\\" + c;\\n\\t\\t}\\n\\t\\t// Add our findings to the return array\\n\\t\\tif(token) {\\n\\t\\t\\ttokens.push(token);\\n\\t\\t} else {\\n\\t\\t\\ttoken = $tw.utils.parseTokenString(source,pos,s);\\n\\t\\t\\ttokens.push(token);\\n\\t\\t}\\n\\t\\t// Prepare for the next character\\n\\t\\tpos = token.end;\\n\\t}\\n\\treturn tokens;\\n};\\n\\nParser.prototype.readName = function(source,pos) {\\n\\tvar re = /([a-zA-Z0-9_.-]+)/g;\\n\\tre.lastIndex = pos;\\n\\tvar match = re.exec(source);\\n\\tif(match && match.index === pos) {\\n\\t\\treturn {type: \\\"name\\\", value: match[1], start: pos, end: pos+match[1].length};\\n\\t} else {\\n\\t\\tthrow \\\"Invalid name\\\";\\n\\t}\\n};\\n\\nParser.prototype.readPragma = function(source,pos) {\\n\\tvar re = /([a-z]+)/g;\\n\\tpos++;\\n\\tre.lastIndex = pos;\\n\\tvar match = re.exec(source);\\n\\tif(match && match.index === pos) {\\n\\t\\treturn {type: \\\"pragma\\\", value: match[1], start: pos, end: pos+match[1].length};\\n\\t} else {\\n\\t\\tthrow \\\"Invalid pragma\\\";\\n\\t}\\n};\\n\\n/////////////////////////// Exports\\n\\nexports.parser = Parser;\\n\\n})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/railroad/typed-parser.js\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/typed-parser.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/railroad/typed-parser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThis parser wraps unadorned railroad syntax into a railroad widget\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar RailroadParser = function(type,text,options) {\\n\\tvar element = {\\n\\t\\t\\ttype: \\\"railroad\\\",\\n\\t\\t\\ttag: \\\"$railroad\\\",\\n\\t\\t\\ttext: text\\n\\t\\t};\\n\\tthis.tree = [element];\\nconsole.log(text);\\n};\\n\\nexports[\\\"text/vnd.tiddlywiki.railroad\\\"] = RailroadParser;\\n\\n})();\\n\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"parser\"\n },\n \"$:/plugins/tiddlywiki/railroad/wrapper.js\": {\n \"title\": \"$:/plugins/tiddlywiki/railroad/wrapper.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/railroad/wrapper.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWrapper for `railroad-diagrams.js` that provides a `<$railroad>` widget.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Parser = require(\\\"$:/plugins/tiddlywiki/railroad/parser.js\\\").parser,\\n\\tWidget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n\\nvar RailroadWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\nvar RAILROAD_OPTIONS = \\\"$:/config/railroad\\\";\\n\\n/*\\nInherit from the base widget class\\n*/\\nRailroadWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nRailroadWidget.prototype.render = function(parent,nextSibling) {\\n\\t// Housekeeping\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Get the source text\\n\\tvar source = this.getAttribute(\\\"text\\\",this.parseTreeNode.text || \\\"\\\");\\n\\t// Create a div to contain the SVG or error message\\n\\tvar div = this.document.createElement(\\\"div\\\");\\n\\ttry {\\n\\t\\t// Initialise options from the config tiddler or widget attributes\\n\\t\\tvar config = this.wiki.getTiddlerData(RAILROAD_OPTIONS,{});\\n\\t\\tvar options = {\\n\\t\\t\\tarrow: this.getAttribute(\\\"arrow\\\", config.arrow || \\\"yes\\\") === \\\"yes\\\",\\n\\t\\t\\tdebug: this.getAttribute(\\\"debug\\\", config.debug || \\\"no\\\") === \\\"yes\\\",\\n\\t\\t\\tstart: this.getAttribute(\\\"start\\\", config.start || \\\"single\\\"),\\n\\t\\t\\tend: this.getAttribute(\\\"end\\\", config.end || \\\"single\\\")\\n\\t\\t};\\n\\t\\t// Parse the source\\n\\t\\tvar parser = new Parser(this,source,options);\\n\\t\\t// Generate content into the div\\n\\t\\tif(parser.options.debug) {\\n\\t\\t\\tthis.renderDebug(parser,div);\\n\\t\\t} else {\\n\\t\\t\\tthis.renderSvg(parser,div);\\n\\t\\t}\\n\\t} catch(ex) {\\n\\t\\tdiv.className = \\\"tc-error\\\";\\n\\t\\tdiv.textContent = ex;\\n\\t}\\n\\t// Insert the div into the DOM\\n\\tparent.insertBefore(div,nextSibling);\\n\\tthis.domNodes.push(div);\\n};\\n\\nRailroadWidget.prototype.renderDebug = function(parser,div) {\\n\\tvar output = [\\\"<pre>\\\"];\\n\\tparser.root.debug(output, \\\"\\\");\\n\\toutput.push(\\\"</pre>\\\");\\n\\tdiv.innerHTML = output.join(\\\"\\\");\\n};\\n\\nRailroadWidget.prototype.renderSvg = function(parser,div) {\\n\\t// Generate a model of the diagram\\n\\tvar fakeSvg = parser.root.toSvg(parser.options);\\n\\t// Render the model into a tree of SVG DOM nodes\\n\\tvar svg = fakeSvg.toSVG();\\n\\t// Fill in the remaining attributes of any link nodes\\n\\tthis.patchLinks(svg);\\n\\t// Insert the SVG tree into the div\\n\\tdiv.appendChild(svg);\\n};\\n\\nRailroadWidget.prototype.patchLinks = function(node) {\\n\\tvar self = this;\\n\\tif(!$tw.node && node.hasChildNodes()) {\\n\\t\\tvar children = node.childNodes;\\n\\t\\tfor(var i=0; i<children.length; i++) {\\n\\t\\t\\tvar child = children[i];\\n\\t\\t\\tvar attributes = child.attributes;\\n\\t\\t\\tif(attributes) {\\n\\t\\t\\t\\t// Find each element that has a data-tw-target attribute\\n\\t\\t\\t\\tvar target = child.attributes[\\\"data-tw-target\\\"];\\n\\t\\t\\t\\tif(target !== undefined) {\\n\\t\\t\\t\\t\\ttarget = target.value;\\n\\t\\t\\t\\t\\tif(child.attributes[\\\"data-tw-external\\\"]) {\\n\\t\\t\\t\\t\\t\\t// External links are straightforward\\n\\t\\t\\t\\t\\t\\tchild.setAttribute(\\\"target\\\",\\\"_blank\\\");\\n\\t\\t\\t\\t\\t\\tchild.setAttribute(\\\"rel\\\",\\\"noopener noreferrer\\\");\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t// Each internal link gets its own onclick handler, capturing its own copy of target\\n\\t\\t\\t\\t\\t\\t(function(myTarget) {\\n\\t\\t\\t\\t\\t\\t\\tchild.onclick = function(event) {\\n\\t\\t\\t\\t\\t\\t\\t\\tself.dispatchLink(myTarget,event);\\n\\t\\t\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t})(target);\\n\\t\\t\\t\\t\\t\\ttarget = \\\"#\\\" + target;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tchild.setAttributeNS(\\\"http://www.w3.org/1999/xlink\\\",\\\"href\\\",target);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tthis.patchLinks(child);\\n\\t\\t}\\n\\t}\\n};\\n\\nRailroadWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.text || changedTiddlers[RAILROAD_OPTIONS]) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn false;\\t\\n};\\n\\nRailroadWidget.prototype.dispatchLink = function(to,event) {\\n\\t// Send the click on its way as a navigate event\\n\\tvar bounds = this.domNodes[0].getBoundingClientRect();\\n\\tthis.dispatchEvent({\\n\\t\\ttype: \\\"tm-navigate\\\",\\n\\t\\tnavigateTo: to,\\n\\t\\tnavigateFromTitle: this.getVariable(\\\"storyTiddler\\\"),\\n\\t\\tnavigateFromNode: this,\\n\\t\\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\\n\\t\\t},\\n\\t\\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)\\n\\t});\\n\\tevent.preventDefault();\\n\\tevent.stopPropagation();\\n\\treturn false;\\n};\\n\\nexports.railroad = RailroadWidget;\\n\\n})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n }\n }\n}"},"$:/plugins/tiddlywiki/savetrail":{"title":"$:/plugins/tiddlywiki/savetrail","name":"Save Trail","description":"Automatically download modified tiddlers","list":"readme settings","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/config/SaveTrailPlugin/enable-drafts\": {\n \"title\": \"$:/config/SaveTrailPlugin/enable-drafts\",\n \"text\": \"no\"\n },\n \"$:/config/SaveTrailPlugin/enable\": {\n \"title\": \"$:/config/SaveTrailPlugin/enable\",\n \"text\": \"yes\"\n },\n \"$:/config/SaveTrailPlugin/sync-drafts-filter\": {\n \"title\": \"$:/config/SaveTrailPlugin/sync-drafts-filter\",\n \"text\": \"[is[tiddler]has[draft.of]]\"\n },\n \"$:/plugins/tiddlywiki/savetrail/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/savetrail/readme\",\n \"text\": \"This plugin causes TiddlyWiki to continuously download (as a JSON file) the contents of any tiddler that is manually changed by any of several means:\\n\\n* Confirming an edit\\n* Deleting tiddlers\\n* Imports\\n* Renames/relinks\\n* Optionally, typing in draft tiddlers can trigger a download\\n\\nWhere appropriate, separate 'before' and 'after' files are downloaded. Configured correctly, the browser will download the files silently in the background, and they can be used as a backup in case of accidental data loss.\\n\\n''CAUTION'': Using this plugin will generate a //lot// of files in your downloads folder! Some points to watch:\\n\\n* This plugin is pretty much unusable unless your browser is set up to download files automatically, without prompting for the location\\n* Automatic file downloading doesn't work in all browsers - in particular, Safari and Internet Explorer do not currently support the [[necessary HTML5 feature|http://caniuse.com/download]]\\n* Be aware of the privacy implications of leaving a plaintext trail of all of your edits. You should only enable this plugin on computers that your trust and with content that is not sensitive\\n* The plugin uses the tiddler title plus a timestamp to generate a filename for the downloaded file, but some browsers ignore the specified title and generate their own title for each downloaded file\\n\\nOther points to note:\\n\\n* By default, after a draft tiddler has been modified the plugin waits until at least one second has elapsed since the last typing before it attempts to download the tiddler. This reduces the number of times that rapidly changing tiddlers are saved\\n* This plugin can be used with both the single file HTML configuration and under Node.js because it is independent of the usual saving and syncing processes\\n\"\n },\n \"$:/plugins/tiddlywiki/savetrail/savetrail.js\": {\n \"title\": \"$:/plugins/tiddlywiki/savetrail/savetrail.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/savetrail/savetrail.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nA startup module to download every changed tiddler as a JSON file\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"savetrail\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.after = [\\\"startup\\\"];\\nexports.synchronous = true;\\n\\n// Favicon tiddler\\nvar ENABLE_TIDDLER_TITLE = \\\"$:/config/SaveTrailPlugin/enable\\\",\\n\\tENABLE_DRAFTS_TIDDLER_TITLE = \\\"$:/config/SaveTrailPlugin/enable-drafts\\\",\\n\\tSYNC_DRAFTS_FILTER_TIDDLER_TITLE = \\\"$:/config/SaveTrailPlugin/sync-drafts-filter\\\";\\n\\nexports.startup = function() {\\n\\t$tw.savetrail = $tw.savetrail || {};\\n\\t// Create a syncer to handle autosaving\\n\\t$tw.savetrail.syncadaptor = new SaveTrailSyncAdaptor();\\n\\t$tw.savetrail.syncer = new $tw.Syncer({\\n\\t\\twiki: $tw.wiki,\\n\\t\\tsyncadaptor: $tw.savetrail.syncadaptor,\\n\\t\\ttitleSyncFilter: SYNC_DRAFTS_FILTER_TIDDLER_TITLE,\\n\\t\\tlogging: false,\\n\\t\\tdisableUI: true\\n\\t});\\n\\t// Add hooks for trapping user actions\\n\\t$tw.hooks.addHook(\\\"th-saving-tiddler\\\",function(tiddler) {\\n\\t\\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\\\"yes\\\")) {\\n\\t\\t\\tvar oldTiddler = $tw.wiki.getTiddler(tiddler.fields.title);\\n\\t\\t\\tif(oldTiddler) {\\n\\t\\t\\t\\tsaveTiddlerFile(oldTiddler,{reason: \\\"overwritten\\\"});\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t\\tsaveTiddlerFile(tiddler,{reason: \\\"saved\\\"});\\n\\t\\t}\\n\\t\\treturn tiddler;\\n\\t});\\n\\t$tw.hooks.addHook(\\\"th-renaming-tiddler\\\",function(newTiddler,oldTiddler) {\\n\\t\\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\\\"yes\\\")) {\\n\\t\\t\\tif(oldTiddler) {\\n\\t\\t\\t\\tsaveTiddlerFile(oldTiddler,{reason: \\\"deleted\\\"});\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t\\tsaveTiddlerFile(newTiddler,{reason: \\\"renamed\\\"});\\n\\t\\t}\\n\\t\\treturn newTiddler;\\n\\t});\\n\\t$tw.hooks.addHook(\\\"th-relinking-tiddler\\\",function(newTiddler,oldTiddler) {\\n\\t\\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\\\"yes\\\")) {\\n\\t\\t\\tif(oldTiddler) {\\n\\t\\t\\t\\tsaveTiddlerFile(oldTiddler,{reason: \\\"overwritten\\\"});\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t\\tsaveTiddlerFile(newTiddler,{reason: \\\"relinked\\\"});\\n\\t\\t}\\n\\t\\treturn newTiddler;\\n\\t});\\n\\t$tw.hooks.addHook(\\\"th-importing-tiddler\\\",function(tiddler) {\\n\\t\\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\\\"yes\\\")) {\\n\\t\\t\\tvar oldTiddler = $tw.wiki.getTiddler(tiddler.fields.title);\\n\\t\\t\\tif(oldTiddler) {\\n\\t\\t\\t\\tsaveTiddlerFile(oldTiddler,{reason: \\\"overwritten\\\"});\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t\\tsaveTiddlerFile(tiddler,{reason: \\\"imported\\\"});\\n\\t\\t}\\n\\t\\treturn tiddler;\\n\\t});\\n\\t$tw.hooks.addHook(\\\"th-deleting-tiddler\\\",function(tiddler) {\\n\\t\\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\\\"yes\\\")) {\\n\\t\\t\\tsaveTiddlerFile(tiddler,{reason: \\\"deleted\\\"});\\n\\t\\t}\\n\\t\\treturn tiddler;\\n\\t});\\n};\\n\\nfunction SaveTrailSyncAdaptor(options) {\\n\\tthis.logger = new $tw.utils.Logger(\\\"SaveTrail\\\");\\n}\\n\\nSaveTrailSyncAdaptor.prototype.name = \\\"savetrail\\\";\\n\\nSaveTrailSyncAdaptor.prototype.isReady = function() {\\n\\t// The savetrail adaptor is always ready\\n\\treturn true;\\n};\\n\\nSaveTrailSyncAdaptor.prototype.getTiddlerInfo = function(tiddler) {\\n\\treturn {};\\n};\\n\\n/*\\nSave a tiddler and invoke the callback with (err,adaptorInfo,revision)\\n*/\\nSaveTrailSyncAdaptor.prototype.saveTiddler = function(tiddler,callback) {\\n\\tif($tw.wiki.checkTiddlerText(ENABLE_TIDDLER_TITLE,\\\"yes\\\")) {\\n\\t\\tvar isDraft = $tw.utils.hop(tiddler.fields,\\\"draft.of\\\");\\n\\t\\tif(!isDraft || $tw.wiki.checkTiddlerText(ENABLE_DRAFTS_TIDDLER_TITLE,\\\"yes\\\")) {\\n\\t\\t\\tsaveTiddlerFile(tiddler,{reason: \\\"modified\\\"});\\n\\t\\t}\\n\\t}\\n\\tcallback(null);\\n};\\n\\n/*\\nLoad a tiddler and invoke the callback with (err,tiddlerFields)\\n*/\\nSaveTrailSyncAdaptor.prototype.loadTiddler = function(title,callback) {\\n\\tcallback(null,null);\\n};\\n\\n/*\\nDelete a tiddler and invoke the callback with (err)\\n*/\\nSaveTrailSyncAdaptor.prototype.deleteTiddler = function(title,callback,options) {\\n\\tcallback(null);\\n};\\n\\nfunction saveTiddlerFile(tiddler,options) {\\n\\toptions = options || {};\\n\\tvar reason = options.reason || \\\"changed\\\",\\n\\t\\tillegalFilenameCharacters = /<|>|\\\\:|\\\\\\\"|\\\\/|\\\\\\\\|\\\\||\\\\?|\\\\*|\\\\^|\\\\s/g,\\n\\t\\tfixedTitle = $tw.utils.transliterate(tiddler.fields.title).replace(illegalFilenameCharacters,\\\"_\\\"),\\n\\t\\tformattedDate = $tw.utils.stringifyDate(new Date()),\\n\\t\\tfilename = fixedTitle + \\\".\\\" + formattedDate + \\\".\\\" + reason + \\\".json\\\",\\n\\t\\tfields = new Object();\\n\\tfor(var field in tiddler.fields) {\\n\\t\\tfields[field] = tiddler.getFieldString(field);\\n\\t}\\n\\tvar text = JSON.stringify([fields],null,$tw.config.preferences.jsonSpaces),\\n\\t\\tlink = document.createElement(\\\"a\\\");\\n\\tlink.setAttribute(\\\"target\\\",\\\"_blank\\\");\\n\\tlink.setAttribute(\\\"rel\\\",\\\"noopener noreferrer\\\");\\n\\tif(Blob !== undefined) {\\n\\t\\tvar blob = new Blob([text], {type: \\\"text/plain\\\"});\\n\\t\\tlink.setAttribute(\\\"href\\\", URL.createObjectURL(blob));\\n\\t} else {\\n\\t\\tlink.setAttribute(\\\"href\\\",\\\"data:text/plain,\\\" + encodeURIComponent(text));\\n\\t}\\n\\tlink.setAttribute(\\\"download\\\",filename);\\n\\tdocument.body.appendChild(link);\\n\\tlink.click();\\n\\tdocument.body.removeChild(link);\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/savetrail/settings\": {\n \"title\": \"$:/plugins/tiddlywiki/savetrail/settings\",\n \"text\": \"\\n<$checkbox tiddler=\\\"$:/config/SaveTrailPlugin/enable\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\"> Enable automatic saving of modified tiddlers</$checkbox>\\n\\n<$checkbox tiddler=\\\"$:/config/SaveTrailPlugin/enable-drafts\\\" field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\"> Include automatic saving of draft tiddlers (warning: generates a lot of download files)</$checkbox>\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/sax":{"title":"$:/plugins/tiddlywiki/sax","name":"sax js","description":"sax.js library","author":"Isaac Z. Schlueter","list":"readme license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/sax/sax.js\": {\n \"text\": \";(function (sax) { // wrapper for non-node envs\\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\\n sax.SAXParser = SAXParser\\n sax.SAXStream = SAXStream\\n sax.createStream = createStream\\n\\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\\n // since that's the earliest that a buffer overrun could occur. This way, checks are\\n // as rare as required, but as often as necessary to ensure never crossing this bound.\\n // Furthermore, buffers are only tested at most once per write(), so passing a very\\n // large string into write() might have undesirable effects, but this is manageable by\\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\\n // edge case, result in creating at most one complete copy of the string passed in.\\n // Set to Infinity to have unlimited buffers.\\n sax.MAX_BUFFER_LENGTH = 64 * 1024\\n\\n var buffers = [\\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\\n 'procInstName', 'procInstBody', 'entity', 'attribName',\\n 'attribValue', 'cdata', 'script'\\n ]\\n\\n sax.EVENTS = [\\n 'text',\\n 'processinginstruction',\\n 'sgmldeclaration',\\n 'doctype',\\n 'comment',\\n 'opentagstart',\\n 'attribute',\\n 'opentag',\\n 'closetag',\\n 'opencdata',\\n 'cdata',\\n 'closecdata',\\n 'error',\\n 'end',\\n 'ready',\\n 'script',\\n 'opennamespace',\\n 'closenamespace'\\n ]\\n\\n function SAXParser (strict, opt) {\\n if (!(this instanceof SAXParser)) {\\n return new SAXParser(strict, opt)\\n }\\n\\n var parser = this\\n clearBuffers(parser)\\n parser.q = parser.c = ''\\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\\n parser.opt = opt || {}\\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\\n parser.tags = []\\n parser.closed = parser.closedRoot = parser.sawRoot = false\\n parser.tag = parser.error = null\\n parser.strict = !!strict\\n parser.noscript = !!(strict || parser.opt.noscript)\\n parser.state = S.BEGIN\\n parser.strictEntities = parser.opt.strictEntities\\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\\n parser.attribList = []\\n\\n // namespaces form a prototype chain.\\n // it always points at the current tag,\\n // which protos to its parent tag.\\n if (parser.opt.xmlns) {\\n parser.ns = Object.create(rootNS)\\n }\\n\\n // mostly just for error reporting\\n parser.trackPosition = parser.opt.position !== false\\n if (parser.trackPosition) {\\n parser.position = parser.line = parser.column = 0\\n }\\n emit(parser, 'onready')\\n }\\n\\n if (!Object.create) {\\n Object.create = function (o) {\\n function F () {}\\n F.prototype = o\\n var newf = new F()\\n return newf\\n }\\n }\\n\\n if (!Object.keys) {\\n Object.keys = function (o) {\\n var a = []\\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\\n return a\\n }\\n }\\n\\n function checkBufferLength (parser) {\\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\\n var maxActual = 0\\n for (var i = 0, l = buffers.length; i < l; i++) {\\n var len = parser[buffers[i]].length\\n if (len > maxAllowed) {\\n // Text/cdata nodes can get big, and since they're buffered,\\n // we can get here under normal conditions.\\n // Avoid issues by emitting the text node now,\\n // so at least it won't get any bigger.\\n switch (buffers[i]) {\\n case 'textNode':\\n closeText(parser)\\n break\\n\\n case 'cdata':\\n emitNode(parser, 'oncdata', parser.cdata)\\n parser.cdata = ''\\n break\\n\\n case 'script':\\n emitNode(parser, 'onscript', parser.script)\\n parser.script = ''\\n break\\n\\n default:\\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\\n }\\n }\\n maxActual = Math.max(maxActual, len)\\n }\\n // schedule the next check for the earliest possible buffer overrun.\\n var m = sax.MAX_BUFFER_LENGTH - maxActual\\n parser.bufferCheckPosition = m + parser.position\\n }\\n\\n function clearBuffers (parser) {\\n for (var i = 0, l = buffers.length; i < l; i++) {\\n parser[buffers[i]] = ''\\n }\\n }\\n\\n function flushBuffers (parser) {\\n closeText(parser)\\n if (parser.cdata !== '') {\\n emitNode(parser, 'oncdata', parser.cdata)\\n parser.cdata = ''\\n }\\n if (parser.script !== '') {\\n emitNode(parser, 'onscript', parser.script)\\n parser.script = ''\\n }\\n }\\n\\n SAXParser.prototype = {\\n end: function () { end(this) },\\n write: write,\\n resume: function () { this.error = null; return this },\\n close: function () { return this.write(null) },\\n flush: function () { flushBuffers(this) }\\n }\\n\\n var Stream\\n try {\\n Stream = require('stream').Stream\\n } catch (ex) {\\n Stream = function () {}\\n }\\n\\n var streamWraps = sax.EVENTS.filter(function (ev) {\\n return ev !== 'error' && ev !== 'end'\\n })\\n\\n function createStream (strict, opt) {\\n return new SAXStream(strict, opt)\\n }\\n\\n function SAXStream (strict, opt) {\\n if (!(this instanceof SAXStream)) {\\n return new SAXStream(strict, opt)\\n }\\n\\n Stream.apply(this)\\n\\n this._parser = new SAXParser(strict, opt)\\n this.writable = true\\n this.readable = true\\n\\n var me = this\\n\\n this._parser.onend = function () {\\n me.emit('end')\\n }\\n\\n this._parser.onerror = function (er) {\\n me.emit('error', er)\\n\\n // if didn't throw, then means error was handled.\\n // go ahead and clear error, so we can write again.\\n me._parser.error = null\\n }\\n\\n this._decoder = null\\n\\n streamWraps.forEach(function (ev) {\\n Object.defineProperty(me, 'on' + ev, {\\n get: function () {\\n return me._parser['on' + ev]\\n },\\n set: function (h) {\\n if (!h) {\\n me.removeAllListeners(ev)\\n me._parser['on' + ev] = h\\n return h\\n }\\n me.on(ev, h)\\n },\\n enumerable: true,\\n configurable: false\\n })\\n })\\n }\\n\\n SAXStream.prototype = Object.create(Stream.prototype, {\\n constructor: {\\n value: SAXStream\\n }\\n })\\n\\n SAXStream.prototype.write = function (data) {\\n if (typeof Buffer === 'function' &&\\n typeof Buffer.isBuffer === 'function' &&\\n Buffer.isBuffer(data)) {\\n if (!this._decoder) {\\n var SD = require('string_decoder').StringDecoder\\n this._decoder = new SD('utf8')\\n }\\n data = this._decoder.write(data)\\n }\\n\\n this._parser.write(data.toString())\\n this.emit('data', data)\\n return true\\n }\\n\\n SAXStream.prototype.end = function (chunk) {\\n if (chunk && chunk.length) {\\n this.write(chunk)\\n }\\n this._parser.end()\\n return true\\n }\\n\\n SAXStream.prototype.on = function (ev, handler) {\\n var me = this\\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\\n me._parser['on' + ev] = function () {\\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\\n args.splice(0, 0, ev)\\n me.emit.apply(me, args)\\n }\\n }\\n\\n return Stream.prototype.on.call(me, ev, handler)\\n }\\n\\n // this really needs to be replaced with character classes.\\n // XML allows all manner of ridiculous numbers and digits.\\n var CDATA = '[CDATA['\\n var DOCTYPE = 'DOCTYPE'\\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\\n\\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\\n // This implementation works on strings, a single character at a time\\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\\n // without a significant breaking change to either this parser, or the\\n // JavaScript language. Implementation of an emoji-capable xml parser\\n // is left as an exercise for the reader.\\n var nameStart = /[:_A-Za-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD]/\\n\\n var nameBody = /[:_A-Za-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040.\\\\d-]/\\n\\n var entityStart = /[#:_A-Za-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD]/\\n var entityBody = /[#:_A-Za-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040.\\\\d-]/\\n\\n function isWhitespace (c) {\\n return c === ' ' || c === '\\\\n' || c === '\\\\r' || c === '\\\\t'\\n }\\n\\n function isQuote (c) {\\n return c === '\\\"' || c === '\\\\''\\n }\\n\\n function isAttribEnd (c) {\\n return c === '>' || isWhitespace(c)\\n }\\n\\n function isMatch (regex, c) {\\n return regex.test(c)\\n }\\n\\n function notMatch (regex, c) {\\n return !isMatch(regex, c)\\n }\\n\\n var S = 0\\n sax.STATE = {\\n BEGIN: S++, // leading byte order mark or whitespace\\n BEGIN_WHITESPACE: S++, // leading whitespace\\n TEXT: S++, // general stuff\\n TEXT_ENTITY: S++, // & and such.\\n OPEN_WAKA: S++, // <\\n SGML_DECL: S++, // <!BLARG\\n SGML_DECL_QUOTED: S++, // <!BLARG foo \\\"bar\\n DOCTYPE: S++, // <!DOCTYPE\\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \\\"//blah\\n DOCTYPE_DTD: S++, // <!DOCTYPE \\\"//blah\\\" [ ...\\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \\\"//blah\\\" [ \\\"foo\\n COMMENT_STARTING: S++, // <!-\\n COMMENT: S++, // <!--\\n COMMENT_ENDING: S++, // <!-- blah -\\n COMMENT_ENDED: S++, // <!-- blah --\\n CDATA: S++, // <![CDATA[ something\\n CDATA_ENDING: S++, // ]\\n CDATA_ENDING_2: S++, // ]]\\n PROC_INST: S++, // <?hi\\n PROC_INST_BODY: S++, // <?hi there\\n PROC_INST_ENDING: S++, // <?hi \\\"there\\\" ?\\n OPEN_TAG: S++, // <strong\\n OPEN_TAG_SLASH: S++, // <strong /\\n ATTRIB: S++, // <a\\n ATTRIB_NAME: S++, // <a foo\\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\\n ATTRIB_VALUE: S++, // <a foo=\\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\\\"bar\\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\\\"bar\\\"\\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\\\""\\\"\\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar="\\n CLOSE_TAG: S++, // </a\\n CLOSE_TAG_SAW_WHITE: S++, // </a >\\n SCRIPT: S++, // <script> ...\\n SCRIPT_ENDING: S++ // <script> ... <\\n }\\n\\n sax.XML_ENTITIES = {\\n 'amp': '&',\\n 'gt': '>',\\n 'lt': '<',\\n 'quot': '\\\"',\\n 'apos': \\\"'\\\"\\n }\\n\\n sax.ENTITIES = {\\n 'amp': '&',\\n 'gt': '>',\\n 'lt': '<',\\n 'quot': '\\\"',\\n 'apos': \\\"'\\\",\\n 'AElig': 198,\\n 'Aacute': 193,\\n 'Acirc': 194,\\n 'Agrave': 192,\\n 'Aring': 197,\\n 'Atilde': 195,\\n 'Auml': 196,\\n 'Ccedil': 199,\\n 'ETH': 208,\\n 'Eacute': 201,\\n 'Ecirc': 202,\\n 'Egrave': 200,\\n 'Euml': 203,\\n 'Iacute': 205,\\n 'Icirc': 206,\\n 'Igrave': 204,\\n 'Iuml': 207,\\n 'Ntilde': 209,\\n 'Oacute': 211,\\n 'Ocirc': 212,\\n 'Ograve': 210,\\n 'Oslash': 216,\\n 'Otilde': 213,\\n 'Ouml': 214,\\n 'THORN': 222,\\n 'Uacute': 218,\\n 'Ucirc': 219,\\n 'Ugrave': 217,\\n 'Uuml': 220,\\n 'Yacute': 221,\\n 'aacute': 225,\\n 'acirc': 226,\\n 'aelig': 230,\\n 'agrave': 224,\\n 'aring': 229,\\n 'atilde': 227,\\n 'auml': 228,\\n 'ccedil': 231,\\n 'eacute': 233,\\n 'ecirc': 234,\\n 'egrave': 232,\\n 'eth': 240,\\n 'euml': 235,\\n 'iacute': 237,\\n 'icirc': 238,\\n 'igrave': 236,\\n 'iuml': 239,\\n 'ntilde': 241,\\n 'oacute': 243,\\n 'ocirc': 244,\\n 'ograve': 242,\\n 'oslash': 248,\\n 'otilde': 245,\\n 'ouml': 246,\\n 'szlig': 223,\\n 'thorn': 254,\\n 'uacute': 250,\\n 'ucirc': 251,\\n 'ugrave': 249,\\n 'uuml': 252,\\n 'yacute': 253,\\n 'yuml': 255,\\n 'copy': 169,\\n 'reg': 174,\\n 'nbsp': 160,\\n 'iexcl': 161,\\n 'cent': 162,\\n 'pound': 163,\\n 'curren': 164,\\n 'yen': 165,\\n 'brvbar': 166,\\n 'sect': 167,\\n 'uml': 168,\\n 'ordf': 170,\\n 'laquo': 171,\\n 'not': 172,\\n 'shy': 173,\\n 'macr': 175,\\n 'deg': 176,\\n 'plusmn': 177,\\n 'sup1': 185,\\n 'sup2': 178,\\n 'sup3': 179,\\n 'acute': 180,\\n 'micro': 181,\\n 'para': 182,\\n 'middot': 183,\\n 'cedil': 184,\\n 'ordm': 186,\\n 'raquo': 187,\\n 'frac14': 188,\\n 'frac12': 189,\\n 'frac34': 190,\\n 'iquest': 191,\\n 'times': 215,\\n 'divide': 247,\\n 'OElig': 338,\\n 'oelig': 339,\\n 'Scaron': 352,\\n 'scaron': 353,\\n 'Yuml': 376,\\n 'fnof': 402,\\n 'circ': 710,\\n 'tilde': 732,\\n 'Alpha': 913,\\n 'Beta': 914,\\n 'Gamma': 915,\\n 'Delta': 916,\\n 'Epsilon': 917,\\n 'Zeta': 918,\\n 'Eta': 919,\\n 'Theta': 920,\\n 'Iota': 921,\\n 'Kappa': 922,\\n 'Lambda': 923,\\n 'Mu': 924,\\n 'Nu': 925,\\n 'Xi': 926,\\n 'Omicron': 927,\\n 'Pi': 928,\\n 'Rho': 929,\\n 'Sigma': 931,\\n 'Tau': 932,\\n 'Upsilon': 933,\\n 'Phi': 934,\\n 'Chi': 935,\\n 'Psi': 936,\\n 'Omega': 937,\\n 'alpha': 945,\\n 'beta': 946,\\n 'gamma': 947,\\n 'delta': 948,\\n 'epsilon': 949,\\n 'zeta': 950,\\n 'eta': 951,\\n 'theta': 952,\\n 'iota': 953,\\n 'kappa': 954,\\n 'lambda': 955,\\n 'mu': 956,\\n 'nu': 957,\\n 'xi': 958,\\n 'omicron': 959,\\n 'pi': 960,\\n 'rho': 961,\\n 'sigmaf': 962,\\n 'sigma': 963,\\n 'tau': 964,\\n 'upsilon': 965,\\n 'phi': 966,\\n 'chi': 967,\\n 'psi': 968,\\n 'omega': 969,\\n 'thetasym': 977,\\n 'upsih': 978,\\n 'piv': 982,\\n 'ensp': 8194,\\n 'emsp': 8195,\\n 'thinsp': 8201,\\n 'zwnj': 8204,\\n 'zwj': 8205,\\n 'lrm': 8206,\\n 'rlm': 8207,\\n 'ndash': 8211,\\n 'mdash': 8212,\\n 'lsquo': 8216,\\n 'rsquo': 8217,\\n 'sbquo': 8218,\\n 'ldquo': 8220,\\n 'rdquo': 8221,\\n 'bdquo': 8222,\\n 'dagger': 8224,\\n 'Dagger': 8225,\\n 'bull': 8226,\\n 'hellip': 8230,\\n 'permil': 8240,\\n 'prime': 8242,\\n 'Prime': 8243,\\n 'lsaquo': 8249,\\n 'rsaquo': 8250,\\n 'oline': 8254,\\n 'frasl': 8260,\\n 'euro': 8364,\\n 'image': 8465,\\n 'weierp': 8472,\\n 'real': 8476,\\n 'trade': 8482,\\n 'alefsym': 8501,\\n 'larr': 8592,\\n 'uarr': 8593,\\n 'rarr': 8594,\\n 'darr': 8595,\\n 'harr': 8596,\\n 'crarr': 8629,\\n 'lArr': 8656,\\n 'uArr': 8657,\\n 'rArr': 8658,\\n 'dArr': 8659,\\n 'hArr': 8660,\\n 'forall': 8704,\\n 'part': 8706,\\n 'exist': 8707,\\n 'empty': 8709,\\n 'nabla': 8711,\\n 'isin': 8712,\\n 'notin': 8713,\\n 'ni': 8715,\\n 'prod': 8719,\\n 'sum': 8721,\\n 'minus': 8722,\\n 'lowast': 8727,\\n 'radic': 8730,\\n 'prop': 8733,\\n 'infin': 8734,\\n 'ang': 8736,\\n 'and': 8743,\\n 'or': 8744,\\n 'cap': 8745,\\n 'cup': 8746,\\n 'int': 8747,\\n 'there4': 8756,\\n 'sim': 8764,\\n 'cong': 8773,\\n 'asymp': 8776,\\n 'ne': 8800,\\n 'equiv': 8801,\\n 'le': 8804,\\n 'ge': 8805,\\n 'sub': 8834,\\n 'sup': 8835,\\n 'nsub': 8836,\\n 'sube': 8838,\\n 'supe': 8839,\\n 'oplus': 8853,\\n 'otimes': 8855,\\n 'perp': 8869,\\n 'sdot': 8901,\\n 'lceil': 8968,\\n 'rceil': 8969,\\n 'lfloor': 8970,\\n 'rfloor': 8971,\\n 'lang': 9001,\\n 'rang': 9002,\\n 'loz': 9674,\\n 'spades': 9824,\\n 'clubs': 9827,\\n 'hearts': 9829,\\n 'diams': 9830\\n }\\n\\n Object.keys(sax.ENTITIES).forEach(function (key) {\\n var e = sax.ENTITIES[key]\\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\\n sax.ENTITIES[key] = s\\n })\\n\\n for (var s in sax.STATE) {\\n sax.STATE[sax.STATE[s]] = s\\n }\\n\\n // shorthand\\n S = sax.STATE\\n\\n function emit (parser, event, data) {\\n parser[event] && parser[event](data)\\n }\\n\\n function emitNode (parser, nodeType, data) {\\n if (parser.textNode) closeText(parser)\\n emit(parser, nodeType, data)\\n }\\n\\n function closeText (parser) {\\n parser.textNode = textopts(parser.opt, parser.textNode)\\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\\n parser.textNode = ''\\n }\\n\\n function textopts (opt, text) {\\n if (opt.trim) text = text.trim()\\n if (opt.normalize) text = text.replace(/\\\\s+/g, ' ')\\n return text\\n }\\n\\n function error (parser, er) {\\n closeText(parser)\\n if (parser.trackPosition) {\\n er += '\\\\nLine: ' + parser.line +\\n '\\\\nColumn: ' + parser.column +\\n '\\\\nChar: ' + parser.c\\n }\\n er = new Error(er)\\n parser.error = er\\n emit(parser, 'onerror', er)\\n return parser\\n }\\n\\n function end (parser) {\\n if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')\\n if ((parser.state !== S.BEGIN) &&\\n (parser.state !== S.BEGIN_WHITESPACE) &&\\n (parser.state !== S.TEXT)) {\\n error(parser, 'Unexpected end')\\n }\\n closeText(parser)\\n parser.c = ''\\n parser.closed = true\\n emit(parser, 'onend')\\n SAXParser.call(parser, parser.strict, parser.opt)\\n return parser\\n }\\n\\n function strictFail (parser, message) {\\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\\n throw new Error('bad call to strictFail')\\n }\\n if (parser.strict) {\\n error(parser, message)\\n }\\n }\\n\\n function newTag (parser) {\\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\\n var parent = parser.tags[parser.tags.length - 1] || parser\\n var tag = parser.tag = { name: parser.tagName, attributes: {} }\\n\\n // will be overridden if tag contails an xmlns=\\\"foo\\\" or xmlns:foo=\\\"bar\\\"\\n if (parser.opt.xmlns) {\\n tag.ns = parent.ns\\n }\\n parser.attribList.length = 0\\n emitNode(parser, 'onopentagstart', tag)\\n }\\n\\n function qname (name, attribute) {\\n var i = name.indexOf(':')\\n var qualName = i < 0 ? [ '', name ] : name.split(':')\\n var prefix = qualName[0]\\n var local = qualName[1]\\n\\n // <x \\\"xmlns\\\"=\\\"http://foo\\\">\\n if (attribute && name === 'xmlns') {\\n prefix = 'xmlns'\\n local = ''\\n }\\n\\n return { prefix: prefix, local: local }\\n }\\n\\n function attrib (parser) {\\n if (!parser.strict) {\\n parser.attribName = parser.attribName[parser.looseCase]()\\n }\\n\\n if (parser.attribList.indexOf(parser.attribName) !== -1 ||\\n parser.tag.attributes.hasOwnProperty(parser.attribName)) {\\n parser.attribName = parser.attribValue = ''\\n return\\n }\\n\\n if (parser.opt.xmlns) {\\n var qn = qname(parser.attribName, true)\\n var prefix = qn.prefix\\n var local = qn.local\\n\\n if (prefix === 'xmlns') {\\n // namespace binding attribute. push the binding into scope\\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\\n strictFail(parser,\\n 'xml: prefix must be bound to ' + XML_NAMESPACE + '\\\\n' +\\n 'Actual: ' + parser.attribValue)\\n } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {\\n strictFail(parser,\\n 'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\\\\n' +\\n 'Actual: ' + parser.attribValue)\\n } else {\\n var tag = parser.tag\\n var parent = parser.tags[parser.tags.length - 1] || parser\\n if (tag.ns === parent.ns) {\\n tag.ns = Object.create(parent.ns)\\n }\\n tag.ns[local] = parser.attribValue\\n }\\n }\\n\\n // defer onattribute events until all attributes have been seen\\n // so any new bindings can take effect. preserve attribute order\\n // so deferred events can be emitted in document order\\n parser.attribList.push([parser.attribName, parser.attribValue])\\n } else {\\n // in non-xmlns mode, we can emit the event right away\\n parser.tag.attributes[parser.attribName] = parser.attribValue\\n emitNode(parser, 'onattribute', {\\n name: parser.attribName,\\n value: parser.attribValue\\n })\\n }\\n\\n parser.attribName = parser.attribValue = ''\\n }\\n\\n function openTag (parser, selfClosing) {\\n if (parser.opt.xmlns) {\\n // emit namespace binding events\\n var tag = parser.tag\\n\\n // add namespace info to tag\\n var qn = qname(parser.tagName)\\n tag.prefix = qn.prefix\\n tag.local = qn.local\\n tag.uri = tag.ns[qn.prefix] || ''\\n\\n if (tag.prefix && !tag.uri) {\\n strictFail(parser, 'Unbound namespace prefix: ' +\\n JSON.stringify(parser.tagName))\\n tag.uri = qn.prefix\\n }\\n\\n var parent = parser.tags[parser.tags.length - 1] || parser\\n if (tag.ns && parent.ns !== tag.ns) {\\n Object.keys(tag.ns).forEach(function (p) {\\n emitNode(parser, 'onopennamespace', {\\n prefix: p,\\n uri: tag.ns[p]\\n })\\n })\\n }\\n\\n // handle deferred onattribute events\\n // Note: do not apply default ns to attributes:\\n // http://www.w3.org/TR/REC-xml-names/#defaulting\\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\\n var nv = parser.attribList[i]\\n var name = nv[0]\\n var value = nv[1]\\n var qualName = qname(name, true)\\n var prefix = qualName.prefix\\n var local = qualName.local\\n var uri = prefix === '' ? '' : (tag.ns[prefix] || '')\\n var a = {\\n name: name,\\n value: value,\\n prefix: prefix,\\n local: local,\\n uri: uri\\n }\\n\\n // if there's any attributes with an undefined namespace,\\n // then fail on them now.\\n if (prefix && prefix !== 'xmlns' && !uri) {\\n strictFail(parser, 'Unbound namespace prefix: ' +\\n JSON.stringify(prefix))\\n a.uri = prefix\\n }\\n parser.tag.attributes[name] = a\\n emitNode(parser, 'onattribute', a)\\n }\\n parser.attribList.length = 0\\n }\\n\\n parser.tag.isSelfClosing = !!selfClosing\\n\\n // process the tag\\n parser.sawRoot = true\\n parser.tags.push(parser.tag)\\n emitNode(parser, 'onopentag', parser.tag)\\n if (!selfClosing) {\\n // special case for <script> in non-strict mode.\\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\\n parser.state = S.SCRIPT\\n } else {\\n parser.state = S.TEXT\\n }\\n parser.tag = null\\n parser.tagName = ''\\n }\\n parser.attribName = parser.attribValue = ''\\n parser.attribList.length = 0\\n }\\n\\n function closeTag (parser) {\\n if (!parser.tagName) {\\n strictFail(parser, 'Weird empty close tag.')\\n parser.textNode += '</>'\\n parser.state = S.TEXT\\n return\\n }\\n\\n if (parser.script) {\\n if (parser.tagName !== 'script') {\\n parser.script += '</' + parser.tagName + '>'\\n parser.tagName = ''\\n parser.state = S.SCRIPT\\n return\\n }\\n emitNode(parser, 'onscript', parser.script)\\n parser.script = ''\\n }\\n\\n // first make sure that the closing tag actually exists.\\n // <a><b></c></b></a> will close everything, otherwise.\\n var t = parser.tags.length\\n var tagName = parser.tagName\\n if (!parser.strict) {\\n tagName = tagName[parser.looseCase]()\\n }\\n var closeTo = tagName\\n while (t--) {\\n var close = parser.tags[t]\\n if (close.name !== closeTo) {\\n // fail the first time in strict mode\\n strictFail(parser, 'Unexpected close tag')\\n } else {\\n break\\n }\\n }\\n\\n // didn't find it. we already failed for strict, so just abort.\\n if (t < 0) {\\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\\n parser.textNode += '</' + parser.tagName + '>'\\n parser.state = S.TEXT\\n return\\n }\\n parser.tagName = tagName\\n var s = parser.tags.length\\n while (s-- > t) {\\n var tag = parser.tag = parser.tags.pop()\\n parser.tagName = parser.tag.name\\n emitNode(parser, 'onclosetag', parser.tagName)\\n\\n var x = {}\\n for (var i in tag.ns) {\\n x[i] = tag.ns[i]\\n }\\n\\n var parent = parser.tags[parser.tags.length - 1] || parser\\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\\n // remove namespace bindings introduced by tag\\n Object.keys(tag.ns).forEach(function (p) {\\n var n = tag.ns[p]\\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\\n })\\n }\\n }\\n if (t === 0) parser.closedRoot = true\\n parser.tagName = parser.attribValue = parser.attribName = ''\\n parser.attribList.length = 0\\n parser.state = S.TEXT\\n }\\n\\n function parseEntity (parser) {\\n var entity = parser.entity\\n var entityLC = entity.toLowerCase()\\n var num\\n var numStr = ''\\n\\n if (parser.ENTITIES[entity]) {\\n return parser.ENTITIES[entity]\\n }\\n if (parser.ENTITIES[entityLC]) {\\n return parser.ENTITIES[entityLC]\\n }\\n entity = entityLC\\n if (entity.charAt(0) === '#') {\\n if (entity.charAt(1) === 'x') {\\n entity = entity.slice(2)\\n num = parseInt(entity, 16)\\n numStr = num.toString(16)\\n } else {\\n entity = entity.slice(1)\\n num = parseInt(entity, 10)\\n numStr = num.toString(10)\\n }\\n }\\n entity = entity.replace(/^0+/, '')\\n if (isNaN(num) || numStr.toLowerCase() !== entity) {\\n strictFail(parser, 'Invalid character entity')\\n return '&' + parser.entity + ';'\\n }\\n\\n return String.fromCodePoint(num)\\n }\\n\\n function beginWhiteSpace (parser, c) {\\n if (c === '<') {\\n parser.state = S.OPEN_WAKA\\n parser.startTagPosition = parser.position\\n } else if (!isWhitespace(c)) {\\n // have to process this as a text node.\\n // weird, but happens.\\n strictFail(parser, 'Non-whitespace before first tag.')\\n parser.textNode = c\\n parser.state = S.TEXT\\n }\\n }\\n\\n function charAt (chunk, i) {\\n var result = ''\\n if (i < chunk.length) {\\n result = chunk.charAt(i)\\n }\\n return result\\n }\\n\\n function write (chunk) {\\n var parser = this\\n if (this.error) {\\n throw this.error\\n }\\n if (parser.closed) {\\n return error(parser,\\n 'Cannot write after close. Assign an onready handler.')\\n }\\n if (chunk === null) {\\n return end(parser)\\n }\\n if (typeof chunk === 'object') {\\n chunk = chunk.toString()\\n }\\n var i = 0\\n var c = ''\\n while (true) {\\n c = charAt(chunk, i++)\\n parser.c = c\\n\\n if (!c) {\\n break\\n }\\n\\n if (parser.trackPosition) {\\n parser.position++\\n if (c === '\\\\n') {\\n parser.line++\\n parser.column = 0\\n } else {\\n parser.column++\\n }\\n }\\n\\n switch (parser.state) {\\n case S.BEGIN:\\n parser.state = S.BEGIN_WHITESPACE\\n if (c === '\\\\uFEFF') {\\n continue\\n }\\n beginWhiteSpace(parser, c)\\n continue\\n\\n case S.BEGIN_WHITESPACE:\\n beginWhiteSpace(parser, c)\\n continue\\n\\n case S.TEXT:\\n if (parser.sawRoot && !parser.closedRoot) {\\n var starti = i - 1\\n while (c && c !== '<' && c !== '&') {\\n c = charAt(chunk, i++)\\n if (c && parser.trackPosition) {\\n parser.position++\\n if (c === '\\\\n') {\\n parser.line++\\n parser.column = 0\\n } else {\\n parser.column++\\n }\\n }\\n }\\n parser.textNode += chunk.substring(starti, i - 1)\\n }\\n if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\\n parser.state = S.OPEN_WAKA\\n parser.startTagPosition = parser.position\\n } else {\\n if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\\n strictFail(parser, 'Text data outside of root node.')\\n }\\n if (c === '&') {\\n parser.state = S.TEXT_ENTITY\\n } else {\\n parser.textNode += c\\n }\\n }\\n continue\\n\\n case S.SCRIPT:\\n // only non-strict\\n if (c === '<') {\\n parser.state = S.SCRIPT_ENDING\\n } else {\\n parser.script += c\\n }\\n continue\\n\\n case S.SCRIPT_ENDING:\\n if (c === '/') {\\n parser.state = S.CLOSE_TAG\\n } else {\\n parser.script += '<' + c\\n parser.state = S.SCRIPT\\n }\\n continue\\n\\n case S.OPEN_WAKA:\\n // either a /, ?, !, or text is coming next.\\n if (c === '!') {\\n parser.state = S.SGML_DECL\\n parser.sgmlDecl = ''\\n } else if (isWhitespace(c)) {\\n // wait for it...\\n } else if (isMatch(nameStart, c)) {\\n parser.state = S.OPEN_TAG\\n parser.tagName = c\\n } else if (c === '/') {\\n parser.state = S.CLOSE_TAG\\n parser.tagName = ''\\n } else if (c === '?') {\\n parser.state = S.PROC_INST\\n parser.procInstName = parser.procInstBody = ''\\n } else {\\n strictFail(parser, 'Unencoded <')\\n // if there was some whitespace, then add that in.\\n if (parser.startTagPosition + 1 < parser.position) {\\n var pad = parser.position - parser.startTagPosition\\n c = new Array(pad).join(' ') + c\\n }\\n parser.textNode += '<' + c\\n parser.state = S.TEXT\\n }\\n continue\\n\\n case S.SGML_DECL:\\n if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\\n emitNode(parser, 'onopencdata')\\n parser.state = S.CDATA\\n parser.sgmlDecl = ''\\n parser.cdata = ''\\n } else if (parser.sgmlDecl + c === '--') {\\n parser.state = S.COMMENT\\n parser.comment = ''\\n parser.sgmlDecl = ''\\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\\n parser.state = S.DOCTYPE\\n if (parser.doctype || parser.sawRoot) {\\n strictFail(parser,\\n 'Inappropriately located doctype declaration')\\n }\\n parser.doctype = ''\\n parser.sgmlDecl = ''\\n } else if (c === '>') {\\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\\n parser.sgmlDecl = ''\\n parser.state = S.TEXT\\n } else if (isQuote(c)) {\\n parser.state = S.SGML_DECL_QUOTED\\n parser.sgmlDecl += c\\n } else {\\n parser.sgmlDecl += c\\n }\\n continue\\n\\n case S.SGML_DECL_QUOTED:\\n if (c === parser.q) {\\n parser.state = S.SGML_DECL\\n parser.q = ''\\n }\\n parser.sgmlDecl += c\\n continue\\n\\n case S.DOCTYPE:\\n if (c === '>') {\\n parser.state = S.TEXT\\n emitNode(parser, 'ondoctype', parser.doctype)\\n parser.doctype = true // just remember that we saw it.\\n } else {\\n parser.doctype += c\\n if (c === '[') {\\n parser.state = S.DOCTYPE_DTD\\n } else if (isQuote(c)) {\\n parser.state = S.DOCTYPE_QUOTED\\n parser.q = c\\n }\\n }\\n continue\\n\\n case S.DOCTYPE_QUOTED:\\n parser.doctype += c\\n if (c === parser.q) {\\n parser.q = ''\\n parser.state = S.DOCTYPE\\n }\\n continue\\n\\n case S.DOCTYPE_DTD:\\n parser.doctype += c\\n if (c === ']') {\\n parser.state = S.DOCTYPE\\n } else if (isQuote(c)) {\\n parser.state = S.DOCTYPE_DTD_QUOTED\\n parser.q = c\\n }\\n continue\\n\\n case S.DOCTYPE_DTD_QUOTED:\\n parser.doctype += c\\n if (c === parser.q) {\\n parser.state = S.DOCTYPE_DTD\\n parser.q = ''\\n }\\n continue\\n\\n case S.COMMENT:\\n if (c === '-') {\\n parser.state = S.COMMENT_ENDING\\n } else {\\n parser.comment += c\\n }\\n continue\\n\\n case S.COMMENT_ENDING:\\n if (c === '-') {\\n parser.state = S.COMMENT_ENDED\\n parser.comment = textopts(parser.opt, parser.comment)\\n if (parser.comment) {\\n emitNode(parser, 'oncomment', parser.comment)\\n }\\n parser.comment = ''\\n } else {\\n parser.comment += '-' + c\\n parser.state = S.COMMENT\\n }\\n continue\\n\\n case S.COMMENT_ENDED:\\n if (c !== '>') {\\n strictFail(parser, 'Malformed comment')\\n // allow <!-- blah -- bloo --> in non-strict mode,\\n // which is a comment of \\\" blah -- bloo \\\"\\n parser.comment += '--' + c\\n parser.state = S.COMMENT\\n } else {\\n parser.state = S.TEXT\\n }\\n continue\\n\\n case S.CDATA:\\n if (c === ']') {\\n parser.state = S.CDATA_ENDING\\n } else {\\n parser.cdata += c\\n }\\n continue\\n\\n case S.CDATA_ENDING:\\n if (c === ']') {\\n parser.state = S.CDATA_ENDING_2\\n } else {\\n parser.cdata += ']' + c\\n parser.state = S.CDATA\\n }\\n continue\\n\\n case S.CDATA_ENDING_2:\\n if (c === '>') {\\n if (parser.cdata) {\\n emitNode(parser, 'oncdata', parser.cdata)\\n }\\n emitNode(parser, 'onclosecdata')\\n parser.cdata = ''\\n parser.state = S.TEXT\\n } else if (c === ']') {\\n parser.cdata += ']'\\n } else {\\n parser.cdata += ']]' + c\\n parser.state = S.CDATA\\n }\\n continue\\n\\n case S.PROC_INST:\\n if (c === '?') {\\n parser.state = S.PROC_INST_ENDING\\n } else if (isWhitespace(c)) {\\n parser.state = S.PROC_INST_BODY\\n } else {\\n parser.procInstName += c\\n }\\n continue\\n\\n case S.PROC_INST_BODY:\\n if (!parser.procInstBody && isWhitespace(c)) {\\n continue\\n } else if (c === '?') {\\n parser.state = S.PROC_INST_ENDING\\n } else {\\n parser.procInstBody += c\\n }\\n continue\\n\\n case S.PROC_INST_ENDING:\\n if (c === '>') {\\n emitNode(parser, 'onprocessinginstruction', {\\n name: parser.procInstName,\\n body: parser.procInstBody\\n })\\n parser.procInstName = parser.procInstBody = ''\\n parser.state = S.TEXT\\n } else {\\n parser.procInstBody += '?' + c\\n parser.state = S.PROC_INST_BODY\\n }\\n continue\\n\\n case S.OPEN_TAG:\\n if (isMatch(nameBody, c)) {\\n parser.tagName += c\\n } else {\\n newTag(parser)\\n if (c === '>') {\\n openTag(parser)\\n } else if (c === '/') {\\n parser.state = S.OPEN_TAG_SLASH\\n } else {\\n if (!isWhitespace(c)) {\\n strictFail(parser, 'Invalid character in tag name')\\n }\\n parser.state = S.ATTRIB\\n }\\n }\\n continue\\n\\n case S.OPEN_TAG_SLASH:\\n if (c === '>') {\\n openTag(parser, true)\\n closeTag(parser)\\n } else {\\n strictFail(parser, 'Forward-slash in opening tag not followed by >')\\n parser.state = S.ATTRIB\\n }\\n continue\\n\\n case S.ATTRIB:\\n // haven't read the attribute name yet.\\n if (isWhitespace(c)) {\\n continue\\n } else if (c === '>') {\\n openTag(parser)\\n } else if (c === '/') {\\n parser.state = S.OPEN_TAG_SLASH\\n } else if (isMatch(nameStart, c)) {\\n parser.attribName = c\\n parser.attribValue = ''\\n parser.state = S.ATTRIB_NAME\\n } else {\\n strictFail(parser, 'Invalid attribute name')\\n }\\n continue\\n\\n case S.ATTRIB_NAME:\\n if (c === '=') {\\n parser.state = S.ATTRIB_VALUE\\n } else if (c === '>') {\\n strictFail(parser, 'Attribute without value')\\n parser.attribValue = parser.attribName\\n attrib(parser)\\n openTag(parser)\\n } else if (isWhitespace(c)) {\\n parser.state = S.ATTRIB_NAME_SAW_WHITE\\n } else if (isMatch(nameBody, c)) {\\n parser.attribName += c\\n } else {\\n strictFail(parser, 'Invalid attribute name')\\n }\\n continue\\n\\n case S.ATTRIB_NAME_SAW_WHITE:\\n if (c === '=') {\\n parser.state = S.ATTRIB_VALUE\\n } else if (isWhitespace(c)) {\\n continue\\n } else {\\n strictFail(parser, 'Attribute without value')\\n parser.tag.attributes[parser.attribName] = ''\\n parser.attribValue = ''\\n emitNode(parser, 'onattribute', {\\n name: parser.attribName,\\n value: ''\\n })\\n parser.attribName = ''\\n if (c === '>') {\\n openTag(parser)\\n } else if (isMatch(nameStart, c)) {\\n parser.attribName = c\\n parser.state = S.ATTRIB_NAME\\n } else {\\n strictFail(parser, 'Invalid attribute name')\\n parser.state = S.ATTRIB\\n }\\n }\\n continue\\n\\n case S.ATTRIB_VALUE:\\n if (isWhitespace(c)) {\\n continue\\n } else if (isQuote(c)) {\\n parser.q = c\\n parser.state = S.ATTRIB_VALUE_QUOTED\\n } else {\\n strictFail(parser, 'Unquoted attribute value')\\n parser.state = S.ATTRIB_VALUE_UNQUOTED\\n parser.attribValue = c\\n }\\n continue\\n\\n case S.ATTRIB_VALUE_QUOTED:\\n if (c !== parser.q) {\\n if (c === '&') {\\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\\n } else {\\n parser.attribValue += c\\n }\\n continue\\n }\\n attrib(parser)\\n parser.q = ''\\n parser.state = S.ATTRIB_VALUE_CLOSED\\n continue\\n\\n case S.ATTRIB_VALUE_CLOSED:\\n if (isWhitespace(c)) {\\n parser.state = S.ATTRIB\\n } else if (c === '>') {\\n openTag(parser)\\n } else if (c === '/') {\\n parser.state = S.OPEN_TAG_SLASH\\n } else if (isMatch(nameStart, c)) {\\n strictFail(parser, 'No whitespace between attributes')\\n parser.attribName = c\\n parser.attribValue = ''\\n parser.state = S.ATTRIB_NAME\\n } else {\\n strictFail(parser, 'Invalid attribute name')\\n }\\n continue\\n\\n case S.ATTRIB_VALUE_UNQUOTED:\\n if (!isAttribEnd(c)) {\\n if (c === '&') {\\n parser.state = S.ATTRIB_VALUE_ENTITY_U\\n } else {\\n parser.attribValue += c\\n }\\n continue\\n }\\n attrib(parser)\\n if (c === '>') {\\n openTag(parser)\\n } else {\\n parser.state = S.ATTRIB\\n }\\n continue\\n\\n case S.CLOSE_TAG:\\n if (!parser.tagName) {\\n if (isWhitespace(c)) {\\n continue\\n } else if (notMatch(nameStart, c)) {\\n if (parser.script) {\\n parser.script += '</' + c\\n parser.state = S.SCRIPT\\n } else {\\n strictFail(parser, 'Invalid tagname in closing tag.')\\n }\\n } else {\\n parser.tagName = c\\n }\\n } else if (c === '>') {\\n closeTag(parser)\\n } else if (isMatch(nameBody, c)) {\\n parser.tagName += c\\n } else if (parser.script) {\\n parser.script += '</' + parser.tagName\\n parser.tagName = ''\\n parser.state = S.SCRIPT\\n } else {\\n if (!isWhitespace(c)) {\\n strictFail(parser, 'Invalid tagname in closing tag')\\n }\\n parser.state = S.CLOSE_TAG_SAW_WHITE\\n }\\n continue\\n\\n case S.CLOSE_TAG_SAW_WHITE:\\n if (isWhitespace(c)) {\\n continue\\n }\\n if (c === '>') {\\n closeTag(parser)\\n } else {\\n strictFail(parser, 'Invalid characters in closing tag')\\n }\\n continue\\n\\n case S.TEXT_ENTITY:\\n case S.ATTRIB_VALUE_ENTITY_Q:\\n case S.ATTRIB_VALUE_ENTITY_U:\\n var returnState\\n var buffer\\n switch (parser.state) {\\n case S.TEXT_ENTITY:\\n returnState = S.TEXT\\n buffer = 'textNode'\\n break\\n\\n case S.ATTRIB_VALUE_ENTITY_Q:\\n returnState = S.ATTRIB_VALUE_QUOTED\\n buffer = 'attribValue'\\n break\\n\\n case S.ATTRIB_VALUE_ENTITY_U:\\n returnState = S.ATTRIB_VALUE_UNQUOTED\\n buffer = 'attribValue'\\n break\\n }\\n\\n if (c === ';') {\\n parser[buffer] += parseEntity(parser)\\n parser.entity = ''\\n parser.state = returnState\\n } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {\\n parser.entity += c\\n } else {\\n strictFail(parser, 'Invalid character in entity name')\\n parser[buffer] += '&' + parser.entity + c\\n parser.entity = ''\\n parser.state = returnState\\n }\\n\\n continue\\n\\n default:\\n throw new Error(parser, 'Unknown state: ' + parser.state)\\n }\\n } // while\\n\\n if (parser.position >= parser.bufferCheckPosition) {\\n checkBufferLength(parser)\\n }\\n return parser\\n }\\n\\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\\n /* istanbul ignore next */\\n if (!String.fromCodePoint) {\\n (function () {\\n var stringFromCharCode = String.fromCharCode\\n var floor = Math.floor\\n var fromCodePoint = function () {\\n var MAX_SIZE = 0x4000\\n var codeUnits = []\\n var highSurrogate\\n var lowSurrogate\\n var index = -1\\n var length = arguments.length\\n if (!length) {\\n return ''\\n }\\n var result = ''\\n while (++index < length) {\\n var codePoint = Number(arguments[index])\\n if (\\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\\n codePoint < 0 || // not a valid Unicode code point\\n codePoint > 0x10FFFF || // not a valid Unicode code point\\n floor(codePoint) !== codePoint // not an integer\\n ) {\\n throw RangeError('Invalid code point: ' + codePoint)\\n }\\n if (codePoint <= 0xFFFF) { // BMP code point\\n codeUnits.push(codePoint)\\n } else { // Astral code point; split in surrogate halves\\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\\n codePoint -= 0x10000\\n highSurrogate = (codePoint >> 10) + 0xD800\\n lowSurrogate = (codePoint % 0x400) + 0xDC00\\n codeUnits.push(highSurrogate, lowSurrogate)\\n }\\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\\n result += stringFromCharCode.apply(null, codeUnits)\\n codeUnits.length = 0\\n }\\n }\\n return result\\n }\\n /* istanbul ignore next */\\n if (Object.defineProperty) {\\n Object.defineProperty(String, 'fromCodePoint', {\\n value: fromCodePoint,\\n configurable: true,\\n writable: true\\n })\\n } else {\\n String.fromCodePoint = fromCodePoint\\n }\\n }())\\n }\\n})(typeof exports === 'undefined' ? this.sax = {} : exports)\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/sax/sax.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/sax/license\": {\n \"text\": \"The ISC License\\n\\nCopyright (c) Isaac Z. Schlueter and Contributors\\n\\nPermission to use, copy, modify, and/or distribute this software for any\\npurpose with or without fee is hereby granted, provided that the above\\ncopyright notice and this permission notice appear in all copies.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\\n\\n====\\n\\n`String.fromCodePoint` by Mathias Bynens used according to terms of MIT\\nLicense, as follows:\\n\\n Copyright Mathias Bynens <https://mathiasbynens.be/>\\n\\n Permission is hereby granted, free of charge, to any person obtaining\\n a copy of this software and associated documentation files (the\\n \\\"Software\\\"), to deal in the Software without restriction, including\\n without limitation the rights to use, copy, modify, merge, publish,\\n distribute, sublicense, and/or sell copies of the Software, and to\\n permit persons to whom the Software is furnished to do so, subject to\\n the following conditions:\\n\\n The above copyright notice and this permission notice shall be\\n included in all copies or substantial portions of the Software.\\n\\n THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND,\\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\\n LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\\n OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\\n WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/sax/license\"\n },\n \"$:/plugins/tiddlywiki/sax/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/sax/readme\",\n \"text\": \"This plugin packages [[sax.js|https://github.com/isaacs/sax-js]] for use by other plugins. It does not provide any end-user visible features.\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/share":{"title":"$:/plugins/tiddlywiki/share","name":"Share","description":"Sharing tiddlers via URLs","list":"readme wizard settings","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/DefaultTiddlers\": {\n \"title\": \"$:/DefaultTiddlers\",\n \"text\": \"[list[$:/StoryList]]\"\n },\n \"$:/SiteSubtitle\": {\n \"title\": \"$:/SiteSubtitle\",\n \"text\": \"tools to share tiddlers via URLs\"\n },\n \"$:/SiteTitle\": {\n \"title\": \"$:/SiteTitle\",\n \"text\": \"Share\"\n },\n \"$:/plugins/tiddlywiki/share/above-story\": {\n \"title\": \"$:/plugins/tiddlywiki/share/above-story\",\n \"tags\": \"$:/tags/AboveStory\",\n \"text\": \"<$transclude tiddler=\\\"$:/plugins/tiddlywiki/share/wizard\\\" mode=\\\"block\\\"/>\\n\"\n },\n \"$:/config/plugins/share/base-url\": {\n \"title\": \"$:/config/plugins/share/base-url\",\n \"text\": \"\"\n },\n \"$:/config/plugins/share/exclusions\": {\n \"title\": \"$:/config/plugins/share/exclusions\",\n \"text\": \"$:/library/sjcl.js $:/boot/bootprefix.js $:/boot/boot.js $:/boot/boot.css $:/core $:/isEncrypted $:/plugins/tiddlywiki/share $:/status/RequireReloadDueToPluginChange $:/temp/info-plugin $:/themes/tiddlywiki/snowwhite $:/themes/tiddlywiki/vanilla $:/HistoryList [prefix[$:/temp/]] [[$:/build]]\"\n },\n \"$:/config/plugins/share/filter\": {\n \"title\": \"$:/config/plugins/share/filter\",\n \"text\": \"[all[tiddlers]] -[subfilter{$:/config/plugins/share/exclusions}]\"\n },\n \"$:/core/ui/PageTemplate/pluginreloadwarning\": {\n \"title\": \"$:/core/ui/PageTemplate/pluginreloadwarning\",\n \"text\": \"<!-- Disable plugin reload warnings -->\\n\"\n },\n \"$:/plugins/tiddlywiki/share/rawmarkup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/share/rawmarkup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/share/rawmarkup.js\\ntype: application/javascript\\nmodule-type: library\\n\\nRead tiddlers from the browser location hash\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Get the hash\\nvar rawHash = document.location.hash.substring(1);\\nif(rawHash.charAt(0) === \\\"#\\\") {\\n\\tvar hash;\\n\\ttry{\\n\\t\\thash = decodeURIComponent(rawHash.substring(1));\\n\\t} catch(ex) {\\n\\t\\tconsole.log(\\\"Share plugin: Error decoding location hash\\\",ex);\\n\\t}\\n\\t// Try to parse the hash as JSON\\n\\tif(hash) {\\n\\t\\tvar tiddlers;\\n\\t\\ttry {\\n\\t\\t\\ttiddlers= JSON.parse(hash);\\n\\t\\t} catch(ex) {\\n\\t\\t\\tconsole.log(\\\"Share plugin: Error parsing JSON from location hash\\\",ex);\\n\\t\\t}\\n\\t\\tif(tiddlers) {\\n\\t\\t\\t// Need to initialise these because we run before bootprefix.js and boot.js\\n\\t\\t\\twindow.$tw = window.$tw || {};\\n\\t\\t\\t$tw.boot = $tw.boot || {};\\n\\t\\t\\t$tw.preloadTiddlers = $tw.preloadTiddlers || [];\\n\\t\\t\\t// Prevent TiddlyWiki from booting\\n\\t\\t\\t$tw.boot.suppressBoot = true;\\n\\t\\t\\t// Load our styles\\n\\t\\t\\tvar stylesWrapper = document.createElement(\\\"style\\\");\\n\\t\\t\\tstylesWrapper.innerHTML = tiddlywikiSharePluginStartupWarningCss;\\n\\t\\t\\tdocument.documentElement.appendChild(stylesWrapper);\\n\\t\\t\\t// Display the warning banner\\n\\t\\t\\tvar warningWrapper = document.createElement(\\\"div\\\");\\n\\t\\t\\twarningWrapper.innerHTML = tiddlywikiSharePluginStartupWarningHtml;\\n\\t\\t\\tdocument.documentElement.appendChild(warningWrapper);\\n\\t\\t\\t// Add our event handlers\\n\\t\\t\\tdocument.getElementById(\\\"startup-warning-proceed\\\").addEventListener(\\\"click\\\",actionProceed,false);\\n\\t\\t\\tdocument.getElementById(\\\"startup-warning-cancel\\\").addEventListener(\\\"click\\\",actionCancel,false);\\n\\t\\t\\t// Sort the incoming tiddlers by title\\n\\t\\t\\ttiddlers = tiddlers.sort(function(a,b) {\\n\\t\\t\\t\\tif(a.title < b.title) {\\n\\t\\t\\t\\t\\treturn -1;\\n\\t\\t\\t\\t} else if(a.title > b.title) {\\n\\t\\t\\t\\t\\treturn +1;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\treturn 0;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\t// Load the tiddler preview\\t\\t\\t\\t\\t\\t\\n\\t\\t\\tvar previewWrapper = document.getElementById(\\\"startup-warning-preview\\\");\\n\\t\\t\\tfor(var index=0; index < tiddlers.length; index++) {\\n\\t\\t\\t\\tvar tiddler = tiddlers[index],\\n\\t\\t\\t\\t\\ttiddlerWrapper = document.createElement(\\\"li\\\"),\\n\\t\\t\\t\\t\\ttitleTextWrapper = document.createElement(\\\"span\\\"),\\n\\t\\t\\t\\t\\ttitleText = document.createTextNode(tiddler.title),\\n\\t\\t\\t\\t\\tfieldsTable = document.createElement(\\\"table\\\"),\\n\\t\\t\\t\\t\\tfieldsTableBody = document.createElement(\\\"tbody\\\");\\n\\t\\t\\t\\ttitleTextWrapper.appendChild(titleText);\\n\\t\\t\\t\\ttitleTextWrapper.className = \\\"tiddler-title\\\";\\n\\t\\t\\t\\ttiddlerWrapper.appendChild(titleTextWrapper);\\n\\t\\t\\t\\tfieldsTable.appendChild(fieldsTableBody);\\n\\t\\t\\t\\tvar fields = Object.keys(tiddler).sort();\\n\\t\\t\\t\\tfor(var fieldIndex = 0; fieldIndex < fields.length; fieldIndex++) {\\n\\t\\t\\t\\t\\tvar fieldName = fields[fieldIndex],\\n\\t\\t\\t\\t\\t\\tfieldValue = tiddler[fieldName];\\n\\t\\t\\t\\t\\tif(fieldName !== \\\"title\\\") {\\n\\t\\t\\t\\t\\t\\tvar fieldRow = document.createElement(\\\"tr\\\"),\\n\\t\\t\\t\\t\\t\\t\\tfieldRowHeader = document.createElement(\\\"th\\\"),\\n\\t\\t\\t\\t\\t\\t\\tfieldRowValue = document.createElement(\\\"td\\\");\\n\\t\\t\\t\\t\\t\\tfieldRowHeader.appendChild(document.createTextNode(fieldName));\\n\\t\\t\\t\\t\\t\\tfieldRowValue.appendChild(document.createTextNode(fieldValue));\\n\\t\\t\\t\\t\\t\\tfieldRow.appendChild(fieldRowHeader);\\n\\t\\t\\t\\t\\t\\tfieldRow.appendChild(fieldRowValue);\\n\\t\\t\\t\\t\\t\\tfieldsTableBody.appendChild(fieldRow);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\ttiddlerWrapper.appendChild(fieldsTable);\\n\\t\\t\\t\\tpreviewWrapper.appendChild(tiddlerWrapper);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction actionProceed() {\\n\\t// Remove the banner, load our tiddlers, and boot TiddlyWiki\\n\\tremoveWarningBanner();\\n\\t$tw.preloadTiddlers = $tw.preloadTiddlers.concat(tiddlers);\\n\\t$tw.boot.boot();\\n}\\n\\nfunction actionCancel() {\\n\\t// Remove the banner, clear the location hash, and boot TiddlyWiki\\n\\tremoveWarningBanner();\\n\\tdocument.location.hash = \\\"#\\\";\\n\\t$tw.boot.boot();\\n}\\n\\nfunction removeWarningBanner() {\\n\\twarningWrapper.parentNode.removeChild(warningWrapper);\\n\\tstylesWrapper.parentNode.removeChild(stylesWrapper);\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/share/rawmarkup\": {\n \"title\": \"$:/plugins/tiddlywiki/share/rawmarkup\",\n \"tags\": \"$:/tags/RawMarkupWikified\",\n \"text\": \"`<script>`\\n`var tiddlywikiSharePluginStartupWarningHtml = \\\"`<$view tiddler=\\\"$:/plugins/tiddlywiki/share/startup-warning.html\\\" format=\\\"jsencoded\\\"/>`\\\";`\\n`var tiddlywikiSharePluginStartupWarningCss = \\\"`<$view tiddler=\\\"$:/plugins/tiddlywiki/share/startup-warning.css\\\" format=\\\"jsencoded\\\"/>`\\\";`\\n{{$:/plugins/tiddlywiki/share/rawmarkup.js}}\\n`</script>`\\n\"\n },\n \"$:/plugins/tiddlywiki/share/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/share/readme\",\n \"text\": \"<div class=\\\"tc-message-box\\\">Do not install this plugin unless you understand exactly what it does</div>\\n\\nThis experimental plugin provides tools to share tiddlers via URLs, comprising:\\n\\n* The ability to load a group of tiddlers from the browser location hash at startup\\n* Wizard and templates to create URLs from group of tiddlers\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/share/settings\": {\n \"title\": \"$:/plugins/tiddlywiki/share/settings\",\n \"text\": \"!! Base sharing URL\\n\\n//Defaults to the current location//\\n\\n<$edit-text tiddler=\\\"$:/config/plugins/share/base-url\\\" tag=\\\"input\\\" class=\\\"tc-sharing-wizard-editor\\\"/>\\n\"\n },\n \"$:/plugins/tiddlywiki/share/startup-warning.css\": {\n \"title\": \"$:/plugins/tiddlywiki/share/startup-warning.css\",\n \"text\": \"\\n.startup-warning-wrapper {\\n\\tfont-family: sans-serif;\\n\\tline-height: 1.4;\\n\\twidth: 50%;\\n\\tmargin: 1em auto 0 auto;\\n\\tpadding: 0 1em;\\n\\tborder: 6px solid transparent;\\n\\tborder-radius: 8px;\\n\\tbackground: linear-gradient(white, white) padding-box, repeating-linear-gradient(-45deg, red 0, red 25%, transparent 0, transparent 50%) 0 / .6em .6em;\\n\\tanimation: marching-ants 20s linear infinite;\\n}\\n\\n@media (max-width: 600px) {\\n\\t.startup-warning-wrapper {\\n\\t\\twidth: 85%;\\n\\t}\\n}\\n\\n#startup-warning-preview {\\n list-style-type: none;\\n padding-left: 0;\\n}\\n\\n#startup-warning-preview .tiddler-title {\\n font-weight: bold;\\n font-size: 1.2em;\\n}\\n\\n#startup-warning-preview table {\\n\\tmargin-left: 1em;\\n}\\n\\n#startup-warning-preview th {\\n\\tvertical-align: top;\\n\\tfont-weight: normal;\\n}\\n\\n#startup-warning-preview td {\\n\\tfont-family: monospace;\\n white-space: pre-wrap;\\n background: #f8f8f8;\\n}\\n\\n.startup-warning-wrapper button {\\n padding: 0.3em;\\n border-radius: 4px;\\n font-size: 1.5em;\\n}\\n\\n#startup-warning-cancel {\\n\\tbackground: #DB2828;\\n\\tcolor: #fff;\\n}\\n\\n#startup-warning-cancel:hover {\\n\\tbackground: #E75C60;\\n\\tcolor: #fff;\\n}\\n\\n#startup-warning-cancel:active {\\n\\tbackground: #ec8d8d;\\n\\tcolor: #fff;\\n}\\n\\n#startup-warning-proceed {\\n\\tbackground: #24BA4C;\\n\\tcolor: #fff;\\n}\\n\\n#startup-warning-proceed:hover {\\n\\tbackground: #59e27e;\\n\\tcolor: #fff;\\n}\\n\\n#startup-warning-proceed:active {\\n\\tbackground: #ABF5BD;\\n\\tcolor: #fff;\\n}\\n\\n.startup-warning-wrapper h1,\\n.startup-warning-wrapper h2 {\\n\\tfont-weight: bold;\\n}\\n \\n@keyframes marching-ants { to { background-position: 100% 100% } }\\n\\n\",\n \"type\": \"text/css\"\n },\n \"$:/plugins/tiddlywiki/share/startup-warning.html\": {\n \"title\": \"$:/plugins/tiddlywiki/share/startup-warning.html\",\n \"text\": \"<div class=\\\"startup-warning-wrapper\\\">\\n<h1>\\nWarning: This site is designed to share untrusted content\\n</h1>\\n<h2>\\nPlease do not proceed unless you are certain you understand the warnings below\\n</h2>\\n<p>\\nThis is a special site that allows users to share content for <a href=\\\"https://tiddlywiki.com/\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">TiddlyWiki</a> without needing conventional hosting. Instead, the content is encoded in the URL used to access the site. This means that there are no controls or protections on the content that is shared, and as such it may contain malicious links or any kind of content.\\n</p>\\n<p>\\nViewing links to this site in the browser is generally safe because web pages are designed to run in a sandbox that prevents them from accessing or harming your data. However, please exercise caution before downloading content to your own computer, or importing content into your own TiddlyWiki.\\n</p>\\n\\n<details>\\n<summary>\\nClick here to see the tiddlers that are being shared\\n</summary>\\n<ul id=\\\"startup-warning-preview\\\">\\n</ul>\\n</details>\\n\\n<p>\\n<strong><em>Only continue if you understand the risks</em></strong>\\n</p>\\n\\n<p>\\n<button id=\\\"startup-warning-proceed\\\">\\nProceed\\n</button>\\n<button id=\\\"startup-warning-cancel\\\">\\nCancel\\n</button>\\n</p>\\n\\n<h2>\\nTechnical details\\n</h2>\\n\\n<p>\\nThis web page is a <a href=\\\"https://tiddlywiki.com/\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">TiddlyWiki</a> loaded with the <a href=\\\"https://github.com/Jermolene/TiddlyWiki5/tree/master/plugins/tiddlywiki/share\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">Share plugin</a>. It has the special capability that at startup it can load raw tiddlers from a block of JSON encoded into the location hash part of the URL (ie the part after the # character).\\n</p>\\n<p>\\nThis is useful because it enables people to share working examples of TiddlyWikis without needing to arrange special hosting. The only restriction is that browsers and other Internet infrastructure frequently limit the length of URLs to a few tens of kilobytes.\\n</p>\\n\\n</div>\\n\",\n \"type\": \"text/html\"\n },\n \"$:/plugins/tiddlywiki/share/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/share/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-sharing-wizard-wrapper {\\n\\twidth: 100%;\\n\\tpadding: 1em 1em;\\n\\tmargin-bottom: 1em;\\n border-radius: 4px;\\n background: <<colour background>>;\\n\\t<<box-shadow \\\"inset 0px 2px 3px 2px rgba(0,0,0,0.4)\\\">>\\n}\\n\\ninput.tc-sharing-wizard-editor {\\n\\twidth: 100%;\\n}\"\n },\n \"$:/plugins/tiddlywiki/share/wizard\": {\n \"title\": \"$:/plugins/tiddlywiki/share/wizard\",\n \"text\": \"\\\\define generate-json()\\n<$text text=<<jsontiddlers filter:\\\"\\\"\\\"$(share-filter)$\\\"\\\"\\\" spaces:\\\"\\\">>/>\\n\\\\end\\n\\n\\\\define inner-share-actions()\\n<$wikify name=\\\"json\\\" text=<<generate-json>>>\\n<$action-sendmessage $message=\\\"tm-copy-to-clipboard\\\" $param={{{ [<json>encodeuricomponent[]addprefix[##]addprefix<base-url>] }}}/>\\n</$wikify>\\n\\\\end\\n\\n\\\\define share-actions()\\n<$set name=\\\"base-url\\\" value={{$:/config/plugins/share/base-url}} emptyValue={{$:/info/url/full}}>\\n<$set name=\\\"share-filter\\\" value={{$:/config/plugins/share/filter}}>\\n<<inner-share-actions>>\\n</$set>\\n</$set>\\n\\\\end\\n\\n<div class=\\\"tc-sharing-wizard-wrapper\\\">\\n\\n! Welcome to the sharing edition of ~TiddlyWiki\\n\\nThis edition of ~TiddlyWiki allows users to create links to wikis with the special capability of containing embedded tiddlers that are loaded into the target wiki at startup. Most browsers allow tens of kilobytes of data to be loaded in this way, making it possible to conveniently share groups of tiddlers as a fully functional wiki. See the [[readme|$:/plugins/tiddlywiki/share]] for more details.\\n\\n!! 1 - Import or create the tiddlers that are to be shared\\n\\nThe first step to create a sharing URL is to import or otherwise create the tiddlers that are to be shared.\\n\\n!! 2 - Check that the sharing filter is correct\\n\\nThe tiddlers that are included in the sharing URL are determined by the combination of two filters.\\n\\nThe sharing filter specifies the tiddlers to be shared:\\n\\n<$edit-text tiddler=\\\"$:/config/plugins/share/filter\\\" tag=\\\"input\\\" class=\\\"tc-sharing-wizard-editor\\\"/>\\n\\nThe exclusion subfilter is used to exclude the system tiddlers comprising this wiki:\\n\\n<$edit-text tiddler=\\\"$:/config/plugins/share/exclusions\\\" tag=\\\"input\\\" class=\\\"tc-sharing-wizard-editor\\\"/>\\n\\n!! 3 - Review the tiddlers to be shared\\n\\nTiddlers to be shared (<$count filter={{$:/config/plugins/share/filter}}/>):\\n\\n<ul>\\n<$list filter={{$:/config/plugins/share/filter}}>\\n<li>\\n<$link>\\n<$view field=\\\"title\\\"/>\\n</$link>\\n</li>\\n</$list>\\n</ul>\\n\\n!! 3 - Generate the sharing link\\n\\n<$button>\\n<<share-actions>>\\nGenerate sharing link\\n</$button> (the link will be copied to the clipboard)\\n\\n!! 5 - Export the shared tiddlers\\n\\n<$button>\\n<$action-sendmessage $message=\\\"tm-download-file\\\" $param=\\\"$:/core/templates/exporters/JsonFile\\\" exportFilter={{$:/config/plugins/share/filter}} filename=\\\"tiddlers.json\\\"/>\\nExport as JSON\\n</$button>\\n\\n</div>\"\n }\n }\n}"},"$:/plugins/tiddlywiki/stacked-view":{"title":"$:/plugins/tiddlywiki/stacked-view","name":"Stacked View","description":"Stacked card storyview","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/stacked-view/StackedControls\": {\n \"title\": \"$:/plugins/tiddlywiki/stacked-view/StackedControls\",\n \"caption\": \"Stacked View\",\n \"tags\": \"$:/tags/SideBar\",\n \"text\": \"Set the [[fan separation|$:/config/StackedStoryViewFanHeight]]:\\n\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"-10\\\">-10</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"0\\\">0</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"10\\\">10</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"30\\\">30</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"50\\\">50</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"100\\\">100</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"150\\\">150</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"200\\\">200</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"250\\\">250</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"300\\\">300</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"500\\\">500</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"700\\\">700</$button>\\n* <$button set=\\\"$:/config/StackedStoryViewFanHeight\\\" setTo=\\\"1500\\\">1500</$button>\\n\"\n },\n \"$:/config/StackedStoryViewFanHeight\": {\n \"title\": \"$:/config/StackedStoryViewFanHeight\",\n \"text\": \"100\"\n },\n \"$:/plugins/tiddlywiki/stacked-view/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/stacked-view/readme\",\n \"text\": \"This plugin provides a new story visualisation that displays individual tiddlers as a stack of cards. It is currently experimental and incomplete.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/stacked-view]]\\n\"\n },\n \"$:/plugins/tiddlywiki/stacked-view/config-macros/stacked-storyview\": {\n \"title\": \"$:/plugins/tiddlywiki/stacked-view/config-macros/stacked-storyview\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define tv-stacked-storyview-fan-height-config-title() $:/config/StackedStoryViewFanHeight\\n\"\n },\n \"$:/plugins/tiddlywiki/stacked-view/stacked.js\": {\n \"title\": \"$:/plugins/tiddlywiki/stacked-view/stacked.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/stacked-view/stacked.js\\ntype: application/javascript\\nmodule-type: storyview\\n\\nKeeps tiddlers in a stack\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar easing = \\\"cubic-bezier(0.645, 0.045, 0.355, 1)\\\"; // From http://easings.net/#easeInOutCubic\\n\\nvar StackedListView = function(listWidget) {\\n\\tvar self = this;\\n\\tthis.listWidget = listWidget;\\n\\tthis.fanHeightConfigTitle = listWidget.getVariable(\\\"tv-stacked-storyview-fan-height-config-title\\\");\\n\\tthis.placeTiddlers();\\n};\\n\\nStackedListView.prototype.placeTiddlers = function() {\\n\\t// Initialise the stack of tiddler titles\\n\\tthis.listStack = [];\\n\\tvar numItems = this.listWidget.children.length,\\n\\t\\tt, itemWidget,\\n\\t\\tduration = $tw.utils.getAnimationDuration();\\n\\tfor(t=numItems-1; t>=0; t--) {\\n\\t\\titemWidget = this.listWidget.children[t];\\n\\t\\tthis.listStack.push(itemWidget.parseTreeNode.itemTitle);\\n\\t}\\n\\t// Ensure the tiddler at the top of the history stack is at the top of the array\\n\\tvar history = this.listWidget.wiki.getTiddlerData(this.listWidget.historyTitle,[]);\\n\\tfor(t=0; t<history.length; t++) {\\n\\t\\tvar title = history[t].title;\\n\\t\\tif(this.listStack.indexOf(title) !== -1) {\\n\\t\\t\\t$tw.utils.pushTop(this.listStack,title);\\n\\t\\t}\\n\\t}\\n\\t// Get the configured fan height\\n\\tvar fanHeight = parseInt(this.listWidget.wiki.getTiddlerText(this.fanHeightConfigTitle),10);\\n\\t// Position each tiddler\\n\\tfor(var t=numItems-1; t>=0; t--) {\\n\\t\\t// Get the DOM node for this tiddler\\n\\t\\titemWidget = this.listWidget.children[t];\\n\\t\\tvar domNode = itemWidget.findFirstDomNode();\\n\\t\\tif(domNode instanceof Element) {\\n\\t\\t\\t// Allows the width of the tiddler to be adjusted\\n\\t\\t\\t$tw.utils.addClass(domNode,\\\"tc-storyview-zoomin-tiddler\\\");\\n\\t\\t\\t// Find the position of the tiddler in the stack\\n\\t\\t\\tvar pos = this.listStack.indexOf(itemWidget.parseTreeNode.itemTitle);\\n\\t\\t\\tif(pos !== -1) {\\n\\t\\t\\t\\t// Style the tiddler to position it\\n\\t\\t\\t\\tvar posFactor = pos/(numItems-1);\\n\\t\\t\\t\\t$tw.utils.setStyle(domNode,[\\n\\t\\t\\t\\t\\t{position: \\\"absolute\\\"},\\n\\t\\t\\t\\t\\t{transformOrigin: \\\"50% 0\\\"},\\n\\t\\t\\t\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\"transform\\\") + \\\" \\\" + duration * (0.5 + posFactor) + \\\"ms \\\" + easing},\\n\\t\\t\\t\\t\\t{transform: \\\"translateX(0px) translateY(\\\" + (fanHeight * posFactor * posFactor) + \\\"px) scale(\\\" + (0.1 + posFactor * 0.9) + \\\")\\\"},\\n\\t\\t\\t\\t\\t{zIndex: pos + \\\"\\\"}\\n\\t\\t\\t\\t]);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\nStackedListView.prototype.refreshStart = function(changedTiddlers,changedAttributes) {\\n};\\n\\nStackedListView.prototype.refreshEnd = function(changedTiddlers,changedAttributes) {\\n\\tthis.placeTiddlers();\\n};\\n\\nStackedListView.prototype.navigateTo = function(historyInfo) {\\n};\\n\\nStackedListView.prototype.insert = function(widget) {\\n};\\n\\nStackedListView.prototype.remove = function(widget) {\\n\\twidget.removeChildDomNodes();\\n};\\n\\nexports.stacked = StackedListView;\\n\\n})();\",\n \"type\": \"application/javascript\",\n \"module-type\": \"storyview\"\n },\n \"$:/core/images/storyview-stacked\": {\n \"title\": \"$:/core/images/storyview-stacked\",\n \"tags\": \"$:/tags/Image\",\n \"text\": \"<svg class=\\\"tc-image-storyview-stack tc-image-button\\\" width=\\\"22pt\\\" height=\\\"22pt\\\" viewBox=\\\"0 0 128 128\\\">\\n <g fill-rule=\\\"evenodd\\\">\\n <path d=\\\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M32,43 L32,37.3807213 C32,34.4040057 34.3875896,32 37.3328305,32 L45.5,32 L45.5,32 L84,32 L90.6671695,32 C93.6079301,32 96,34.409031 96,37.3807213 L96,43 L32,43 Z M30,48 L23.9992458,48 C19.5813843,48 16,51.578055 16,56.0085154 L16,103.991485 C16,108.414466 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.421945 112,103.991485 L112,56.0085154 C112,51.5855345 108.411895,48 104.000754,48 L98.5,48 L30,48 Z M80,27 L80,23.7529272 C80,22.2325275 78.803965,21 77.3335847,21 L50.6664153,21 C49.1937948,21 48,22.2299564 48,23.7529272 L48,27 L80,27 Z\\\"></path>\\n </g>\\n</svg>\"\n }\n }\n}"},"$:/plugins/tiddlywiki/tahoelafs":{"title":"$:/plugins/tiddlywiki/tahoelafs","name":"TahoeLAFS","description":"Tahoe-LAFS saver","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/tahoelafs/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/tahoelafs/readme\",\n \"text\": \"This plugin provides a ''saver'' module for saving changes under the [[Tahoe Least Authority File System|https://tahoe-lafs.org/]].\\n\\nAt this point it is largely for experimentation by @zooko.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/tahoelafs]]\\n\"\n },\n \"$:/plugins/tiddlywiki/tahoelafs/saver.js\": {\n \"title\": \"$:/plugins/tiddlywiki/tahoelafs/saver.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/tahoelafs/saver.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nA bare bones saver for Tahoe-LAFS. It just PUTs the new HTML file back to the server at the same URL.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar TahoeSaver = function(wiki) {\\n\\tthis.wiki = wiki;\\n};\\n\\nTahoeSaver.prototype.save = function(text) {\\n\\t// Do the HTTP post\\n\\tvar http = new XMLHttpRequest();\\n\\thttp.open(\\\"PUT\\\",document.location.toString(),true);\\n\\thttp.onreadystatechange = function() {\\n\\t\\tif(http.readyState == 4 && http.status == 200) {\\n\\t\\t\\twindow.alert(\\\"Saved to Tahoe-LAFS: \\\" + http.responseText);\\n\\t\\t}\\n\\t};\\n\\thttp.send(text);\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nTahoeSaver.prototype.info = {\\n\\tname: \\\"tahoelafs\\\",\\n\\tpriority: 1000\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave = function(wiki) {\\n\\treturn true;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create = function(wiki) {\\n\\treturn new TahoeSaver(wiki);\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"saver\"\n }\n }\n}"},"$:/plugins/tiddlywiki/text-slicer":{"title":"$:/plugins/tiddlywiki/text-slicer","name":"Text Slicer","description":"Tools for slicing text into tiddlers","list":"readme docs","dependents":"$:/plugins/tiddlywiki/sax","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/text-slicer/docs/exporters\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/docs/exporters\",\n \"tags\": \"$:/plugins/tiddlywiki/text-slicer/docs\",\n \"caption\": \"Exporters\",\n \"text\": \"Documents can be saved under Node.js, or previewed in the browser.\\n\\n[TBD]\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/docs/internals\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/docs/internals\",\n \"tags\": \"$:/plugins/tiddlywiki/text-slicer/docs\",\n \"caption\": \"Internals\",\n \"text\": \"! Introduction\\n\\nThe slicing process is performed by a simple automaton that scans the document and applies simple declarative rules to yield a collection of tiddlers.\\n\\nThe automaton processes the incoming XML document starting with the root element and then recursively visits each child node and their children. Actions are triggered as each component of the document is encountered:\\n\\n* Opening tags of elements\\n* Closing tags of elements\\n* Text nodes\\n\\nComponents are matched against the current set of rules to determine what actions should be performed. They can include a combination of:\\n\\n* Starting a new tiddler with specified fields\\n* Rendering the markup for the current tag into the current tiddler\\n* Appending the content of the current text node to the current tiddler\\n* Threading tiddlers to their parents using a combination of the `list` and `tags` fields\\n\\n! Slicing State Data\\n\\nAs the automaton performs its scan, it maintains the following state information:\\n\\n* ''chunks'' - an array of tiddlers without titles, addressed by their numeric index. The title field is reused to hold the plain text of the chunk that is later used to generate the final title for the tiddler\\n* ''currentChunk'' - the numeric index of the chunk currently being filled, or `null` if there is no current chunk\\n* ''parentStack'' - a stack of parent chunks stored as `{chunk: <chunk-index>, actions: <actions>}`\\n\\nAt the start, the special document chunk is created and pushed onto the stack of parent chunks\\n\\n! Slicing Rules\\n\\nSlicing rules are maintained in tiddlers tagged `$:/tags/text-slicer/slicer-rules` with the following fields:\\n\\n* ''title'' - title of the tiddler containing the listof rules\\n* ''name'' - short, human readable name for the set of rules\\n* ''inherits-from'' - (optional) the ''name'' field of another set of rules that should be inherited as a base\\n* ''text'' - JSON data as described below\\n\\nThe JSON data is an array of rules, each of which is an object with the following fields:\\n\\n* ''selector'' - a selector string identifying the components to be matched by this rule\\n* ''actions'' - an object describing the actions to be performed when this selector matches a tag\\n\\n!! Selectors\\n\\nThe selector format is a simplified form of CSS selectors. They are specified as follows:\\n\\n* A ''selector'' is a list of one or more ''match expressions'' separated by commas. The rule is triggered if any of the match expressions produce a positive match\\n* A ''match expression'' is a list of one or element ''tag names'' separated by spaces. The rule is triggered if the final tag name in the list matches the tag of the current element, and all of the preceding tags in the expression exist as ancestors of the current element in the specified order (but not necessarily as immediate children of one another)\\n* A ''tag name'' is the textual name of an element\\n* Tag names in match expressions may optionally be separated by a `>` sign surrounded by spaces to impose the requirement that the left hand element be the immediate parent of the right hand element\\n\\n!!! Example Selectors\\n\\nThis XML document will be used to illustrate some examples:\\n\\n```\\n<a>\\n <b>\\n <d>one</d>\\n </b>\\n <c>\\n <d>two</d>\\n <e>\\n three\\n <e>\\n four\\n </e>\\n </e>\\n </c>\\n</a>\\n\\n```\\n\\n|!Selector |!Matches |\\n|b |Matches the single `<b>` element |\\n|d |Matches both of the two `<d>` elements |\\n|c,d |Matches the `<c>` element and both of the two `<d>` elements |\\n|c d |Matches the second of the two `<d>` elements |\\n|a d |Matches both of the two `<d>` elements |\\n|a > d |Doesn't match anything |\\n|e |Matches both of the two `<e>` elements |\\n|c > e |Matches the outermost of the two `<e>` elements |\\n|e > e |Matches the innermost of the two `<e>` elements |\\n\\n!! Actions\\n\\nThe ''action'' property of a slicer rule is an object that can have any of the following optional fields:\\n\\n* ''startNewChunk'' - causes a new chunk to be started on encountering an opening tag. The value is an object containing the fields to be assigned to the new chunk\\n* ''isParent'' - causes the new chunk to be marked as a child of the current chunk (boolean flag; only applies if ''startNewChunk'' is set)\\n* ''headingLevel'' - arrange heading parents according to level (numerical index; only applies if ''startNewChunk'' and ''isParent'' are set)\\n* ''dontRenderTag'' - disables the default rendering of opening and closing tags to the current chunk. By default the tags are rendered as XML tags, but this can be overridden via ''markup'' (boolean; defaults to ''false'')\\n* ''isImage'' - identifies an element as representing an HTML image element, with special processing for the ''src'' attribute\\n* ''markup'' - optional object with either or both of `{wiki: {prefix: <str>,suffix: <str>}}` and `{html: {prefix: <str>,suffix: <str>}}` allowing the rendered tags to be customised\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/docs/model\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/docs/model\",\n \"tags\": \"$:/plugins/tiddlywiki/text-slicer/docs\",\n \"caption\": \"Document Model\",\n \"text\": \"Individual tiddlers are created for each heading, paragraph and list item. They are linked together into a hierarchical outline using lists.\\n\\nFor example, consider a tiddler titled ''Example'' containing this simple text:\\n\\n<<<\\n! This is a heading\\n\\nThis is a paragraph.\\n\\n* And the first list item\\n* Second list item\\n<<<\\n\\nIt will be sliced up into:\\n\\n* a tiddler for the overall document\\n** a tiddler for the heading\\n*** a tiddler for the paragraph\\n*** a tiddler for the list\\n**** and a tiddler for each list item\\n\\nThese tiddlers are bound together using lists: the parent tiddler has a ''list'' field that lists each child in the correct order.\\n\\n!! Slicing Process\\n\\nSlicing generates the following component tiddlers.\\n\\nTiddler titles are generated automatically in most cases (but can subsequently be changed manually). The automatically generated title is made up of concatenating the following elements:\\n\\n* root text (e.g. ''para'')\\n* a dash ''-''\\n* the first few words of the text of the item (up to 40 characters), separated with dashes ''-''\\n* if necessary, a dash ''-'' and a numerical index to make the title unique\\n\\nFor example, ''para-how-to-use-pentagonal-tiles 23''.\\n\\nAny CSS classes used in the original document are assigned as tags to the associated tiddlers.\\n\\n!!! Document\\n\\nThe document itself is represented by a tiddler with the following fields:\\n\\n* ''toc-type'': the text \\\"document\\\"\\n* ''title'': the text ''\\\"Sliced up \\\"'' plus the title of the tiddler that was sliced\\n* ''text'': Available for comments about the document\\n* ''list'': ordered list of tiddlers making up the root level of this document\\n\\n!!! Headings\\n\\nTiddlers representing headings have the following fields:\\n\\n* ''toc-type'': the text \\\"heading\\\"\\n* ''toc-heading-level'': the heading level \\\"h1\\\", \\\"h2\\\", \\\"h3\\\" etc.\\n* ''title'': an automatically generated unique title\\n* ''text'': the text of the heading\\n* ''list'': ordered list of tiddlers tagged with this heading (i.e. the child headings, paragraphs and lists displayed under this heading)\\n** In addition, any CSS classes found in the HTML are converted into tags\\n\\n!!! Paragraphs\\n\\nTiddlers representing paragraphs have the following fields:\\n\\n* ''toc-type'': the text \\\"paragraph\\\"\\n* ''title'': an automatically generated unique title\\n* ''text'': the text of the paragraph\\n* ''tags'': any CSS classes found in the HTML are converted into tags\\n\\n!!! Lists\\n\\nLists are represented by several tiddlers: one for the list itself, and one for each item in the list.\\n\\nThe tiddler representing the list itself has the following fields:\\n\\n* ''toc-type'': the text \\\"list\\\"\\n* ''toc-list-type'': the text \\\"ul\\\" or \\\"ol\\\"\\n* ''toc-list-filter'': the default filter used to generate the titles of the list items\\n* ''title'': an automatically generated unique title\\n* ''list'': ordered list of titles of tiddlers representing the items in this list\\n* ''tags'': any CSS classes found in the HTML are converted into tags\\n\\nThe tiddlers representing items within the list have the following fields:\\n\\n* ''toc-type'': the text \\\"item\\\"\\n* ''title'': an automatically generated unique title\\n* ''text'': the text of the list item\\n* ''tags'': any CSS classes found in the HTML are converted into tags\\n\\n!!! Definition lists\\n\\nDefinition lists are represented by several tiddlers: one for the definition list itself, and one for each term and definition in the list.\\n\\nThe tiddler representing the definition list itself has the following fields:\\n\\n* ''toc-type'': the text \\\"def-list\\\"\\n* ''toc-list-filter'': the default filter used to generate the titles of the definition list items\\n* ''title'': an automatically generated unique title\\n* ''list'': ordered list of titles of tiddlers representing the items (terms and/or definition) in the definition list\\n* ''tags'': any CSS classes found in the HTML are converted into tags\\n\\nThe tiddlers representing terms within the definition list have the following fields:\\n\\n* ''toc-type'': the text \\\"term\\\"\\n* ''title'': an automatically generated unique title\\n* ''text'': the text of the definition list term\\n* ''tags'': any CSS classes found in the HTML are converted into tags\\n\\nThe tiddlers representing definitions within the definition list have the following fields:\\n\\n* ''toc-type'': the text \\\"definition\\\"\\n* ''title'': an automatically generated unique title\\n* ''text'' : the text of the definition list definition\\n* ''tags'': any CSS classes found in the HTML are converted into tags\\n\\n!!! Images\\n\\nTiddlers representing images have the following fields:\\n\\n* ''toc-type'': the text \\\"image\\\"\\n* ''title'': an automatically generated unique title\\n* ''type'': appropriate content type for the image (eg \\\"image/jpeg\\\")\\n\\n!!! Notes\\n\\nNotes are available during editing but hidden for static renderings. The slicing mechanism does not generate notes; they can only be subsequently added manually. Tiddlers representing notes have the following fields:\\n\\n* ''toc-type'': the text \\\"note\\\"\\n* ''title'': an automatically generated unique title\\n* ''text'': the text of the note\\n* ''tags'': any CSS classes found in the HTML are converted into tags\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/docs/preview\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/docs/preview\",\n \"tags\": \"$:/plugins/tiddlywiki/text-slicer/docs\",\n \"caption\": \"Preview\",\n \"text\": \"The document preview column appears at the left side of the screen. The content of headings can be collapsed and expanded to help navigation. Clicking on a tiddler opens the corresponding tiddler in the main story river.\\n\\nClicking ''Show toolbar'' causes each tiddler to be preceded by a toolbar showing the underlying title. It can be edited directly to rename the tiddler. References to the tiddler in the ''tags'' and ''list'' are automatically updated to reflect the change, but note that links to the tiddler will not be automatically changed.\\n\\nThe following theme tweaks should be applied to enable the preview column:\\n\\n* Set [[story left position|$:/themes/tiddlywiki/vanilla/metrics/storyleft]] to ''400px'' (or more)\\n* It is recommended to also set the [[sidebar layout|$:/themes/tiddlywiki/vanilla/options/sidebarlayout]] to ''fluid-fixed''.\\n\\nTo preview the entire document in a separate window, locate it in the preview column and click the button labelled \\\"View document\\\". The document will open in plain text in a new window. The window will be automatically updated as you work on the document.\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/docs/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/docs/usage\",\n \"tags\": \"$:/plugins/tiddlywiki/text-slicer/docs\",\n \"caption\": \"Usage\",\n \"text\": \"The tool can slice any tiddler that can be rendered as HTML, including both WikiText and HTML itself.\\n\\nDocuments created with Microsoft Word will need to be first converted to HTML. The library [[mammoth.js|https://github.com/mwilliamson/mammoth.js]] is recommended for this purpose.\\n\\n!! Browser\\n\\nIn the browser, you can slice a monolithic document tiddler using the slicer toolbar button.\\n\\n!! Node.js\\n\\nThe `--slice` command allows a tiddler to be sliced under Node.js:\\n\\n```\\ntiddlywiki mywiki --slice SourceDocument --build index\\n```\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/docs\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/docs\",\n \"list\": \"$:/plugins/tiddlywiki/text-slicer/docs/usage $:/plugins/tiddlywiki/text-slicer/docs/preview $:/plugins/tiddlywiki/text-slicer/docs/model $:/plugins/tiddlywiki/text-slicer/docs/exporters $:/plugins/tiddlywiki/text-slicer/docs/internals\",\n \"text\": \"! Introduction\\n\\nThis plugin contains tools to help work with documents that are structured as a hierarchical outline of tiddlers. The structural relationships within the document are expressed through the `list` and `tags` fields: for example, headings have a list specifying the chunks of content to be shown under the heading.\\n\\nThe major components within the text slicer plugin include:\\n\\n* ''the slicer'', a tool that slices up an existing monolithic document according to the headings, lists and paragraphs. It is available as a toolbar button for the browser, or as a command for use under Node.js\\n* ''document preview column'', a new sidebar on the left that shows the full text of any documents in the wiki and allows individual tiddlers to be opened with a click\\n* ''templates'' for previewing and exporting the individual documents as HTML files\\n\\nMinor components include:\\n\\n* a new `list-children` filter that returns all the descendents listed in the `list` field of the selected tiddlers\\n* a new canned filter for [[advanced search|$:/AdvancedSearch]] that lists orphans tiddlers that are not part of any document\\n\\n<<tabs \\\"[all[tiddlers+shadows]tag[$:/plugins/tiddlywiki/text-slicer/docs]!has[draft.of]]\\\" \\\"$:/plugins/tiddlywiki/text-slicer/docs/usage\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/readme\",\n \"text\": \"This plugin contains tools to help slice up long texts into individual tiddlers. It currently works directly with XHTML documents and with Microsoft Word compatible DOCX documents via conversion to HTML.\\n\\nIt is an expression of the philosophy of TiddlyWiki: that text is easier to re-use and work with if it is sliced up into separate chunks that can be independently manipulated, and then woven back together to make up stories and narratives for publication.\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/icon\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/icon\",\n \"tags\": \"$:/tags/Image\",\n \"text\": \"<svg class=\\\"tc-image-text-slicer tc-image-button\\\" width=\\\"22pt\\\" height=\\\"22pt\\\" viewBox=\\\"0 0 128 128\\\">\\n <g fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n <path d=\\\"M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\\\" ></path>\\n <g transform=\\\"translate(32.000000, 32.000000) scale(2.19)\\\" fill=\\\"#ffffff\\\">\\n {{$:/plugins/tiddlywiki/text-slicer/images/text-slicer-icon}}\\n </g>\\n </g>\\n</svg>\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/images/text-slicer-icon\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/images/text-slicer-icon\",\n \"tags\": \"$:/tags/Image\",\n \"text\": \"<svg class=\\\"tc-image-text-slicer tc-image-button\\\" width=\\\"22pt\\\" height=\\\"22pt\\\" viewBox=\\\"0 0 128 128\\\">\\n\\t<g fill-rule=\\\"evenodd\\\">\\n\\t\\t<path d=\\\"M78.3637366,56.1312577 L78.3637366,60.2285796 L26.7489717,26.7095593 C23.9558586,24.8956905 23.1577753,21.1490577 24.9741388,18.3521031 C26.7898442,15.5561619 30.5337016,14.7576591 33.3309445,16.5742099 L87.6340125,51.8390346 L84.9731806,51.8390346 L103.852266,39.5788135 L105.182681,41.6274744 L104.070376,43.8022835 C102.858368,43.1824026 101.719662,42.4138485 100.675491,41.5061647 C93.6569185,35.4050129 92.9012893,24.7795163 98.9918187,17.7731637 C105.082348,10.766811 115.709601,10.0363032 122.728174,16.137455 C129.746746,22.2386068 130.502375,32.8641034 124.411846,39.870456 C123.229956,41.2300649 121.856251,42.3760135 120.416666,43.2314984 L94.2434565,60.2285796 L94.2434565,56.1312577 L120.765587,73.3549304 C121.152097,73.6059335 121.506081,73.898207 121.822516,74.2262669 L120.064365,75.9221214 L121.489555,73.938223 C121.915739,74.2443848 122.328975,74.5712591 122.728174,74.9182775 C129.746746,81.0194293 130.502375,91.6449259 124.411846,98.6512786 C118.321316,105.657631 107.694063,106.388139 100.675491,100.286987 C93.6569185,94.1858354 92.9012893,83.5603389 98.9918187,76.5539862 C100.441592,74.8862128 102.178627,73.5416182 104.115112,72.5685999 L105.211846,74.7513028 L103.88143,76.7999638 L84.9731806,64.5208027 L87.6340125,64.5208027 L61.3662147,81.57931 L61.3662147,67.1695775 L78.3637366,56.1312577 Z M114.533131,83.6707925 L115.961891,81.689464 L114.933771,83.9053132 C114.675216,83.7853476 114.424622,83.6467924 114.183613,83.4902793 L113.644945,83.1404643 L114.975362,81.0918038 L113.881545,83.2759699 C111.959385,82.3133637 109.605897,82.7611681 108.179792,84.4017143 C106.463272,86.3763445 106.676536,89.3752164 108.660203,91.0995921 C110.643871,92.8239678 113.643238,92.617794 115.359758,90.6431638 C117.076278,88.6685336 116.863014,85.6696617 114.879347,83.945286 C114.767376,83.8479516 114.651892,83.7564326 114.533131,83.6707925 Z M115.359758,31.8623412 C117.076278,29.8877111 116.863014,26.8888391 114.879347,25.1644635 C112.89568,23.4400878 109.896312,23.6462616 108.179792,25.6208918 C106.463272,27.5955219 106.676536,30.5943939 108.660203,32.3187696 C110.643871,34.0431452 113.643238,33.8369714 115.359758,31.8623412 Z\\\" fill-rule=\\\"nonzero\\\"></path>\\n\\t\\t<g transform=\\\"translate(0.000000, 46.000000)\\\">\\n\\t\\t\\t<path d=\\\"M62.9632954,19.5390625 L62.984127,19.5390625 L62.984127,76.87441 C62.984127,79.7051952 60.6450077,82 57.7588318,82 L5.49996847,82 C2.61411765,82 0.274673329,79.7050809 0.274673329,76.87441 L0.274673329,5.12559005 C0.274673329,2.29480483 2.61379258,0 5.49996847,0 L42.7341992,0 L42.7341992,0.0129302741 C44.1445002,-0.0458264988 45.5745556,0.452971616 46.6523962,1.51002434 L61.4328365,16.0053998 C62.4299816,16.9833134 62.9403234,18.2577109 62.9632954,19.5390625 L62.9632954,19.5390625 Z M42.7341992,5.125 L5.50046113,5.125 L5.50046113,76.875 L57.7583392,76.875 L57.7583392,19.5390625 L47.9602131,19.5390625 C45.0739653,19.5390625 42.7341992,17.2466672 42.7341992,14.4138408 L42.7341992,5.125 Z\\\" ></path>\\n\\t\\t\\t<rect x=\\\"10.7262489\\\" y=\\\"23.0625\\\" width=\\\"41.8063024\\\" height=\\\"5.125\\\" rx=\\\"2.5625\\\"></rect>\\n\\t\\t\\t<rect x=\\\"10.7262489\\\" y=\\\"33.3125\\\" width=\\\"41.8063024\\\" height=\\\"5.125\\\" rx=\\\"2.5625\\\"></rect>\\n\\t\\t\\t<rect x=\\\"10.7262489\\\" y=\\\"43.5625\\\" width=\\\"41.8063024\\\" height=\\\"5.125\\\" rx=\\\"2.5625\\\"></rect>\\n\\t\\t\\t<rect x=\\\"10.7262489\\\" y=\\\"53.8125\\\" width=\\\"41.8063024\\\" height=\\\"5.125\\\" rx=\\\"2.5625\\\"></rect>\\n\\t\\t\\t<rect x=\\\"10.7262489\\\" y=\\\"64.0625\\\" width=\\\"41.8063024\\\" height=\\\"5.125\\\" rx=\\\"2.5625\\\"></rect>\\n\\t\\t\\t<rect x=\\\"10.7262489\\\" y=\\\"12.8125\\\" width=\\\"26.128939\\\" height=\\\"5.125\\\" rx=\\\"2.5625\\\"></rect>\\n\\t\\t</g>\\n\\t</g>\\n</svg>\\n\"\n },\n \"$:/language/Help/slice\": {\n \"title\": \"$:/language/Help/slice\",\n \"description\": \"Slice a hierarchical document into individual tiddlers\",\n \"text\": \"Slices the specified tiddler\\n\\n```\\n--slice <source-title> [<dest-title>] [<slicer-rules>] [<output-mode>]\\n```\\n\\n* ''source-title'': Title of the tiddler to be sliced\\n* ''dest-title'': Base title for the generated output tiddlers\\n* ''slicer-rules'': Name of the slicer rules to use for the operation (see below)\\n* ''output-mode'': \\\"html\\\" vs \\\"wiki\\\"\\n\\nThe plugin comes with several built-in sets of slicer rules:\\n\\n* //html-by-paragraph//: Slice every paragraph into a separate tiddler, threaded by heading\\n* //html-by-heading//: Slice every heading into separate threaded tiddlers\\n* //html-plain-paragraphs//: Slice every paragraph into a separate tiddler, without formatting or headings\\n\\nAdvanced users can create or edit their own slicer rules for precise control over the conversion process\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/modules/commands/slice.js\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/modules/commands/slice.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/text-slicer/modules/commands/slice.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to slice a specified tiddler\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar widget = require(\\\"$:/core/modules/widgets/widget.js\\\"),\\n\\ttextSlicer = require(\\\"$:/plugins/tiddlywiki/text-slicer/modules/slicer.js\\\");\\n\\nexports.info = {\\n\\tname: \\\"slice\\\",\\n\\tsynchronous: false\\n};\\n\\nvar Command = function(params,commander,callback) {\\n\\tthis.params = params;\\n\\tthis.commander = commander;\\n\\tthis.callback = callback;\\n};\\n\\nCommand.prototype.execute = function() {\\n\\tif(this.params.length < 1) {\\n\\t\\treturn \\\"Missing parameters\\\";\\n\\t}\\n\\tvar self = this,\\n\\t\\twiki = this.commander.wiki,\\n\\t\\tsourceTitle = this.params[0],\\n\\t\\tdestTitle = this.params[1],\\n\\t\\tslicerRules = this.params[2],\\n\\t\\toutputMode = this.params[3],\\n\\t\\tslicer = new textSlicer.Slicer({\\n\\t\\t\\tsourceTiddlerTitle: sourceTitle,\\n\\t\\t\\tbaseTiddlerTitle: destTitle,\\n\\t\\t\\tslicerRules: slicerRules,\\n\\t\\t\\toutputMode: outputMode,\\n\\t\\t\\twiki: wiki,\\n\\t\\t\\tcallback: function(err,tiddlers) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\treturn self.callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\twiki.addTiddlers(tiddlers);\\n\\t\\t\\t\\tself.callback();\\t\\n\\t\\t\\t}\\n\\t\\t});\\n\\treturn null;\\n};\\n\\nexports.Command = Command;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"command\"\n },\n \"$:/core/modules/filters/list-children.js\": {\n \"title\": \"$:/core/modules/filters/list-children.js\",\n \"text\": \"/*\\\\\\ntitle: $:/core/modules/filters/list-children.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning all the descendents of a tiddler listed in the \\\"list\\\" field\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n/*\\nExport our filter function\\n*/\\nexports[\\\"list-children\\\"] = function(source,operator,options) {\\n\\tvar children = {},\\n\\t\\tprocessTiddler = function(title) {\\n\\t\\t\\tvar tiddler = options.wiki.getTiddler(title);\\n\\t\\t\\tif(tiddler && !$tw.utils.hop(children,title)) {\\n\\t\\t\\t\\tchildren[title] = true;\\n\\t\\t\\t\\tvar list = options.wiki.getTiddlerList(title,operator.operand);\\n\\t\\t\\t\\tlist.forEach(function(listItem) {\\n\\t\\t\\t\\t\\tif(!$tw.utils.hop(children,listItem)) {\\n\\t\\t\\t\\t\\t\\tprocessTiddler(listItem);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t};\\n\\tsource(function(tiddler,title) {\\n\\t\\tprocessTiddler(title);\\n\\t});\\n\\treturn Object.keys(children);\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"filteroperator\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/slicer-rules/html-by-heading.json\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/slicer-rules/html-by-heading.json\",\n \"name\": \"html-by-heading\",\n \"caption\": \"By Heading (HTML)\",\n \"description\": \"One tiddler per heading, threaded (HTML)\",\n \"inherits-from\": \"html-by-paragraph\",\n \"type\": \"application/json\",\n \"tags\": \"$:/tags/text-slicer/slicer-rules\",\n \"text\": \"[\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"address,center,fieldset,form,hr,iframe,isindex,noframes,noscript,ol,ul,li,pre,table\\\",\\n\\t\\t\\\"actions\\\": {}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"blockquote\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"<<<\\\\n\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"<<<\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"dd\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"\\\\n: \\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"dl\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"\\\\n\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"dt\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"\\\\n; \\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h1\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h1\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"mergeNext\\\": true,\\n\\t\\t\\t\\\"setCaption\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 1,\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"! \\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h2\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h2\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"mergeNext\\\": true,\\n\\t\\t\\t\\\"setCaption\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 2,\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"!! \\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h3\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h3\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"mergeNext\\\": true,\\n\\t\\t\\t\\\"setCaption\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 3,\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"!!! \\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h4\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h4\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"mergeNext\\\": true,\\n\\t\\t\\t\\\"setCaption\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 4,\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"!!!! \\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h5\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h5\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"mergeNext\\\": true,\\n\\t\\t\\t\\\"setCaption\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 5,\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"!!!!! \\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h6\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h6\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"mergeNext\\\": true,\\n\\t\\t\\t\\\"setCaption\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 6,\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"!!!!!! \\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"p\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"*\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true\\n\\t\\t}\\n\\t}\\n]\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/slicer-rules/html-by-paragraph.json\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/slicer-rules/html-by-paragraph.json\",\n \"name\": \"html-by-paragraph\",\n \"caption\": \"By Paragraph (HTML)\",\n \"description\": \"One tiddler per paragraph, threaded by heading (HTML)\",\n \"type\": \"application/json\",\n \"tags\": \"$:/tags/text-slicer/slicer-rules\",\n \"text\": \"[\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"address,center,fieldset,form,hr,iframe,isindex,noframes,noscript,pre,table\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"paragraph\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"blockquote\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"paragraph\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"<<<\\\\n\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"<<<\\\\n\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"body,div,head,html,span\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"dd\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"definition\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"dl\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"def-list\\\",\\n\\t\\t\\t\\t\\\"toc-list-filter\\\": \\\"[list<currentTiddler>!has[draft.of]]\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"dt\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"term\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"em,i\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"//\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"//\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h1\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 1,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h1\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h2\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 2,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h2\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h3\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 3,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h3\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h4\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 4,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h4\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h5\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 5,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h5\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"h6\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"headingLevel\\\": 6,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"heading\\\",\\n\\t\\t\\t\\t\\\"toc-heading-level\\\": \\\"h6\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"img\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"isImage\\\": true\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"li\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"item\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"ol\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"list\\\",\\n\\t\\t\\t\\t\\\"toc-list-type\\\": \\\"ol\\\",\\n\\t\\t\\t\\t\\\"toc-list-filter\\\": \\\"[list<currentTiddler>!has[draft.of]]\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"p\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"paragraph\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"strike\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"~~\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"~~\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"strong,b\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"''\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"''\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"sub\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\",,\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\",,\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"sup\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"^^\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"^^\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"head > title\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"paragraph\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"u\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"markup\\\": {\\n\\t\\t\\t\\t\\\"wiki\\\": {\\n\\t\\t\\t\\t\\t\\\"prefix\\\": \\\"__\\\",\\n\\t\\t\\t\\t\\t\\\"suffix\\\": \\\"__\\\"\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"ul\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"isParent\\\": true,\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"list\\\",\\n\\t\\t\\t\\t\\\"toc-list-type\\\": \\\"ul\\\",\\n\\t\\t\\t\\t\\\"toc-list-filter\\\": \\\"[list<currentTiddler>!has[draft.of]]\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"*\\\",\\n\\t\\t\\\"actions\\\": {}\\n\\t}\\n]\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/slicer-rules/html-linear.json\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/slicer-rules/html-linear.json\",\n \"name\": \"html-linear\",\n \"caption\": \"Linear (HTML)\",\n \"description\": \"One tiddler per paragraph in a single linear thread (HTML)\",\n \"type\": \"application/json\",\n \"tags\": \"$:/tags/text-slicer/slicer-rules\",\n \"text\": \"[\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"li > p\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"p\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"paragraph\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"dontRenderTag\\\": true\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"a\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"isAnchor\\\": true\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"address,blockquote,center,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,iframe,isindex,noframes,noscript,ol,pre,table,ul\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"paragraph\\\"\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"br,caption,code,col,colgroup,em,i,dd,li,strike,strong,b,sub,sup,u,tbody,td,tfoot,th,thead,tr\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"img\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"isImage\\\": true\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"head\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true,\\n\\t\\t\\t\\\"discard\\\": true\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"*\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true\\n\\t\\t}\\n\\t}\\n]\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/slicer-rules/html-plain-paragraphs.json\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/slicer-rules/html-plain-paragraphs.json\",\n \"name\": \"html-plain-paragraphs\",\n \"caption\": \"Plain Paragraphs (HTML)\",\n \"description\": \"One tiddler per paragraph, without formatting (HTML)\",\n \"type\": \"application/json\",\n \"tags\": \"$:/tags/text-slicer/slicer-rules\",\n \"text\": \"[\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"address,blockquote,center,dd,dt,h1,h2,h3,h4,h5,h6,li,p\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"startNewChunk\\\": {\\n\\t\\t\\t\\t\\\"toc-type\\\": \\\"paragraph\\\"\\n\\t\\t\\t},\\n\\t\\t\\t\\\"dontRenderTag\\\": true\\n\\t\\t}\\n\\t},\\n\\t{\\n\\t\\t\\\"selector\\\": \\\"*\\\",\\n\\t\\t\\\"actions\\\": {\\n\\t\\t\\t\\\"dontRenderTag\\\": true\\n\\t\\t}\\n\\t}\\n]\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/modules/slicer.js\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/modules/slicer.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/text-slicer/modules/slicer.js\\ntype: application/javascript\\nmodule-type: library\\n\\nSlice a tiddler or DOM document into individual tiddlers\\n\\nvar slicer = new textSlicer.Slicer(doc,{\\n\\t\\tslicerRules: JSON data defining slicer rules -or- title of rules taken from tiddlers tagged $:/tags/text-slicer/slicer-rules\\n\\t\\tsourceTiddlerTitle: tiddler to slice -or-\\n\\t\\tsourceText: text to slice\\n\\t\\toutputMode: \\\"html\\\" (default) -or- \\\"wiki\\\"\\n\\t\\tbaseTiddlerTitle: \\\"MySlicedTiddlers-\\\"\\n\\t\\trole: \\\"sliced-content\\\"\\n\\t\\tcallback: function(err,tiddlers)\\n\\t});\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nfunction Slicer(options) {\\n\\t// Quick tests\\n\\tthis.testSlicerRuleMatching();\\n\\t// Marshal parameters\\n\\tthis.sourceTiddlerTitle = options.sourceTiddlerTitle;\\n\\tthis.sourceText = options.sourceText;\\n\\tthis.wiki = options.wiki;\\n\\tthis.role = options.role || \\\"sliced-html\\\";\\n\\tthis.outputMode = options.outputMode || \\\"html\\\";\\n\\tthis.escapeWikiText = options.escapeWikiText || false;\\n\\tthis.callbackFn = options.callback;\\n\\t// Get the slicer rules\\n\\tvar nameSlicerRules = null;\\n\\tif(!options.slicerRules) {\\n\\t\\tnameSlicerRules = \\\"html-by-paragraph\\\";\\n\\t\\tthis.slicerRules = this.loadSlicerRules(nameSlicerRules);\\n\\t} else if(typeof options.slicerRules === \\\"string\\\") {\\n\\t\\tnameSlicerRules = options.slicerRules;\\n\\t\\tthis.slicerRules = this.loadSlicerRules(nameSlicerRules);\\n\\t} else {\\n\\t\\tthis.slicerRules = options.slicerRules;\\n\\t}\\n\\t// Set up the base tiddler title\\n\\tthis.baseTiddlerTitle = this.getBaseTiddlerTitle(options.baseTiddlerTitle);\\n\\t// Initialise state\\n\\tthis.namespaces = {}; // Hashmap of URLs\\n\\tthis.chunks = []; // Array of tiddlers without titles, addressed by their index. We use the title field to hold the plain text content\\n\\tthis.currentChunk = null; // Index of the chunk currently being written to\\n\\tthis.parentStack = []; // Stack of parent chunks {chunk: chunk index,actions:}\\n\\tthis.elementStack = []; // Stack of {tag:,isSelfClosing:,actions:}\\n\\tthis.titleCounts = {}; // Hashmap of counts of prefixed titles that have been issued\\n\\t// Set up the document tiddler as top level heading\\n\\tthis.chunks.push({\\n\\t\\t\\\"toc-type\\\": \\\"document\\\",\\n\\t\\ttitle: this.baseTiddlerTitle,\\n\\t\\ttext: \\\"<div class='tc-table-of-contents'><<toc-selective-expandable \\\\\\\"\\\\\\\"\\\\\\\"\\\" + this.baseTiddlerTitle + \\\"document\\\\\\\"\\\\\\\"\\\\\\\">></div>\\\",\\n\\t\\tlist: [],\\n\\t\\ttags: [],\\n\\t\\trole: this.role,\\n\\t\\t\\\"slicer-rules\\\": nameSlicerRules,\\n\\t\\t\\\"slicer-output-mode\\\": this.outputMode\\n\\t});\\n\\tthis.parentStack.push({chunk: 0, actions: this.getMatchingSlicerRuleActions(\\\"(document)\\\")});\\n\\tthis.insertPrecedingChunk({\\n\\t\\t\\\"toc-type\\\": \\\"anchor\\\",\\n\\t\\t\\\"title\\\": this.baseTiddlerTitle + \\\"-anchor-\\\"\\n\\t});\\n\\t// Set up the parser\\n\\tvar sax = require(\\\"$:/plugins/tiddlywiki/sax/sax.js\\\");\\n\\tthis.sax = sax.parser(false,{\\n\\t\\txmlns: true,\\n\\t\\tlowercase: true\\n\\t});\\n\\tthis.sax.onerror = this.onError.bind(this);\\n\\tthis.sax.onopennamespace = this.onOpenNamespace.bind(this);\\n\\tthis.sax.onclosenamespace = this.onCloseNamespace.bind(this);\\n\\tthis.sax.onopentag = this.onOpenTag.bind(this);\\n\\tthis.sax.onclosetag = this.onCloseTag.bind(this);\\n\\tthis.sax.ontext = this.onText.bind(this);\\n\\tthis.sax.onend = this.onEnd.bind(this);\\n\\t// Start streaming the data\\n\\tthis.sax.write(this.getSourceText());\\n\\tthis.sax.close();\\n}\\n\\nSlicer.prototype.callback = function(err,tiddlers) {\\n\\tvar self = this;\\n\\t$tw.utils.nextTick(function() {\\n\\t\\tself.callbackFn(err,tiddlers);\\n\\t});\\n};\\n\\nSlicer.prototype.loadSlicerRules = function(name) {\\n\\t// Collect the available slicer rule tiddlers\\n\\tvar self = this,\\n\\t\\ttitles = this.wiki.getTiddlersWithTag(\\\"$:/tags/text-slicer/slicer-rules\\\"),\\n\\t\\ttiddlers = {},\\n\\t\\trules = {},\\n\\t\\truleNames = [];\\n\\ttitles.forEach(function(title) {\\n\\t\\tvar tiddler = self.wiki.getTiddler(title);\\n\\t\\ttiddlers[tiddler.fields.name] = tiddler;\\n\\t\\trules[tiddler.fields.name] = self.wiki.getTiddlerData(title,[]);\\n\\t});\\n\\t// Follow the inheritance trail to get a stack of slicer rule names\\n\\tvar n = name;\\n\\tdo {\\n\\t\\truleNames.push(n);\\n\\t\\tn = tiddlers[n] && tiddlers[n].fields[\\\"inherits-from\\\"];\\n\\t} while(n && ruleNames.indexOf(n) === -1);\\n\\t// Concatenate the slicer rules\\n\\trules = ruleNames.reduce(function(accumulator,name) {\\n\\t\\treturn accumulator.concat(rules[name]);\\n\\t},[]);\\n\\treturn rules;\\n};\\n\\nSlicer.prototype.getMatchingSlicerRuleActions = function(name) {\\n\\tvar rule = this.searchSlicerRules(name,this.slicerRules,this.elementStack);\\n\\tif(!rule) {\\n\\t\\treturn {};\\n\\t} else {\\n\\t\\treturn rule.actions;\\n\\t}\\n};\\n\\nSlicer.prototype.testSlicerRuleMatching = function() {\\n\\tvar tests = [\\n\\t\\t\\t{\\n\\t\\t\\t\\ttest: this.searchSlicerRules(\\\"title\\\",[\\n\\t\\t\\t\\t\\t\\t{selector: \\\"title,head,body\\\", rules: true},\\n\\t\\t\\t\\t\\t\\t{selector: \\\"body\\\", rules: true}\\n\\t\\t\\t\\t\\t],[\\n\\t\\t\\t\\t\\t\\t{tag:\\\"head\\\"}\\n\\t\\t\\t\\t\\t]),\\n\\t\\t\\t\\tresult: \\\"title,head,body\\\"\\n\\t\\t\\t},\\n\\t\\t\\t{\\n\\t\\t\\t\\ttest: this.searchSlicerRules(\\\"body\\\",[\\n\\t\\t\\t\\t\\t\\t{selector: \\\"title,head,body\\\", rules: true},\\n\\t\\t\\t\\t\\t\\t{selector: \\\"body\\\", rules: true}\\n\\t\\t\\t\\t\\t],[\\n\\t\\t\\t\\t\\t\\t{tag:\\\"head\\\"}\\n\\t\\t\\t\\t\\t]),\\n\\t\\t\\t\\tresult: \\\"title,head,body\\\"\\n\\t\\t\\t},\\n\\t\\t\\t{\\t\\n\\t\\t\\t\\ttest: this.searchSlicerRules(\\\"title\\\",[\\n\\t\\t\\t\\t\\t\\t{selector: \\\"head > title\\\", rules: true},\\n\\t\\t\\t\\t\\t\\t{selector: \\\"title\\\", rules: true}\\n\\t\\t\\t\\t\\t],[\\n\\t\\t\\t\\t\\t\\t{tag:\\\"head\\\"}\\n\\t\\t\\t\\t\\t]),\\n\\t\\t\\t\\tresult: \\\"head > title\\\"\\n\\t\\t\\t}\\n\\t\\t],\\n\\t\\tresults = tests.forEach(function(test,index) {\\n\\t\\t\\tif(test.test.selector !== test.result) {\\n\\t\\t\\t\\tthrow \\\"Failing test \\\" + index + \\\", returns \\\" + test.test.selector + \\\" instead of \\\" + test.result;\\n\\t\\t\\t}\\n\\t\\t});\\n};\\n\\nSlicer.prototype.searchSlicerRules = function(name,rules,elementStack) {\\n\\treturn rules.find(function(rule) {\\n\\t\\t// Split and trim the selectors for this rule\\n\\t\\treturn !!rule.selector.split(\\\",\\\").map(function(selector) {\\n\\t\\t\\t\\treturn selector.trim();\\n\\t\\t\\t// Find the first selector that matches, if any\\n\\t\\t\\t}).find(function(selector) {\\n\\t\\t\\t\\t// Split and trim the parts of the selector\\n\\t\\t\\t\\tvar parts = selector.split(\\\" \\\").map(function(part) {\\n\\t\\t\\t\\t\\treturn part.trim();\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\t// * matches any element\\n\\t\\t\\t\\tif(parts.length === 1 && parts[0] === \\\"*\\\") {\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Make a copy of the element stack so that we can be destructive\\n\\t\\t\\t\\tvar elements = elementStack.slice(0).concat({tag: name}),\\n\\t\\t\\t\\t\\tnextElementMustBeAtTopOfStack = true,\\n\\t\\t\\t\\t\\tcurrentPart = parts.length - 1;\\n\\t\\t\\t\\twhile(currentPart >= 0) {\\n\\t\\t\\t\\t\\tif(parts[currentPart] === \\\">\\\") {\\n\\t\\t\\t\\t\\t\\tnextElementMustBeAtTopOfStack = true;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tif(!nextElementMustBeAtTopOfStack) {\\n\\t\\t\\t\\t\\t\\t\\twhile(elements.length > 0 && elements[elements.length - 1].tag !== parts[currentPart]) {\\n\\t\\t\\t\\t\\t\\t\\t\\telements.pop();\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tif(elements.length === 0 || elements[elements.length - 1].tag !== parts[currentPart]) {\\n\\t\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\telements.pop();\\n\\t\\t\\t\\t\\t\\tnextElementMustBeAtTopOfStack = false;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tcurrentPart--;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t});\\n\\t\\t});\\n};\\n\\nSlicer.prototype.getBaseTiddlerTitle = function(baseTiddlerTitle) {\\n\\tif(baseTiddlerTitle) {\\n\\t\\treturn baseTiddlerTitle\\t\\t\\n\\t} else {\\n\\t\\tif(this.sourceTiddlerTitle) {\\n\\t\\t\\treturn \\\"Sliced up \\\" + this.sourceTiddlerTitle + \\\":\\\";\\n\\t\\t} else {\\n\\t\\t\\treturn \\\"SlicedTiddler\\\";\\n\\t\\t}\\n\\t}\\n};\\n\\nSlicer.prototype.getSourceText = function() {\\n\\tif(this.sourceTiddlerTitle) {\\n\\t\\tvar tiddler = this.wiki.getTiddler(this.sourceTiddlerTitle);\\n\\t\\tif(!tiddler) {\\n\\t\\t\\tconsole.log(\\\"Tiddler '\\\" + this.sourceTiddlerTitle + \\\"' does not exist\\\");\\n\\t\\t\\treturn \\\"\\\";\\n\\t\\t}\\n\\t\\tif(tiddler.fields.type === \\\"text/html\\\" || tiddler.fields.type === \\\"text/xml\\\" || (tiddler.fields.type || \\\"\\\").slice(-4) === \\\"+xml\\\") {\\n\\t\\t\\treturn tiddler.fields.text;\\n\\t\\t} else {\\n\\t\\t\\treturn this.getTiddlerAsHtml(tiddler);\\n\\t\\t}\\n\\t} else {\\n\\t\\treturn this.sourceText;\\n\\t}\\n};\\n\\nSlicer.prototype.getTiddlerAsHtml = function(tiddler) {\\n\\tvar widgetNode = this.wiki.makeTranscludeWidget(tiddler.fields.title,{\\n\\t\\t\\tdocument: $tw.fakeDocument,\\n\\t\\t\\tparseAsInline: false,\\n\\t\\t\\timportPageMacros: true}),\\n\\t\\tcontainer = $tw.fakeDocument.createElement(\\\"div\\\");\\n\\twidgetNode.render(container,null);\\n\\treturn [\\\"<!DOCTYPE html PUBLIC \\\\\\\"-//W3C//DTD XHTML 1.1//EN\\\\\\\" \\\\\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\\\\\">\\\",\\\"<html xmlns=\\\\\\\"http://www.w3.org/1999/xhtml\\\\\\\">\\\",\\\"<head>\\\",\\\"</head>\\\",\\\"<body>\\\",container.innerHTML,\\\"</body>\\\",\\\"</html>\\\"].join(\\\"\\\\n\\\");\\n};\\n\\n\\nSlicer.prototype.getImmediateParent = function() {\\n\\treturn this.parentStack.slice(-1)[0];\\n};\\n\\nSlicer.prototype.onError = function(e) {\\n\\tconsole.error(\\\"Sax error: \\\", e)\\n\\t// Try to resume after errors\\n\\tthis.sax.error = null;\\n\\tthis.sax.resume();\\n};\\n\\nSlicer.prototype.onOpenNamespace = function(info) {\\n\\tthis.namespaces[info.prefix] = info.uri;\\n};\\n\\nSlicer.prototype.onCloseNamespace = function(info) {\\n};\\n\\nSlicer.prototype.onOpenTag = function(node) {\\n\\tvar actions = this.getMatchingSlicerRuleActions(node.name);\\n\\t// Create an anchor if we encounter an ID\\n\\tif(node.attributes.id) {\\n\\t\\tthis.insertPrecedingChunk({\\n\\t\\t\\t\\\"toc-type\\\": \\\"anchor\\\",\\n\\t\\t\\t\\\"title\\\": this.baseTiddlerTitle + \\\"-anchor-\\\" + node.attributes.id.value\\n\\t\\t});\\n\\t}\\n\\t// Check for an element that should start a new chunk\\n\\tif(actions.startNewChunk) {\\n\\t\\t// If this is a heading, pop off any higher or equal level headings first\\n\\t\\tif(actions.isParent && actions.headingLevel) {\\n\\t\\t\\tvar parentActions = this.getImmediateParent().actions;\\n\\t\\t\\twhile(parentActions.isParent && parentActions.headingLevel && parentActions.headingLevel >= actions.headingLevel) {\\n\\t\\t\\t\\tthis.parentStack.pop();\\n\\t\\t\\t\\tparentActions = this.getImmediateParent().actions;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Start the new chunk\\n\\t\\tthis.startNewChunk(actions.startNewChunk);\\n\\t\\t// If this is a parent then also add it to the parent stack\\n\\t\\tif(actions.isParent) {\\n\\t\\t\\tthis.parentStack.push({chunk: this.currentChunk, actions: actions});\\n\\t\\t}\\n\\t}\\n\\t// Render the tag inline in the current chunk unless we should ignore it\\n\\tif(!actions.dontRenderTag) {\\n\\t\\tif(actions.isImage) {\\n\\t\\t\\tthis.onOpenImage(node);\\n\\t\\t} else if(actions.isAnchor) {\\n\\t\\t\\tthis.onOpenAnchor(node);\\n\\t\\t} else {\\n\\t\\t\\tvar markupInfo = actions.markup && actions.markup[this.outputMode];\\n\\t\\t\\tif(markupInfo) {\\n\\t\\t\\t\\tthis.addTextToCurrentChunk(markupInfo.prefix);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tthis.addTextToCurrentChunk(\\\"<\\\" + node.name + (node.isSelfClosing ? \\\"/\\\" : \\\"\\\") + \\\">\\\");\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Remember whether this tag is self closing\\n\\tthis.elementStack.push({tag: node.name,isSelfClosing: node.isSelfClosing, actions: actions, node: node});\\n};\\n\\nSlicer.prototype.onOpenAnchor = function(node) {\\n\\tif(node.attributes.href) {\\n\\t\\tvar value = node.attributes.href.value;\\n\\t\\tif(value.indexOf(\\\"https://\\\") === 0 || value.indexOf(\\\"http://\\\") === 0) {\\n\\t\\t\\t// External link\\n\\t\\t\\tthis.addTextToCurrentChunk(\\\"<a href=\\\\\\\"\\\" + value + \\\"\\\\\\\" target=\\\\\\\"_blank\\\\\\\" rel=\\\\\\\"noopener noreferrer\\\\\\\">\\\");\\n\\t\\t} else {\\n\\t\\t\\t// Internal link\\n\\t\\t\\tvar parts = value.split(\\\"#\\\"),\\n\\t\\t\\t\\tbase = parts[0],\\n\\t\\t\\t\\thash = parts[1] || \\\"\\\",\\n\\t\\t\\t\\ttitle = $tw.utils.resolvePath(base,this.baseTiddlerTitle) + \\\"-anchor-\\\" + hash;\\n\\t\\t\\tthis.addTextToCurrentChunk(\\\"<$link to=\\\\\\\"\\\" + title + \\\"\\\\\\\">\\\");\\t\\t\\t\\n\\t\\t}\\n\\t}\\n};\\n\\nSlicer.prototype.onCloseAnchor = function(elementInfo) {\\n\\tif(elementInfo.node.attributes.href) {\\n\\t\\tvar value = elementInfo.node.attributes.href.value;\\n\\t\\tif(value.indexOf(\\\"https://\\\") === 0 || value.indexOf(\\\"http://\\\") === 0) {\\n\\t\\t\\t// External link\\n\\t\\t\\tthis.addTextToCurrentChunk(\\\"</a>\\\");\\n\\t\\t} else {\\n\\t\\t\\t// Internal link\\n\\t\\t\\tthis.addTextToCurrentChunk(\\\"</$link>\\\");\\n\\t\\t}\\n\\t}\\n};\\n\\nSlicer.prototype.onOpenImage = function(node) {\\n\\tvar url = node.attributes.src.value;\\n\\tif(url.slice(0,5) === \\\"data:\\\") {\\n\\t\\t// var parts = url.slice(5).split(\\\",\\\");\\n\\t\\t// this.chunks.push({\\n\\t\\t// \\ttitle: ,\\n\\t\\t// \\ttext: parts[1],\\n\\t\\t// \\ttype: parts[0].split[\\\";\\\"][0],\\n\\t\\t// \\trole: this.role\\n\\t\\t// });\\n\\t}\\n\\tthis.addTextToCurrentChunk(\\\"[img[\\\" + $tw.utils.resolvePath(url,this.baseTiddlerTitle) + \\\"]]\\\");\\n};\\n\\nSlicer.prototype.onCloseTag = function(name) {\\n\\tvar e = this.elementStack.pop(),\\n\\t\\tactions = e.actions,\\n\\t\\tselfClosing = e.isSelfClosing;\\n\\t// Set the caption if required\\n// TODO\\n// \\tif(actions.setCaption) {\\n// \\t\\tthis.chunks[this.currentChunk].caption = this.chunks[this.currentChunk].title;\\n// \\t}\\n\\t// Render the tag\\n\\tif(actions.isAnchor) {\\n\\t\\tthis.onCloseAnchor(e);\\n\\t} else if (!actions.dontRenderTag && !selfClosing) {\\n\\t\\tvar markupInfo = actions.markup && actions.markup[this.outputMode];\\n\\t\\tif(markupInfo) {\\n\\t\\t\\tthis.addTextToCurrentChunk(markupInfo.suffix);\\n\\t\\t} else {\\n\\t\\t\\tthis.addTextToCurrentChunk(\\\"</\\\" + name + \\\">\\\");\\t\\t\\t\\n\\t\\t}\\n\\t}\\n\\t// Check for an element that started a new chunk\\n\\tif(actions.startNewChunk) {\\n\\t\\tif(!actions.mergeNext) {\\n\\t\\t\\tthis.currentChunk = null;\\t\\t\\t\\n\\t\\t}\\n\\t\\t// If this is a parent and not a heading then also pop it from the parent stack\\n\\t\\tif(actions.isParent && !actions.headingLevel) {\\n\\t\\t\\tthis.parentStack.pop();\\n\\t\\t}\\n\\t}\\n};\\n\\nSlicer.prototype.onText = function(text) {\\n\\tvar self = this;\\n\\t// Discard the text if we're inside an element with actions.discard set true\\n\\tif(this.elementStack.some(function(e) {return e.actions.discard;})) {\\n\\t\\treturn;\\n\\t}\\n\\t// Optionally escape common character sequences that might be parsed as wikitext\\n\\ttext = $tw.utils.htmlEncode(text);\\n\\tif(this.escapeWikiText) {\\n\\t\\t$tw.utils.each([\\\"[[\\\",\\\"{{\\\",\\\"__\\\",\\\"''\\\",\\\"//\\\",\\\",,\\\",\\\"^^\\\",\\\"~~\\\",\\\"`\\\",\\\"--\\\",\\\"\\\\\\\"\\\\\\\"\\\",\\\"@@\\\"],function(str) {\\n\\t\\t\\tvar replace = str.split(\\\"\\\").map(function(c) {\\n\\t\\t\\t\\treturn \\\"&#\\\" + c.charCodeAt(0) + \\\";\\\";\\n\\t\\t\\t}).join(\\\"\\\");\\n\\t\\t\\ttext = text.replace(new RegExp($tw.utils.escapeRegExp(str),\\\"mg\\\"),replace);\\n\\t\\t});\\n\\t}\\n\\tthis.addTextToCurrentChunk(text);\\n\\tthis.addTextToCurrentChunk(text,\\\"caption\\\");\\n};\\n\\nSlicer.prototype.onEnd = function() {\\n\\tthis.callback(null,this.chunks);\\n};\\n\\nSlicer.prototype.addTextToCurrentChunk = function(str,field) {\\n\\tfield = field || \\\"text\\\";\\n\\tif(this.currentChunk === null && str.trim() !== \\\"\\\") {\\n\\t\\tthis.startNewChunk({\\n\\t\\t\\ttitle: this.makeTitle(\\\"paragraph\\\"),\\n\\t\\t\\t\\\"toc-type\\\": \\\"paragraph\\\"\\n\\t\\t});\\n\\t}\\n\\tif(this.currentChunk !== null) {\\n\\t\\tthis.chunks[this.currentChunk][field] += str;\\n\\t}\\n};\\n\\nSlicer.prototype.startNewChunk = function(fields) {\\n\\tvar title = fields.title || this.makeTitle(fields[\\\"toc-type\\\"]);\\n\\tvar parentChunk = this.chunks[this.getImmediateParent().chunk];\\n\\tthis.chunks.push($tw.utils.extend({},{\\n\\t\\ttitle: title,\\n\\t\\ttext: \\\"\\\",\\n\\t\\tcaption: \\\"\\\",\\n\\t\\ttags: [parentChunk.title],\\n\\t\\tlist: [],\\n\\t\\trole: this.role\\n\\t},fields));\\n\\tthis.currentChunk = this.chunks.length - 1;\\n\\tparentChunk.list.push(title);\\n};\\n\\nSlicer.prototype.insertPrecedingChunk = function(fields) {\\n\\tif(!fields.title) {\\n\\t\\tthrow \\\"Chunks need a title\\\"\\n\\t}\\n\\tif(!this.currentChunk) {\\n\\t\\tthis.startNewChunk(fields);\\n\\t\\tthis.currentChunk = null;\\n\\t} else {\\n\\t\\tvar parentChunk = this.chunks[this.getImmediateParent().chunk],\\n\\t\\t\\tindex = this.chunks.length - 1;\\n\\t\\t// Insert the new chunk\\n\\t\\tthis.chunks.splice(index,0,$tw.utils.extend({},{\\n\\t\\t\\ttext: \\\"\\\",\\n\\t\\t\\tcaption: \\\"\\\",\\n\\t\\t\\ttags: [parentChunk.title],\\n\\t\\t\\tlist: [],\\n\\t\\t\\trole: this.role\\n\\t\\t},fields));\\n\\t\\t// Adjust the current chunk pointer\\n\\t\\tthis.currentChunk += 1;\\n\\t\\t// Insert a pointer to the new chunk in the parent\\n\\t\\tparentChunk.list.splice(parentChunk.list.length - 1,0,fields.title);\\t\\t\\n\\t}\\n};\\n\\nSlicer.prototype.isBlank = function(s) {\\n\\treturn (/^[\\\\s\\\\xA0]*$/g).test(s);\\n};\\n\\nSlicer.prototype.makeTitle = function(prefix) {\\n\\tprefix = prefix || \\\"\\\";\\n\\tvar count = (this.titleCounts[prefix] || 0) + 1;\\n\\tthis.titleCounts[prefix] = count;\\n\\treturn this.baseTiddlerTitle + \\\"-\\\" + prefix + \\\"-\\\" + count;\\n};\\n\\nexports.Slicer = Slicer;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/modules/startup/slicer-startup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/modules/startup/slicer-startup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/text-slicer/modules/startup/slicer-startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nSetup the root widget event handlers\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar textSlicer = require(\\\"$:/plugins/tiddlywiki/text-slicer/modules/slicer.js\\\");\\n\\n// Export name and synchronous status\\nexports.name = \\\"slicer\\\";\\nexports.platforms = [\\\"browser\\\"];\\nexports.after = [\\\"startup\\\"];\\nexports.synchronous = true;\\n\\n// Install the root widget event handlers\\nexports.startup = function() {\\n\\t// Check sax is installed\\n\\tif(!$tw.utils.hop($tw.modules.titles,\\\"$:/plugins/tiddlywiki/sax/sax.js\\\")) {\\n\\t\\t// Make a logger\\n\\t\\tvar logger = new $tw.utils.Logger(\\\"text-slicer\\\");\\n\\t\\tlogger.alert(\\\"The plugin 'text-slicer' requires the 'sax' plugin to be installed\\\");\\n\\t}\\n\\t// Add tm-slice-tiddler event handler\\n\\t$tw.rootWidget.addEventListener(\\\"tm-slice-tiddler\\\",function(event) {\\n\\t\\tvar slicer = new textSlicer.Slicer({\\n\\t\\t\\tsourceTiddlerTitle: event.param,\\n\\t\\t\\tslicerRules: event.paramObject && event.paramObject.slicerRules,\\n\\t\\t\\toutputMode: event.paramObject && event.paramObject.outputMode,\\n\\t\\t\\tbaseTiddlerTitle: event.paramObject && event.paramObject.destTitle,\\n\\t\\t\\trole: event.paramObject && event.paramObject.role,\\n\\t\\t\\twiki: $tw.wiki,\\n\\t\\t\\tcallback: function(err,tiddlers) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\tlogger.alert(\\\"Slicer error: \\\" + err);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t$tw.wiki.addTiddlers(tiddlers);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t});\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/styles\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n.tc-document-preview-column {\\n\\tposition: fixed;\\n\\toverflow-y: auto;\\n\\toverflow-x: visible;\\n\\t-webkit-overflow-scrolling: touch;\\n background-color: <<colour page-background>>;\\n\\tright: auto;\\n\\tleft: 0;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\tfont-size: 0.9em;\\n}\\n\\n.tc-sliced-document-title {\\n\\tfont-size: 1.7em;\\n}\\n\\n.tc-slice-note {\\n color: #800;\\n padding: 4px 4px 4px 4px;\\n border: 1px solid #feed77;\\n background: #feed77;\\n background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#dede80),color-stop(7%,#feed77),color-stop(92%,#feed77),color-stop(100%,#dede80));\\n background: -webkit-linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), -webkit-linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%);\\n background: -moz-linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), -moz-linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%);\\n background: -o-linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), -o-linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%);\\n background: -ms-linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), -ms-linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%);\\n background: linear-gradient(72deg,rgba(255, 255, 255, 0.5) 8%,rgba(255, 255, 255, 0.1) 80%), linear-gradient(top,#dede80 0,#feed77 7%,#feed77 92%,#dede80 100%);\\n\\t<<box-shadow \\\"1px 1px 6px rgba(0,0,0,0.4)\\\">>\\n}\\n\\n.tc-document-preview-column .tc-sliced-document-header {\\n\\tmargin-left: 24px;\\n}\\n\\n.tc-document-preview-column .tc-sliced-document {\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-view-template-document-tiddler-wrapper,\\n.tc-edit-template-document-tiddler-wrapper {\\n border-top: 2px solid #D6A2A2;\\n margin-left: -42px;\\n margin-right: -42px;\\n margin-bottom: -42px;\\n padding-left: 42px;\\n padding-right: 42px;\\n background: #FFE3E3;\\n padding-bottom: 10px;\\n}\\n\\n.tc-edit-template-document-tiddler-wrapper {\\n\\tbackground: #A3A3D7;\\n}\\n\\ndiv.tc-view-template-document-tiddler-heading a,\\ndiv.tc-edit-template-document-tiddler-heading a {\\n\\tborder: 1px solid #D6A2A2;\\n\\tbackground: #fff;\\n\\tborder-radius: 16px;\\n padding: 0px 4px 0px 4px;\\n margin: 2px 4px 2px 4px;\\n white-space: nowrap;\\n display: inline-block;\\n}\\n\\ndiv.tc-view-template-document-tiddler-heading a:hover,\\ndiv.tc-edit-template-document-tiddler-heading a:hover {\\n\\tborder: 1px solid <<colour background>>;\\n\\ttext-decoration: none;\\n\\tcolor: <<colour background>>;\\n\\tbackground: <<colour foreground>>;\\n}\\n\\n.tc-view-template-document-tiddler-heading-icon,\\n.tc-edit-template-document-tiddler-heading-icon {\\n\\twidth: 42px;\\n\\ttext-align: center;\\n margin-left: -42px;\\n margin-right: -42px;\\n position: absolute;\\n}\\n\\n.tc-view-template-document-tiddler-subheading,\\n.tc-edit-template-document-tiddler-subheading {\\n\\tfont-size: 0.7em;\\n\\tfont-weight: bold;\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\n.tc-view-template-document-tiddler-heading-icon svg,\\n.tc-edit-template-document-tiddler-heading-icon svg {\\n\\tfill: <<colour background>>;\\t\\n}\\n\\n.tc-view-template-document-tiddler {\\n\\tfont-size: 0.9em;\\n}\\n\\n.tc-document-tiddler {\\n\\tfont-family: Georgia, Times, 'Times New Roman', serif;\\n}\\n\\n.tc-text-slicer-rename input {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n}\\n\\n.tc-document-tiddler-link {\\n\\tcursor: pointer;\\n}\\n\\n.tc-document-tiddler-link:hover {\\n background: <<color background>>;\\n}\\n\\n.tc-document-tiddler-toolbar {\\n\\tposition: absolute;\\n\\twidth: 24px;\\n\\ttext-align: center;\\n}\\n\\n.tc-document-preview-column .tc-sliced-document-body {\\n\\tmargin-left: 24px;\\n}\\n\\n.tc-document-preview-column .tc-document-tiddler-toolbar {\\n\\tmargin-left: -24px;\\n}\\n\\n.tc-table-of-contents .tc-slice-toolbar button {\\n\\tcolor: inherit;\\n\\tbackground-color: inherit;\\n}\\n\\n.tc-tiddler-frame .tc-document-tiddler-toolbar {\\n left: 0;\\n width: 42px;\\n}\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/def-list\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/def-list\",\n \"text\": \"\\\\define body()\\n<dl>\\n<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n<$list filter={{!!toc-list-filter}} template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler\\\"/>\\n</$list>\\n</dl>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/definition\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/definition\",\n \"text\": \"\\\\define body()\\n<$link tag=\\\"dd\\\" class=\\\"tc-document-tiddler-link\\\">\\n\\n<$transclude/>\\n\\n</$link>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/document\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/document\",\n \"text\": \"\\\\define config-document-status()\\n$:/state/plugins/tiddlywiki/text-slicer/show-preview-document/$(tv-heading-status-config-prefix)$/$(currentTiddler)$\\n\\\\end\\n\\n\\\\define config-show-toolbar()\\n$:/state/plugins/tiddlywiki/text-slicer/show-toolbar/$(currentTiddler)$\\n\\\\end\\n\\n\\\\define config-show-metadata()\\n$:/state/plugins/tiddlywiki/text-slicer/show-metadata/$(currentTiddler)$\\n\\\\end\\n\\n\\\\define config-heading-status()\\n$:/state/plugins/tiddlywiki/text-slicer/heading-status/$(currentTiddler)$\\n\\\\end\\n\\n\\\\define body()\\n<$set name=\\\"tv-heading-status-config-title\\\" value=<<config-heading-status>>>\\n<$set name=\\\"tv-show-toolbar\\\" value={{$(config-show-toolbar)$}}>\\n<div class=\\\"tc-sliced-document\\\">\\n<div class=\\\"tc-sliced-document-header\\\">\\n<div class=\\\"tc-document-tiddler-toolbar\\\">\\n<$reveal type=\\\"nomatch\\\" state=<<config-document-status>> text=\\\"close\\\" default=\\\"open\\\" tag=\\\"div\\\">\\n<$button set=<<config-document-status>> setTo=\\\"close\\\" class=\\\"tc-btn-invisible\\\">\\n{{$:/core/images/down-arrow}}\\n</$button>\\n</$reveal>\\n<$reveal type=\\\"match\\\" state=<<config-document-status>> text=\\\"close\\\" default=\\\"open\\\" tag=\\\"div\\\">\\n<$button set=<<config-document-status>> setTo=\\\"open\\\" class=\\\"tc-btn-invisible\\\">\\n{{$:/core/images/right-arrow}}\\n</$button>\\n</$reveal>\\n</div>\\n<h1 class=\\\"tc-sliced-document-title\\\">''Document'': <$link><$view field=\\\"title\\\"/></$link></h1>\\n</div>\\n<$reveal type=\\\"nomatch\\\" state=<<config-document-status>> text=\\\"close\\\" default=\\\"open\\\" tag=\\\"div\\\">\\n{{||$:/plugins/tiddlywiki/text-slicer/ui/document/header}}\\n<div class='tc-sliced-document-body'>\\n<$set name=\\\"tv-show-toolbar\\\" value={{$(config-show-toolbar)$}}>\\n<$set name=\\\"tv-exclude-filter\\\" value={{!!toc-exclude-filter}}>\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler\\\"/>\\n</$set>\\n</$set>\\n</div>\\n</$reveal>\\n</div>\\n</$set>\\n</$set>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/heading\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/heading\",\n \"text\": \"\\\\define config-heading-status()\\n$(tv-heading-status-config-title)$/$(tv-heading-status-config-prefix)$/$(currentTiddler)$\\n\\\\end\\n\\n\\\\define body(level:\\\"h1\\\")\\n<$set name=\\\"tv-heading-status-config-title\\\" value=<<config-heading-status>>>\\n<div class=\\\"tc-document-tiddler\\\">\\n<div class=\\\"tc-document-tiddler-toolbar\\\">\\n<$reveal type=\\\"nomatch\\\" state=<<tv-heading-status-config-title>> text=\\\"close\\\" default=<<tv-default-heading-state>> tag=\\\"div\\\">\\n<$button set=<<tv-heading-status-config-title>> setTo=\\\"close\\\" class=\\\"tc-btn-invisible\\\">\\n{{$:/core/images/down-arrow}}\\n</$button>\\n</$reveal>\\n<$reveal type=\\\"match\\\" state=<<tv-heading-status-config-title>> text=\\\"close\\\" default=<<tv-default-heading-state>> tag=\\\"div\\\">\\n<$button set=<<tv-heading-status-config-title>> setTo=\\\"open\\\" class=\\\"tc-btn-invisible\\\">\\n{{$:/core/images/right-arrow}}\\n</$button>\\n</$reveal>\\n</div>\\n<$link tag=\\\"$level$\\\" class=\\\"tc-document-tiddler-link\\\">\\n<$transclude/>\\n</$link>\\n<$reveal type=\\\"nomatch\\\" state=<<tv-heading-status-config-title>> text=\\\"close\\\" default=<<tv-default-heading-state>> tag=\\\"div\\\">\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler\\\"/>\\n</$reveal>\\n</div>\\n</$set>\\n\\\\end\\n\\n<$macrocall $name=\\\"body\\\" level={{!!toc-heading-level}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/image\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/image\",\n \"text\": \"\\\\define body()\\n<$link tag=\\\"div\\\" class=\\\"tc-document-tiddler-link tc-document-tiddler\\\">\\n\\n<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n\\n<$transclude/>\\n\\n</$list>\\n\\n</$link>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/item\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/item\",\n \"text\": \"\\\\define body()\\n<$link tag=\\\"li\\\" class=\\\"tc-document-tiddler-link\\\">\\n\\n<$transclude/>\\n\\n</$link>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/list\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/list\",\n \"text\": \"\\\\define body(type:\\\"ul\\\")\\n<$type$>\\n<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n<$list filter={{!!toc-list-filter}} template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler\\\"/>\\n</$list>\\n</$type$>\\n\\\\end\\n\\n<$macrocall $name=\\\"body\\\" type={{!!toc-list-type}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/note\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/note\",\n \"text\": \"\\\\define body()\\n<div class=\\\"tc-slice-note\\\">\\n\\n<$link tag=\\\"div\\\" class=\\\"tc-document-tiddler-link tc-document-tiddler\\\">\\n\\n<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n\\n<$transclude/>\\n\\n</$list>\\n\\n</$link>\\n\\n</div>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/paragraph\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/paragraph\",\n \"text\": \"\\\\define body()\\n<$link tag=\\\"div\\\" class=\\\"tc-document-tiddler-link tc-document-tiddler\\\">\\n\\n<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n\\n<$transclude/>\\n\\n</$list>\\n\\n</$link>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/term\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/term\",\n \"text\": \"\\\\define body()\\n<$link tag=\\\"dt\\\" class=\\\"tc-document-tiddler-link\\\">\\n\\n<$transclude/>\\n\\n</$link>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler\",\n \"text\": \"\\\\define if(condition,then,else)\\n<$list filter=\\\"\\\"\\\"$condition$ +[limit[1]]\\\"\\\"\\\" emptyMessage=\\\"\\\"\\\"$else$\\\"\\\"\\\" variable=\\\"ignore\\\">\\n$then$\\n</$list>\\n\\\\end\\n\\n\\\\define include-component(type)\\n<<if \\\"[{!!toc-type}match[$type$]]\\\" \\\"\\\"\\\"\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/interactive/$type$\\\" mode=\\\"block\\\"/>\\n\\\"\\\"\\\">>\\n\\\\end\\n\\n<$list filter=\\\"[<tv-show-toolbar>match[yes]]\\\" variable=\\\"hasToolbar\\\">\\n{{||$:/plugins/tiddlywiki/text-slicer/ui/tiddler/toolbar}}\\n</$list>\\n\\n<<include-component \\\"document\\\">>\\n<<include-component \\\"heading\\\">>\\n<<include-component \\\"paragraph\\\">>\\n<<include-component \\\"note\\\">>\\n<<include-component \\\"list\\\">>\\n<<include-component \\\"item\\\">>\\n<<include-component \\\"image\\\">>\\n<<include-component \\\"def-list\\\">>\\n<<include-component \\\"term\\\">>\\n<<include-component \\\"definition\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/def-list\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/def-list\",\n \"text\": \"\\\\define body()\\n<dl>\\n<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n<$list filter={{!!toc-list-filter}} template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler\\\"/>\\n</$list>\\n</dl>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/definition\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/definition\",\n \"text\": \"\\\\define body()\\n<dd>\\n\\n<$transclude/>\\n\\n</dd>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/document\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/document\",\n \"text\": \"<$set name=\\\"tv-exclude-filter\\\" value={{!!toc-exclude-filter}}>\\n\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler\\\"/>\\n\\n</$set>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/heading\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/heading\",\n \"text\": \"\\\\define body(level:\\\"h1\\\")\\n<$level$>\\n<$transclude/>\\n</$level$>\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler\\\"/>\\n\\\\end\\n\\n<$macrocall $name=\\\"body\\\" level={{!!toc-heading-level}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/image\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/image\",\n \"text\": \"<$transclude/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/item\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/item\",\n \"text\": \"\\\\define body()\\n<li>\\n\\n<$transclude/>\\n\\n</li>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/list\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/list\",\n \"text\": \"\\\\define body(type:\\\"ul\\\")\\n<$type$>\\n<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n<$list filter={{!!toc-list-filter}} template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler\\\"/>\\n</$list>\\n</$type$>\\n\\\\end\\n\\n<$macrocall $name=\\\"body\\\" type={{!!toc-list-type}}/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/note\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/note\",\n \"text\": \"<!-- Don't display notes in plain mode -->\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/paragraph\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/paragraph\",\n \"text\": \"\\\\define body()\\n<div>\\n\\n<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n\\n<$transclude/>\\n\\n</$list>\\n\\n</div>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/term\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/term\",\n \"text\": \"\\\\define body()\\n<dt>\\n\\n<$transclude/>\\n\\n</dt>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/plain/tiddler\",\n \"text\": \"<$vars toc-type={{!!toc-type}}>\\n\\n<$list filter=\\\"[<toc-type>match[document]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/document\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[heading]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/heading\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[paragraph]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/paragraph\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[note]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/note\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[list]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/list\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[item]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/item\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[image]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/image\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[def-list]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/def-list\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[term]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/term\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[definition]]\\\" variable=\\\"item\\\">\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/definition\\\" mode=\\\"block\\\"/>\\n</$list>\\n\\n</$vars>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/def-list\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/def-list\",\n \"text\": \"<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n\\n`<dl class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n<$list filter={{!!toc-list-filter}} template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\\\"/>\\n\\n`</dl>`\\n\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/definition\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/definition\",\n \"text\": \"`<dd class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n<$transclude/>\\n\\n`</dd>`\\n\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\\\"/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/document\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/document\",\n \"text\": \"<$set name=\\\"tv-exclude-filter\\\" value={{!!toc-exclude-filter}}>\\n\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\\\"/>\\n\\n</$set>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/heading\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/heading\",\n \"text\": \"`<`<$text text={{!!toc-heading-level}}/>` class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n<$view field=\\\"text\\\" format=\\\"htmlencodedplainwikified\\\"/>\\n\\n`</`<$text text={{!!toc-heading-level}}/>`>`\\n\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\\\"/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes\",\n \"text\": \"<$list filter=\\\"[all[current]tags[]addprefix[$:/_DocumentTags/]has[title]]\\\"><$view field=\\\"css-class\\\"/> </$list>\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/image\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/image\",\n \"text\": \"<$reveal state=\\\"!!_canonical_uri\\\" type=\\\"match\\\" text=\\\"\\\">\\n\\n`<img src=\\\"data:`<$view format=\\\"text\\\" field=\\\"type\\\"/>`;base64,`<$view format=\\\"text\\\" field=\\\"text\\\"/>`\\\" class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n</$reveal>\\n\\n<$reveal state=\\\"!!_canonical_uri\\\" type=\\\"nomatch\\\" text=\\\"\\\">\\n\\n`<img src=\\\"`<$text text=<<tv-external-image-path>>/><$view field=\\\"title\\\" format=\\\"doubleurlencoded\\\"/>`\\\" class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/item\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/item\",\n \"text\": \"`<li class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n<$transclude/>\\n\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\\\"/>\\n\\n`</li>`\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/list\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/list\",\n \"text\": \"<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n\\n`<`<$text text={{!!toc-list-type}}/>` class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n<$list filter={{!!toc-list-filter}} template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\\\"/>\\n\\n`</`<$text text={{!!toc-list-type}}/>`>`\\n\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/note\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/note\",\n \"text\": \"<!-- Don't display notes in static mode -->\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/paragraph\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/paragraph\",\n \"text\": \"<$list filter=\\\"\\\"\\\"[all[current]] $(tv-exclude-filter)$ +[limit[1]]\\\"\\\"\\\" variable=\\\"item\\\">\\n\\n`<p class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n<$view field=\\\"text\\\" format=\\\"htmlencodedplainwikified\\\"/>\\n\\n`</p>`\\n\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/term\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/term\",\n \"text\": \"`<dt class=\\\"`{{||$:/plugins/tiddlywiki/text-slicer/templates/static/helpers/classes}}`\\\">`\\n\\n<$transclude/>\\n\\n`</dt>`\\n\\n<$list filter=\\\"[list<currentTiddler>!has[draft.of]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\\\"/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/templates/static/tiddler\",\n \"text\": \"<$vars toc-type={{!!toc-type}}>\\n\\n<$list filter=\\\"[<toc-type>match[document]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/document\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[heading]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/heading\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[paragraph]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/paragraph\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[note]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/note\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[list]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/list\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[item]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/item\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[image]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/image\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[def-list]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/def-list\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[term]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/term\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n<$list filter=\\\"[<toc-type>match[definition]]\\\" variable=\\\"item\\\">\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/static/definition\\\" mode=\\\"block\\\"/>\\n\\n</$list>\\n\\n</$vars>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/document/header\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/document/header\",\n \"text\": \"\\\\define metadatafield()\\n<tr>\\n<td>\\n''<$transclude tiddler=<<listItem>> field=\\\"caption\\\"/>''\\n</td>\\n<td>\\n<$reveal type=\\\"match\\\" state=\\\"\\\"\\\"$(listItem)$!!field-type\\\"\\\"\\\" text=\\\"string\\\">\\n<$edit-text field={{$(listItem)$!!field}}/>\\n</$reveal>\\n<$reveal type=\\\"match\\\" state=\\\"\\\"\\\"$(listItem)$!!field-type\\\"\\\"\\\" text=\\\"list\\\">\\n<$edit-text tag=\\\"textarea\\\" field={{$(listItem)$!!field}}/>\\n</$reveal>\\n</td>\\n</tr>\\n\\\\end\\n\\n<div class=\\\"tc-sliced-document-header\\\">\\n\\n''Exclude filter'': <$edit-text field=\\\"toc-exclude-filter\\\"/>\\n\\n<$checkbox tiddler=<<config-show-toolbar>> field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> Show toolbar </$checkbox> <$checkbox tiddler=<<config-show-metadata>> field=\\\"text\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\"> Show metadata</$checkbox> <$button>\\n<$action-sendmessage $message=\\\"tm-open-window\\\" $param=<<currentTiddler>> template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/plain/document\\\"/>\\nView document\\n</$button>\\n\\n<$reveal state=<<config-show-metadata>> default=\\\"no\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n<table>\\n<tbody>\\n<$list filter=\\\"[all[system+tiddlers]tag[$:/tags/DocumentMetaData]]\\\" variable=\\\"listItem\\\">\\n<<metadatafield>>\\n</$list>\\n</tbody>\\n</table>\\n</$reveal>\\n\\n\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/edit-template-segment\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/edit-template-segment\",\n \"tags\": \"$:/tags/EditTemplate\",\n \"text\": \"\\\\define edit-field(name,tag:\\\"input\\\")\\n$name$:\\n\\n<$edit-text field=\\\"\\\"\\\"$name$\\\"\\\"\\\" tag=\\\"$tag$\\\" class=\\\"tc-edit-texteditor\\\"/>\\n\\\\end\\n\\n<$reveal type=\\\"nomatch\\\" state=\\\"!!toc-type\\\" text=\\\"\\\">\\n\\n<div class=\\\"tc-edit-template-document-tiddler-wrapper\\\">\\n\\n<div class=\\\"tc-edit-template-document-tiddler-heading\\\">\\n\\n<div class=\\\"tc-edit-template-document-tiddler-heading-icon\\\">\\n\\n{{$:/core/images/file}}\\n\\n</div>\\n\\n<div class=\\\"tc-edit-template-document-tiddler-subheading\\\">\\n\\n<$view field=\\\"toc-type\\\"/>\\n\\n</div>\\n\\n<<edit-field \\\"list\\\" tag:\\\"textarea\\\">>\\n\\n</div>\\n\\n</div>\\n\\n</$reveal>\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/filters/Orphans\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/filters/Orphans\",\n \"tags\": \"$:/tags/Filter\",\n \"filter\": \"[has[toc-type]] -[toc-type[document]list-children[]]\",\n \"description\": \"[Text-slicer] Tiddlers that are not part of any document\",\n \"text\": \"\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/preview-column/empty\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/preview-column/empty\",\n \"text\": \"<div class=\\\"tc-sliced-document-header\\\">\\n\\nCreate a document by slicing an existing tiddler\\n\\n---\\n\\n[[Help|$:/plugins/tiddlywiki/text-slicer/docs]]\\n\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/preview-column/multiple\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/preview-column/multiple\",\n \"text\": \"Show document: <$select tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/config/currentDocument\\\">\\n<$list filter=\\\"[toc-type[document]!has[draft.of]sort[title]]\\\">\\n<option value=<<currentTiddler>>><$view field=\\\"title\\\"/></option>\\n</$list>\\n</$select>\\n\\n<$tiddler tiddler={{$:/plugins/tiddlywiki/text-slicer/config/currentDocument}}>\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/interactive/document\\\"/>\\n\\n</$tiddler>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/preview-column/single\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/preview-column/single\",\n \"text\": \"<$list filter=\\\"[toc-type[document]!has[draft.of]sort[title]limit[1]]\\\" template=\\\"$:/plugins/tiddlywiki/text-slicer/templates/interactive/document\\\"/>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/preview-column\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/preview-column\",\n \"tags\": \"$:/tags/AboveStory\",\n \"text\": \"<$scrollable fallthrough=\\\"no\\\" class=\\\"tc-document-preview-column\\\">\\n\\n<$vars\\n\\ttv-default-heading-state=\\\"open\\\"\\n>\\n\\n<$list filter=\\\"[toc-type[document]!has[draft.of]sort[title]limit[1]]\\\" emptyMessage={{$:/plugins/tiddlywiki/text-slicer/ui/preview-column/empty}}>\\n\\n<$list filter=\\\"[toc-type[document]!has[draft.of]sort[title]butfirst[1]limit[1]]\\\" emptyMessage={{$:/plugins/tiddlywiki/text-slicer/ui/preview-column/single}} template=\\\"$:/plugins/tiddlywiki/text-slicer/ui/preview-column/multiple\\\"/>\\n\\n</$list>\\n\\n</$vars>\\n\\n</$scrollable>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/slice-modal\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/slice-modal\",\n \"footer\": \"<$button message=\\\"tm-close-tiddler\\\">Cancel</$button> <$button><$action-sendmessage $message=\\\"tm-close-tiddler\\\"/><$action-sendmessage $message=\\\"tm-slice-tiddler\\\" $param=<<currentTiddler>> slicerRules={{$:/config/plugins/text-slicer/slice-rule}} outputMode={{$:/config/plugins/text-slicer/output-mode}} destTitle={{$:/config/plugins/text-slicer/base-title}}/>Slice</$button>\",\n \"subtitle\": \"Slicing \\\"<$text text=<<currentTiddler>>/>\\\" into chunks\",\n \"text\": \"''Choose how the tiddler should be sliced''\\n\\nPrefix for extracted tiddlers: <$edit-text tiddler=\\\"$:/config/plugins/text-slicer/base-title\\\" default={{{ [[Sliced up ]addsuffix<currentTiddler>addsuffix[:]] }}} tag=\\\"input\\\" size=\\\"30\\\"/>\\n\\n<$select tiddler=\\\"$:/config/plugins/text-slicer/slice-rule\\\" default=\\\"html-by-paragraph\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/text-slicer/slicer-rules]!has[draft.of]]\\\">\\n<option value={{!!name}}><$text text={{!!description}}/></option>\\n</$list>\\n</$select>\\n\\nOutput mode: <$select tiddler=\\\"$:/config/plugins/text-slicer/output-mode\\\" default=\\\"html\\\">\\n<option value=\\\"html\\\">HTML</option>\\n<option value=\\\"wiki\\\">Wiki text</option>\\n</$select>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/slice-toolbar-button\",\n \"tags\": \"$:/tags/ViewToolbar\",\n \"list-before\": \"$:/core/ui/Buttons/edit\",\n \"caption\": \"{{$:/plugins/tiddlywiki/text-slicer/images/text-slicer-icon}} Slice text tiddler\",\n \"description\": \"Slice this text tiddler by headings and lists\",\n \"text\": \"\\\\whitespace trim\\n\\n\\\\define hint()\\nSlice this text tiddler into chunks\\n\\\\end\\n\\n<$list filter=\\\"[<currentTiddler>!is[image]!is[binary]]\\\" variable=\\\"ignore\\\">\\n<$button tooltip=<<hint>> aria-label=<<hint>> class=<<tv-config-toolbar-class>>>\\n<$action-sendmessage $message=\\\"tm-modal\\\" $param=\\\"$:/plugins/tiddlywiki/text-slicer/ui/slice-modal\\\" currentTiddler=<<currentTiddler>>/>\\n<$list filter=\\\"[<tv-config-toolbar-icons>match[yes]]\\\">\\n{{$:/plugins/tiddlywiki/text-slicer/images/text-slicer-icon}}\\n</$list>\\n<$list filter=\\\"[<tv-config-toolbar-text>match[yes]]\\\">\\n<span class=\\\"tc-btn-text\\\"> Slice tiddler</span>\\n</$list>\\n</$button>\\n</$list>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/tiddler/toolbar/title\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/tiddler/toolbar/title\",\n \"tags\": \"$:/tags/TextSlicerToolbar\",\n \"text\": \"\\\\define renameProxyTitle()\\n$:/state/plugins/tiddlywiki/text-slicer/rename-$(currentTiddler)$\\n\\\\end\\n\\n\\\\define body()\\n<div class=\\\"tc-text-slicer-rename\\\">\\n<$edit-text tag=\\\"input\\\" tiddler=<<renameProxyTitle>> placeholder=\\\"Rename\\\" default=<<currentTiddler>>/>\\n<$reveal type=\\\"nomatch\\\" state=\\\"\\\"\\\"$(renameProxyTitle)$\\\"\\\"\\\" text=<<currentTiddler>> default=<<currentTiddler>>>\\n<$button>\\n<$action-deletetiddler $tiddler=<<renameProxyTitle>>/>\\ncancel\\n</$button>\\n<$button>\\n<$action-sendmessage $message=\\\"tm-rename-tiddler\\\" from=<<currentTiddler>> to={{$(renameProxyTitle)$}}/>\\n<$action-deletetiddler $tiddler=<<renameProxyTitle>>/>\\nrename\\n</$button>\\n<$set name=\\\"proxy-title\\\" value={{$(renameProxyTitle)$}}>\\n<$list filter=\\\"\\\"\\\"[<proxy-title>is[tiddler]]\\\"\\\"\\\">\\nWarning: tiddler already exists\\n</$list>\\n</$set>\\n</$reveal>\\n</div>\\n\\\\end\\n\\n<<body>>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/tiddler/toolbar\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/tiddler/toolbar\",\n \"text\": \"<div class=\\\"tc-slice-toolbar\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/TextSlicerToolbar]!has[draft.of]]\\\" variable=\\\"listItem\\\"><$transclude tiddler=<<listItem>>/></$list>\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/text-slicer/ui/view-template-segment\": {\n \"title\": \"$:/plugins/tiddlywiki/text-slicer/ui/view-template-segment\",\n \"tags\": \"$:/tags/ViewTemplate\",\n \"text\": \"\\\\define config-heading-status()\\n$:/state/plugins/tiddlywiki/text-slicer/heading-status/$(currentTiddler)$\\n\\\\end\\n\\n<$reveal type=\\\"nomatch\\\" state=<<folded-state>> text=\\\"hide\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n\\n<$reveal type=\\\"nomatch\\\" state=\\\"!!toc-type\\\" text=\\\"\\\">\\n\\n<div class=\\\"tc-view-template-document-tiddler-wrapper\\\">\\n\\n<div class=\\\"tc-view-template-document-tiddler-heading\\\">\\n\\n<div class=\\\"tc-view-template-document-tiddler-heading-icon\\\">\\n\\n{{$:/core/images/file}}\\n\\n</div>\\n\\n<div class=\\\"tc-view-template-document-tiddler-subheading\\\">\\n\\n<$view field=\\\"toc-type\\\"/>\\n\\n</div>\\n\\nParents: <$list filter=\\\"[all[current]listed[]!is[system]]\\\" emptyMessage=\\\"None\\\">\\n<$link><$view field=\\\"title\\\"/></$link>\\n</$list>\\n\\n</div>\\n\\n<div class=\\\"tc-view-template-document-tiddler\\\">\\n\\n<$vars\\n\\ttv-default-heading-state=\\\"close\\\"\\n\\ttv-heading-status-config-prefix=\\\"view-template\\\"\\n\\ttv-heading-status-config-title=<<config-heading-status>>\\n>\\n\\n<$transclude tiddler=\\\"$:/plugins/tiddlywiki/text-slicer/templates/interactive/tiddler\\\"/>\\n\\n</$vars>\\n\\n</div>\\n\\n</div>\\n\\n</$reveal>\\n\\n</$reveal>\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/tiddlyweb":{"title":"$:/plugins/tiddlywiki/tiddlyweb","name":"TiddlyWeb","description":"Sync changes to TW5 server or TiddlyWeb server","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"GettingStarted\": {\n \"title\": \"GettingStarted\",\n \"tags\": \"$:/tags/GettingStarted\",\n \"caption\": \"Step 1<br>Syncing\",\n \"text\": \"Welcome to ~TiddlyWiki and the ~TiddlyWiki community\\n\\nVisit https://tiddlywiki.com/ to find out more about ~TiddlyWiki and what it can do.\\n\\n! Syncing Changes to the Server\\n\\nBefore you can start storing important information in ~TiddlyWiki it is important to make sure that your changes are being reliably saved by the server.\\n\\n# Create a new tiddler using the {{$:/core/images/new-button}} button in the sidebar on the right\\n# Click the {{$:/core/images/done-button}} button at the top right of the new tiddler\\n# Check the ~TiddlyWiki command line for a message confirming the tiddler has been saved\\n# Refresh the page in the browser to and verify that the new tiddler has been correctly saved\\n\"\n },\n \"$:/config/SaveWikiButton/Template\": {\n \"title\": \"$:/config/SaveWikiButton/Template\",\n \"text\": \"$:/plugins/tiddlywiki/tiddlyweb/save/offline\"\n },\n \"$:/config/Server/ExternalFilters/[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]]\": {\n \"title\": \"$:/config/Server/ExternalFilters/[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]]\",\n \"text\": \"yes\"\n },\n \"$:/config/OfficialPluginLibrary\": {\n \"title\": \"$:/config/OfficialPluginLibrary\",\n \"tags\": \"$:/tags/PluginLibrary\",\n \"url\": \"https://tiddlywiki.com/library/v5.1.23/index.html\",\n \"caption\": \"{{$:/language/OfficialPluginLibrary}}\",\n \"enabled\": \"no\",\n \"text\": \"The official plugin library is disabled when using the client-server configuration. Instead, plugins should be installed via the `tiddlywiki.info` file, as described [[here|https://tiddlywiki.com/#Installing%20a%20plugin%20from%20the%20plugin%20library]].\"\n },\n \"$:/core/templates/css-tiddler\": {\n \"title\": \"$:/core/templates/css-tiddler\",\n \"text\": \"<!--\\n\\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields. This version includes the tiddler changecount as the field `revision`.\\n\\n-->`<style`<$fields template=' data-tiddler-$name$=\\\"$encoded_value$\\\"'></$fields>` data-tiddler-revision=\\\"`<<changecount>>`\\\" data-tiddler-bag=\\\"default\\\" type=\\\"text/css\\\">`<$view field=\\\"text\\\" format=\\\"text\\\" />`</style>`\"\n },\n \"$:/core/templates/html-div-skinny-tiddler\": {\n \"title\": \"$:/core/templates/html-div-skinny-tiddler\",\n \"text\": \"<!--\\n\\nThis template is a variant of the tiddlyweb plugin's overridden version of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\\n\\n-->`<div`<$fields exclude='text revision bag' template=' $name$=\\\"$encoded_value$\\\"'></$fields>` revision=\\\"`<<changecount>>`\\\" bag=\\\"default\\\" _is_skinny=\\\"\\\">\\n<pre></pre>\\n</div>`\\n\"\n },\n \"$:/core/templates/html-div-tiddler\": {\n \"title\": \"$:/core/templates/html-div-tiddler\",\n \"text\": \"<!--\\n\\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields. This version includes the tiddler changecount as the field `revision`.\\n\\n-->`<div`<$fields exclude='text revision bag' template=' $name$=\\\"$encoded_value$\\\"'></$fields>` revision=\\\"`<<changecount>>`\\\" bag=\\\"default\\\">\\n<pre>`<$view field=\\\"text\\\" format=\\\"htmlencoded\\\" />`</pre>\\n</div>`\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/icon/cloud\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/icon/cloud\",\n \"tags\": \"$:/tags/Image\",\n \"text\": \"<svg class=\\\"tc-image-cloud tc-image-button\\\" width=\\\"22pt\\\" height=\\\"22pt\\\" viewBox=\\\"0 0 128 128\\\"><g><path d=\\\"M24 103C10.745 103 0 92.255 0 79c0-9.697 5.75-18.05 14.027-21.836A24.787 24.787 0 0114 56c0-13.255 10.745-24 24-24 1.373 0 2.718.115 4.028.337C48.628 24.2 58.707 19 70 19c19.882 0 36 16.118 36 36v.082c12.319 1.016 22 11.336 22 23.918 0 12.239-9.16 22.337-20.999 23.814L107 103H24z\\\"/><path class=\\\"tc-image-cloud-idle\\\" d=\\\"M57.929 84.698a6 6 0 01-8.485 0L35.302 70.556a6 6 0 118.485-8.485l9.9 9.9L81.97 43.686a6 6 0 018.485 8.486L57.929 84.698z\\\"/><path class=\\\"tc-image-cloud-progress tc-animate-rotate-slow\\\" d=\\\"M44.8 40a3.6 3.6 0 100 7.2h2.06A23.922 23.922 0 0040 64c0 13.122 10.531 23.785 23.603 23.997L64 88l.001-7.2c-9.171 0-16.626-7.348-16.798-16.477L47.2 64c0-5.165 2.331-9.786 5.999-12.868L53.2 55.6a3.6 3.6 0 107.2 0v-12a3.6 3.6 0 00-3.6-3.6h-12zM64 40v7.2c9.278 0 16.8 7.522 16.8 16.8 0 5.166-2.332 9.787-6 12.869V72.4a3.6 3.6 0 10-7.2 0v12a3.6 3.6 0 003.6 3.6h12a3.6 3.6 0 100-7.2l-2.062.001A23.922 23.922 0 0088 64c0-13.255-10.745-24-24-24z\\\"/></g></svg>\"\n },\n \"$:/core/templates/javascript-tiddler\": {\n \"title\": \"$:/core/templates/javascript-tiddler\",\n \"text\": \"<!--\\n\\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. This version includes the tiddler changecount as the field `revision`.\\n\\n-->`<script`<$fields template=' data-tiddler-$name$=\\\"$encoded_value$\\\"'></$fields>` data-tiddler-revision=\\\"`<<changecount>>`\\\" data-tiddler-bag=\\\"default\\\" type=\\\"text/javascript\\\">`<$view field=\\\"text\\\" format=\\\"text\\\" />`</script>`\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/readme\",\n \"text\": \"This plugin runs in the browser to synchronise tiddler changes to and from a TiddlyWeb-compatible server (including TiddlyWiki 5 itself, running on Node.js). It is inert when run under Node.js. Disabling this plugin via the browser can not be undone via the browser since this plugin provides the mechanism to synchronize settings with the server.\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/tiddlyweb]]\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/readonly\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/readonly\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\define button-selector(title)\\nbutton.$title$, .tc-drop-down button.$title$, div.$title$\\n\\\\end\\n\\n\\\\define hide-edit-controls()\\n<$reveal state=\\\"$:/status/IsReadOnly\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"yes\\\">\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fclone>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fdelete>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fedit>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-here>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-journal-here>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fimport>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fmanager>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-image>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-journal>>`,`\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-tiddler>> `{\\n\\tdisplay: none;\\n}`\\n</$reveal>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n<<hide-edit-controls>>\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/save/offline\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/save/offline\",\n \"text\": \"\\\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\\n\\\\define saveTiddlerFilter()\\n[is[tiddler]] -[[$:/boot/boot.css]] -[[$:/HistoryList]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] -[prefix[$:/temp/]] +[sort[title]] $(publishFilter)$\\n\\\\end\\n{{$:/core/templates/tiddlywiki5.html}}\\n\"\n },\n \"$:/core/ui/Buttons/save-wiki\": {\n \"title\": \"$:/core/ui/Buttons/save-wiki\",\n \"tags\": \"$:/tags/PageControls\",\n \"caption\": \"{{$:/plugins/tiddlywiki/tiddlyweb/icon/cloud}} Server status\",\n \"description\": \"Status of synchronisation with server\",\n \"text\": \"\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/PageControlButtons/Visibility/$(listItem)$\\n\\\\end\\n<$button popup=<<qualify \\\"$:/state/popup/save-wiki\\\">> tooltip=\\\"Status of synchronisation with server\\\" aria-label=\\\"Server status\\\" class=<<tv-config-toolbar-class>> selectedClass=\\\"tc-selected\\\">\\n<span class=\\\"tc-dirty-indicator\\\">\\n<$list filter=\\\"[<tv-config-toolbar-icons>match[yes]]\\\">\\n{{$:/plugins/tiddlywiki/tiddlyweb/icon/cloud}}\\n</$list>\\n<$list filter=\\\"[<tv-config-toolbar-text>match[yes]]\\\">\\n<span class=\\\"tc-btn-text\\\"><$text text=\\\"Server status\\\"/></span>\\n</$list>\\n</span>\\n</$button>\\n<$reveal state=<<qualify \\\"$:/state/popup/save-wiki\\\">> type=\\\"popup\\\" position=\\\"below\\\" animate=\\\"yes\\\">\\n<div class=\\\"tc-drop-down\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/SyncerDropdown]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n<$transclude tiddler=<<listItem>>/>\\n</$list>\\n</div>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\nbody.tc-dirty span.tc-dirty-indicator svg {\\n\\ttransition: fill 250ms ease-in-out;\\n}\\n\\nbody .tc-image-cloud-idle {\\n\\tfill: <<colour background>>;\\n\\ttransition: opacity 250ms ease-in-out;\\n\\topacity: 1;\\n\\tdisplay: unset;\\n}\\n\\nbody.tc-dirty .tc-image-cloud-idle {\\n\\topacity: 0;\\n\\tdisplay: none;\\n}\\n\\nbody .tc-image-cloud-progress {\\n\\ttransition: opacity 250ms ease-in-out;\\n\\ttransform-origin: 50% 50%;\\n\\ttransform: rotate(359deg);\\n\\tanimation: animation-rotate-slow 2s infinite linear;\\n\\tfill: <<colour background>>;\\n\\tdisplay: none;\\n\\topacity: 0;\\n}\\n\\nbody.tc-dirty .tc-image-cloud-progress {\\n\\topacity: 1;\\n\\tdisplay: unset;\\n}\\n\\n@keyframes animation-rotate-slow {\\n\\tfrom {\\n\\t\\ttransform: rotate(0deg);\\n\\t}\\n\\tto {\\n\\t\\ttransform: scale(359deg);\\n\\t}\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/copy-logs\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/copy-logs\",\n \"tags\": \"$:/tags/SyncerDropdown\",\n \"text\": \"<$button message=\\\"tm-copy-syncer-logs-to-clipboard\\\" class=\\\"tc-btn-invisible\\\">\\n{{$:/core/images/copy-clipboard}} Copy syncer logs to clipboard\\n</$button>\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/login-status\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/login-status\",\n \"tags\": \"$:/tags/SyncerDropdown\",\n \"text\": \"<$reveal state=\\\"$:/status/IsLoggedIn\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n<div class=\\\"tc-drop-down-info\\\">\\nYou are logged in<$reveal state=\\\"$:/status/UserName\\\" type=\\\"nomatch\\\" text=\\\"\\\" default=\\\"\\\"> as <strong><$text text={{$:/status/UserName}}/></strong></$reveal><$reveal state=\\\"$:/status/IsReadOnly\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\"> (read-only)</$reveal>\\n</div>\\n<hr/>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/login\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/login\",\n \"tags\": \"$:/tags/SyncerDropdown\",\n \"text\": \"<$reveal state=\\\"$:/status/IsLoggedIn\\\" type=\\\"nomatch\\\" text=\\\"yes\\\">\\n<$button message=\\\"tm-login\\\" class=\\\"tc-btn-invisible\\\">\\n{{$:/core/images/unlocked-padlock}} Login\\n</$button>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/logout\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/logout\",\n \"tags\": \"$:/tags/SyncerDropdown\",\n \"text\": \"<$reveal state=\\\"$:/status/IsLoggedIn\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n<$button message=\\\"tm-logout\\\" class=\\\"tc-btn-invisible\\\">\\n{{$:/core/images/cancel-button}} Logout\\n</$button>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/refresh\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/refresh\",\n \"tags\": \"$:/tags/SyncerDropdown\",\n \"text\": \"<$reveal state=\\\"$:/status/IsLoggedIn\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n<$button tooltip=\\\"Get latest changes from the server\\\" aria-label=\\\"Refresh from server\\\" class=\\\"tc-btn-invisible\\\">\\n<$action-sendmessage $message=\\\"tm-server-refresh\\\"/>\\n{{$:/core/images/refresh-button}} <span clas]s=\\\"tc-btn-text\\\"><$text text=\\\"Get latest changes from the server\\\"/></span>\\n</$button>\\n</$reveal>\\n\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/save-snapshot\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/save-snapshot\",\n \"tags\": \"$:/tags/SyncerDropdown\",\n \"text\": \"<$button class=\\\"tc-btn-invisible\\\">\\n<$wikify name=\\\"site-title\\\" text={{$:/config/SaveWikiButton/Filename}}>\\n<$action-sendmessage $message=\\\"tm-download-file\\\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\\n</$wikify>\\n{{$:/core/images/download-button}} Save snapshot for offline use\\n</$button>\\n\"\n },\n \"$:/tags/SyncerDropdown\": {\n \"title\": \"$:/tags/SyncerDropdown\",\n \"list\": \"$:/plugins/tiddlywiki/tiddlyweb/syncer-actions/login-status $:/plugins/tiddlywiki/tiddlyweb/syncer-actions/login $:/plugins/tiddlywiki/tiddlyweb/syncer-actions/refresh $:/plugins/tiddlywiki/tiddlyweb/syncer-actions/logout $:/plugins/tiddlywiki/tiddlyweb/syncer-actions/save-snapshot $:/plugins/tiddlywiki/tiddlyweb/syncer-actions/copy-logs\"\n },\n \"$:/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js\": {\n \"title\": \"$:/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js\\ntype: application/javascript\\nmodule-type: syncadaptor\\n\\nA sync adaptor module for synchronising with TiddlyWeb compatible servers\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar CONFIG_HOST_TIDDLER = \\\"$:/config/tiddlyweb/host\\\",\\n\\tDEFAULT_HOST_TIDDLER = \\\"$protocol$//$host$/\\\";\\n\\nfunction TiddlyWebAdaptor(options) {\\n\\tthis.wiki = options.wiki;\\n\\tthis.host = this.getHost();\\n\\tthis.recipe = undefined;\\n\\tthis.hasStatus = false;\\n\\tthis.logger = new $tw.utils.Logger(\\\"TiddlyWebAdaptor\\\");\\n\\tthis.isLoggedIn = false;\\n\\tthis.isReadOnly = false;\\n}\\n\\nTiddlyWebAdaptor.prototype.name = \\\"tiddlyweb\\\";\\n\\nTiddlyWebAdaptor.prototype.supportsLazyLoading = true;\\n\\nTiddlyWebAdaptor.prototype.setLoggerSaveBuffer = function(loggerForSaving) {\\n\\tthis.logger.setSaveBuffer(loggerForSaving);\\n};\\n\\nTiddlyWebAdaptor.prototype.isReady = function() {\\n\\treturn this.hasStatus;\\n};\\n\\nTiddlyWebAdaptor.prototype.getHost = function() {\\n\\tvar text = this.wiki.getTiddlerText(CONFIG_HOST_TIDDLER,DEFAULT_HOST_TIDDLER),\\n\\t\\tsubstitutions = [\\n\\t\\t\\t{name: \\\"protocol\\\", value: document.location.protocol},\\n\\t\\t\\t{name: \\\"host\\\", value: document.location.host}\\n\\t\\t];\\n\\tfor(var t=0; t<substitutions.length; t++) {\\n\\t\\tvar s = substitutions[t];\\n\\t\\ttext = $tw.utils.replaceString(text,new RegExp(\\\"\\\\\\\\$\\\" + s.name + \\\"\\\\\\\\$\\\",\\\"mg\\\"),s.value);\\n\\t}\\n\\treturn text;\\n};\\n\\nTiddlyWebAdaptor.prototype.getTiddlerInfo = function(tiddler) {\\n\\treturn {\\n\\t\\tbag: tiddler.fields.bag\\n\\t};\\n};\\n\\nTiddlyWebAdaptor.prototype.getTiddlerRevision = function(title) {\\n\\tvar tiddler = this.wiki.getTiddler(title);\\n\\treturn tiddler.fields.revision;\\n};\\n\\n/*\\nGet the current status of the TiddlyWeb connection\\n*/\\nTiddlyWebAdaptor.prototype.getStatus = function(callback) {\\n\\t// Get status\\n\\tvar self = this;\\n\\tthis.logger.log(\\\"Getting status\\\");\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: this.host + \\\"status\\\",\\n\\t\\tcallback: function(err,data) {\\n\\t\\t\\tself.hasStatus = true;\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\t// Decode the status JSON\\n\\t\\t\\tvar json = null;\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tjson = JSON.parse(data);\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t}\\n\\t\\t\\tif(json) {\\n\\t\\t\\t\\tself.logger.log(\\\"Status:\\\",data);\\n\\t\\t\\t\\t// Record the recipe\\n\\t\\t\\t\\tif(json.space) {\\n\\t\\t\\t\\t\\tself.recipe = json.space.recipe;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Check if we're logged in\\n\\t\\t\\t\\tself.isLoggedIn = json.username !== \\\"GUEST\\\";\\n\\t\\t\\t\\tself.isReadOnly = !!json[\\\"read_only\\\"];\\n\\t\\t\\t\\tself.isAnonymous = !!json.anonymous;\\n\\t\\t\\t}\\n\\t\\t\\t// Invoke the callback if present\\n\\t\\t\\tif(callback) {\\n\\t\\t\\t\\tcallback(null,self.isLoggedIn,json.username,self.isReadOnly,self.isAnonymous);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nAttempt to login and invoke the callback(err)\\n*/\\nTiddlyWebAdaptor.prototype.login = function(username,password,callback) {\\n\\tvar options = {\\n\\t\\turl: this.host + \\\"challenge/tiddlywebplugins.tiddlyspace.cookie_form\\\",\\n\\t\\ttype: \\\"POST\\\",\\n\\t\\tdata: {\\n\\t\\t\\tuser: username,\\n\\t\\t\\tpassword: password,\\n\\t\\t\\ttiddlyweb_redirect: \\\"/status\\\" // workaround to marginalize automatic subsequent GET\\n\\t\\t},\\n\\t\\tcallback: function(err) {\\n\\t\\t\\tcallback(err);\\n\\t\\t}\\n\\t};\\n\\tthis.logger.log(\\\"Logging in:\\\",options);\\n\\t$tw.utils.httpRequest(options);\\n};\\n\\n/*\\n*/\\nTiddlyWebAdaptor.prototype.logout = function(callback) {\\n\\tvar options = {\\n\\t\\turl: this.host + \\\"logout\\\",\\n\\t\\ttype: \\\"POST\\\",\\n\\t\\tdata: {\\n\\t\\t\\tcsrf_token: this.getCsrfToken(),\\n\\t\\t\\ttiddlyweb_redirect: \\\"/status\\\" // workaround to marginalize automatic subsequent GET\\n\\t\\t},\\n\\t\\tcallback: function(err,data) {\\n\\t\\t\\tcallback(err);\\n\\t\\t}\\n\\t};\\n\\tthis.logger.log(\\\"Logging out:\\\",options);\\n\\t$tw.utils.httpRequest(options);\\n};\\n\\n/*\\nRetrieve the CSRF token from its cookie\\n*/\\nTiddlyWebAdaptor.prototype.getCsrfToken = function() {\\n\\tvar regex = /^(?:.*; )?csrf_token=([^(;|$)]*)(?:;|$)/,\\n\\t\\tmatch = regex.exec(document.cookie),\\n\\t\\tcsrf = null;\\n\\tif (match && (match.length === 2)) {\\n\\t\\tcsrf = match[1];\\n\\t}\\n\\treturn csrf;\\n};\\n\\n/*\\nGet an array of skinny tiddler fields from the server\\n*/\\nTiddlyWebAdaptor.prototype.getSkinnyTiddlers = function(callback) {\\n\\tvar self = this;\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: this.host + \\\"recipes/\\\" + this.recipe + \\\"/tiddlers.json\\\",\\n\\t\\tdata: {\\n\\t\\t\\tfilter: \\\"[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]]\\\"\\n\\t\\t},\\n\\t\\tcallback: function(err,data) {\\n\\t\\t\\t// Check for errors\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\t// Process the tiddlers to make sure the revision is a string\\n\\t\\t\\tvar tiddlers = JSON.parse(data);\\n\\t\\t\\tfor(var t=0; t<tiddlers.length; t++) {\\n\\t\\t\\t\\ttiddlers[t] = self.convertTiddlerFromTiddlyWebFormat(tiddlers[t]);\\n\\t\\t\\t}\\n\\t\\t\\t// Invoke the callback with the skinny tiddlers\\n\\t\\t\\tcallback(null,tiddlers);\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nSave a tiddler and invoke the callback with (err,adaptorInfo,revision)\\n*/\\nTiddlyWebAdaptor.prototype.saveTiddler = function(tiddler,callback) {\\n\\tvar self = this;\\n\\tif(this.isReadOnly) {\\n\\t\\treturn callback(null);\\n\\t}\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: this.host + \\\"recipes/\\\" + encodeURIComponent(this.recipe) + \\\"/tiddlers/\\\" + encodeURIComponent(tiddler.fields.title),\\n\\t\\ttype: \\\"PUT\\\",\\n\\t\\theaders: {\\n\\t\\t\\t\\\"Content-type\\\": \\\"application/json\\\"\\n\\t\\t},\\n\\t\\tdata: this.convertTiddlerToTiddlyWebFormat(tiddler),\\n\\t\\tcallback: function(err,data,request) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\t// Save the details of the new revision of the tiddler\\n\\t\\t\\tvar etagInfo = self.parseEtag(request.getResponseHeader(\\\"Etag\\\"));\\n\\t\\t\\t// Invoke the callback\\n\\t\\t\\tcallback(null,{\\n\\t\\t\\t\\tbag: etagInfo.bag\\n\\t\\t\\t}, etagInfo.revision);\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nLoad a tiddler and invoke the callback with (err,tiddlerFields)\\n*/\\nTiddlyWebAdaptor.prototype.loadTiddler = function(title,callback) {\\n\\tvar self = this;\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: this.host + \\\"recipes/\\\" + encodeURIComponent(this.recipe) + \\\"/tiddlers/\\\" + encodeURIComponent(title),\\n\\t\\tcallback: function(err,data,request) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\t// Invoke the callback\\n\\t\\t\\tcallback(null,self.convertTiddlerFromTiddlyWebFormat(JSON.parse(data)));\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nDelete a tiddler and invoke the callback with (err)\\noptions include:\\ntiddlerInfo: the syncer's tiddlerInfo for this tiddler\\n*/\\nTiddlyWebAdaptor.prototype.deleteTiddler = function(title,callback,options) {\\n\\tvar self = this;\\n\\tif(this.isReadOnly) {\\n\\t\\treturn callback(null);\\n\\t}\\n\\t// If we don't have a bag it means that the tiddler hasn't been seen by the server, so we don't need to delete it\\n\\tvar bag = options.tiddlerInfo.adaptorInfo && options.tiddlerInfo.adaptorInfo.bag;\\n\\tif(!bag) {\\n\\t\\treturn callback(null);\\n\\t}\\n\\t// Issue HTTP request to delete the tiddler\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: this.host + \\\"bags/\\\" + encodeURIComponent(bag) + \\\"/tiddlers/\\\" + encodeURIComponent(title),\\n\\t\\ttype: \\\"DELETE\\\",\\n\\t\\tcallback: function(err,data,request) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\t// Invoke the callback\\n\\t\\t\\tcallback(null);\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nConvert a tiddler to a field set suitable for PUTting to TiddlyWeb\\n*/\\nTiddlyWebAdaptor.prototype.convertTiddlerToTiddlyWebFormat = function(tiddler) {\\n\\tvar result = {},\\n\\t\\tknownFields = [\\n\\t\\t\\t\\\"bag\\\", \\\"created\\\", \\\"creator\\\", \\\"modified\\\", \\\"modifier\\\", \\\"permissions\\\", \\\"recipe\\\", \\\"revision\\\", \\\"tags\\\", \\\"text\\\", \\\"title\\\", \\\"type\\\", \\\"uri\\\"\\n\\t\\t];\\n\\tif(tiddler) {\\n\\t\\t$tw.utils.each(tiddler.fields,function(fieldValue,fieldName) {\\n\\t\\t\\tvar fieldString = fieldName === \\\"tags\\\" ?\\n\\t\\t\\t\\t\\t\\t\\t\\ttiddler.fields.tags :\\n\\t\\t\\t\\t\\t\\t\\t\\ttiddler.getFieldString(fieldName); // Tags must be passed as an array, not a string\\n\\n\\t\\t\\tif(knownFields.indexOf(fieldName) !== -1) {\\n\\t\\t\\t\\t// If it's a known field, just copy it across\\n\\t\\t\\t\\tresult[fieldName] = fieldString;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// If it's unknown, put it in the \\\"fields\\\" field\\n\\t\\t\\t\\tresult.fields = result.fields || {};\\n\\t\\t\\t\\tresult.fields[fieldName] = fieldString;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\t// Default the content type\\n\\tresult.type = result.type || \\\"text/vnd.tiddlywiki\\\";\\n\\treturn JSON.stringify(result,null,$tw.config.preferences.jsonSpaces);\\n};\\n\\n/*\\nConvert a field set in TiddlyWeb format into ordinary TiddlyWiki5 format\\n*/\\nTiddlyWebAdaptor.prototype.convertTiddlerFromTiddlyWebFormat = function(tiddlerFields) {\\n\\tvar self = this,\\n\\t\\tresult = {};\\n\\t// Transfer the fields, pulling down the `fields` hashmap\\n\\t$tw.utils.each(tiddlerFields,function(element,title,object) {\\n\\t\\tif(title === \\\"fields\\\") {\\n\\t\\t\\t$tw.utils.each(element,function(element,subTitle,object) {\\n\\t\\t\\t\\tresult[subTitle] = element;\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tresult[title] = tiddlerFields[title];\\n\\t\\t}\\n\\t});\\n\\t// Make sure the revision is expressed as a string\\n\\tif(typeof result.revision === \\\"number\\\") {\\n\\t\\tresult.revision = result.revision.toString();\\n\\t}\\n\\t// Some unholy freaking of content types\\n\\tif(result.type === \\\"text/javascript\\\") {\\n\\t\\tresult.type = \\\"application/javascript\\\";\\n\\t} else if(!result.type || result.type === \\\"None\\\") {\\n\\t\\tresult.type = \\\"text/x-tiddlywiki\\\";\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nSplit a TiddlyWeb Etag into its constituent parts. For example:\\n\\n```\\n\\\"system-images_public/unsyncedIcon/946151:9f11c278ccde3a3149f339f4a1db80dd4369fc04\\\"\\n```\\n\\nNote that the value includes the opening and closing double quotes.\\n\\nThe parts are:\\n\\n```\\n<bag>/<title>/<revision>:<hash>\\n```\\n*/\\nTiddlyWebAdaptor.prototype.parseEtag = function(etag) {\\n\\tvar firstSlash = etag.indexOf(\\\"/\\\"),\\n\\t\\tlastSlash = etag.lastIndexOf(\\\"/\\\"),\\n\\t\\tcolon = etag.lastIndexOf(\\\":\\\");\\n\\tif(firstSlash === -1 || lastSlash === -1 || colon === -1) {\\n\\t\\treturn null;\\n\\t} else {\\n\\t\\treturn {\\n\\t\\t\\tbag: decodeURIComponent(etag.substring(1,firstSlash)),\\n\\t\\t\\ttitle: decodeURIComponent(etag.substring(firstSlash + 1,lastSlash)),\\n\\t\\t\\trevision: etag.substring(lastSlash + 1,colon)\\n\\t\\t};\\n\\t}\\n};\\n\\nif($tw.browser && document.location.protocol.substr(0,4) === \\\"http\\\" ) {\\n\\texports.adaptorClass = TiddlyWebAdaptor;\\n}\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"syncadaptor\"\n }\n }\n}"},"$:/plugins/tiddlywiki/translators":{"title":"$:/plugins/tiddlywiki/translators","name":"Translators","description":"Translation editing tools","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/Translators\": {\n \"title\": \"$:/Translators\",\n \"text\": \"\\\\define allTheTranslatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/]] [all[tiddlers+shadows]prefix[$:/config/NewJournal/]] [[GettingStarted]] [[$:/SiteTitle]] [[$:/SiteSubtitle]] \\n[[$:/core/readme]] +[sort[title]]\\n\\\\end\\n\\\\define allTheTranslatedTiddlerTitles()\\n[all[tiddlers]prefix[$:/language/]] [all[tiddlers]prefix[$:/config/NewJournal/]] [[GettingStarted]is[tiddler]] [[$:/SiteTitle]is[tiddler]] [[$:/SiteSubtitle]is[tiddler]] \\n[[$:/core/readme]is[tiddler]] +[sort[title]]\\n\\\\end\\n\\\\define allTheNotTranslatedTiddlerTitles()\\n[all[tiddlers+shadows]!is[tiddler]prefix[$:/language/]] [all[tiddlers+shadows]!is[tiddler]prefix[$:/config/NewJournal/]] [[GettingStarted]!is[tiddler]] [[$:/SiteTitle]!is[tiddler]] [[$:/SiteSubtitle]!is[tiddler]] \\n[[$:/core/readme]!is[tiddler]] +[sort[title]]\\n\\\\end\\n\\nNumber of translated tiddlers: <$count filter=<<allTheTranslatedTiddlerTitles>>/> of <$count filter=<<allTheTranslatableTiddlerTitles>>/>\\n\\n{{$:/core/ui/PageTemplate/pagecontrols}}\\n\\n<<tabs \\\"[all[tiddlers+shadows]tag[$:/tags/TranslationGroup]sort[caption]]\\\" \\\"$:/plugins/tiddlywiki/translators/ui/group/Miscellaneous\\\" \\\"$:/state/translatorsTab\\\" \\\"tc-vertical\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/macros/translatableStringEditor\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/macros/translatableStringEditor\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define translatableStringEditorInner(tiddlerTitle)\\n<tr>\\n<td width=\\\"250px\\\">\\n<$link><$list filter=<<shortenTitle>>><$text text=<<currentTiddler>>/></$list></$link>\\n</td>\\n<td>\\n<$list filter=\\\"\\\"\\\"$(editFieldsFilter)$\\\"\\\"\\\" variable=\\\"editorField\\\">\\n<$edit-text tag=\\\"$(editorTagName)$\\\" field=<<editorField>> type=\\\"text\\\" class=\\\"tc-edit-texteditor\\\" minHeight=\\\"10px\\\"/>\\n</$list>\\n</td>\\n<td width=\\\"20px\\\">\\n<div class=\\\"tc-drop-down-wrapper\\\">\\n<$button class=\\\"tc-btn-invisible\\\" popup=<<qualify \\\"$:/state/popup/translationInfo/$tiddlerTitle$\\\">>>\\n{{$:/core/images/down-arrow}}\\n</$button>\\n<$reveal state=<<qualify \\\"$:/state/popup/translationInfo/$tiddlerTitle$\\\">> type=\\\"popup\\\" position=\\\"belowleft\\\" positionAllowNegative=\\\"yes\\\" text=\\\"\\\" default=\\\"\\\">\\n<div class=\\\"tc-drop-down\\\">\\n<p>\\nOriginal en-GB text:\\n</p>\\n<$list filter=\\\"\\\"\\\"$(editFieldsFilter)$\\\"\\\"\\\" variable=\\\"editorField\\\">\\n<p>\\n<textarea class=\\\"tc-edit-texteditor\\\" readonly><$view tiddler=\\\"$:/core\\\" subtiddler=<<currentTiddler>> field=<<editorField>>/>\\n</textarea>\\n</p>\\n</$list>\\n<p>\\n<$button message=\\\"tm-delete-tiddler\\\" param=<<currentTiddler>>>\\nDelete translation\\n</$button>\\n</p>\\n</div>\\n</$reveal>\\n</div>\\n</td>\\n</tr>\\n\\\\end\\n\\n\\\\define translatableStringEditorWrapperAll(tiddlerTitle)\\n<<translatableStringEditorInner \\\"$tiddlerTitle$\\\">>\\n\\\\end\\n\\n\\\\define translatableStringEditorWrapperTranslated(tiddlerTitle)\\n<$list filter=\\\"[all[current]is[tiddler]]\\\">\\n<<translatableStringEditorInner \\\"$tiddlerTitle$\\\">>\\n</$list>\\n\\\\end\\n\\n\\\\define translatableStringEditorWrapperNotTranslated(tiddlerTitle)\\n<$list filter=\\\"[all[current]!is[tiddler]]\\\">\\n<<translatableStringEditorInner \\\"$tiddlerTitle$\\\">>\\n</$list>\\n\\\\end\\n\\n\\\\define translatableStringEditorOuter()\\n<div class=\\\"tc-translators-string-table\\\">\\n\\n//<$count filter=<<translatableTiddlerTitles>>/> translatable tiddlers in this group//\\n\\n<$radio tiddler=\\\"$:/plugins/tiddlywiki/translators/editorTag\\\" value=\\\"textarea\\\"> Multi-line editors</$radio><br>\\n<$radio tiddler=\\\"$:/plugins/tiddlywiki/translators/editorTag\\\" value=\\\"input\\\"> Single-line editors</$radio>\\n\\n<$select tiddler=\\\"$:/plugins/tiddlywiki/translators/editorView\\\">\\n<option value=\\\"translatableStringEditorWrapperAll\\\">Show all strings</option>\\n<option value=\\\"translatableStringEditorWrapperTranslated\\\">Only show translated strings</option>\\n<option value=\\\"translatableStringEditorWrapperNotTranslated\\\">Only show strings that have not been translated</option>\\n</$select>\\n\\n<table>\\n<tbody>\\n<tr>\\n<th>\\nTitle\\n</th>\\n<th>\\nFields: $(editFieldsFilter)$\\n</th>\\n<th>\\n \\n</th>\\n</tr>\\n<$set name=\\\"editorView\\\" value={{$:/plugins/tiddlywiki/translators/editorView}}>\\n<$list filter=<<translatableTiddlerTitles>>>\\n<$macrocall $name=<<editorView>> tiddlerTitle=<<currentTiddler>>/>\\n</$list>\\n</$set>\\n</tbody>\\n</table>\\n\\\\end\\n\\n\\\\define translatableStringEditor(editorTag:\\\"input\\\",editorFields:\\\"text\\\")\\n<$set name=\\\"editorTagName\\\" value={{$:/plugins/tiddlywiki/translators/editorTag}}>\\n<$set name=\\\"editFieldsFilter\\\" value=\\\"\\\"\\\"$editorFields$\\\"\\\"\\\">\\n<<translatableStringEditorOuter>>\\n</$set>\\n</$set>\\n\\\\end\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Buttons.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Buttons.multids\",\n \"text\": \"{{$:/language/Buttons/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/ControlPanel.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/ControlPanel.multids\",\n \"text\": \"{{$:/language/ControlPanel/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/CoreReadMe.tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/CoreReadMe.tid\",\n \"text\": \"{{$:/core/readme||$:/plugins/tiddlywiki/translators/templates/tid}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Dates.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Dates.multids\",\n \"text\": \"{{[prefix[$:/language/Date/]] [prefix[$:/language/RelativeDate/]]||$:/plugins/tiddlywiki/translators/templates/filtered-multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/EditTemplate.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/EditTemplate.multids\",\n \"text\": \"{{$:/language/EditTemplate/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Exporters.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Exporters.multids\",\n \"text\": \"{{$:/language/Exporters/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Fields.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Fields.multids\",\n \"text\": \"{{$:/language/Docs/Fields/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Filters.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Filters.multids\",\n \"text\": \"{{$:/language/Filters/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/GettingStarted.tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/GettingStarted.tid\",\n \"text\": \"{{GettingStarted||$:/plugins/tiddlywiki/translators/templates/tid}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Import.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Import.multids\",\n \"text\": \"{{$:/language/Import/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Misc.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Misc.multids\",\n \"text\": \"{{[all[tiddlers]prefix[$:/language/]]\\n-[all[tiddlers]prefix[$:/language/Buttons/]]\\n-[all[tiddlers]prefix[$:/language/ControlPanel/]]\\n-[all[tiddlers]prefix[$:/language/Date/]]\\n-[all[tiddlers]prefix[$:/language/Docs/]]\\n-[all[tiddlers]prefix[$:/language/EditTemplate/]]\\n-[all[tiddlers]prefix[$:/language/Exporters/]]\\n-[all[tiddlers]prefix[$:/language/Filters/]]\\n-[all[tiddlers]prefix[$:/language/Help/]]\\n-[all[tiddlers]prefix[$:/language/Import/]]\\n-[all[tiddlers]prefix[$:/language/Modals/]]\\n-[all[tiddlers]prefix[$:/language/Notifications/]]\\n-[all[tiddlers]prefix[$:/language/RelativeDate/]]\\n-[all[tiddlers]prefix[$:/language/Search/]]\\n-[all[tiddlers]prefix[$:/language/SideBar/]]\\n-[all[tiddlers]prefix[$:/language/Snippets/]]\\n-[all[tiddlers]prefix[$:/language/ThemeTweaks/]]\\n-[all[tiddlers]prefix[$:/language/TiddlerInfo/]]\\n+[sort[title]]||$:/plugins/tiddlywiki/translators/templates/filtered-multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/ModuleTypes.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/ModuleTypes.multids\",\n \"text\": \"{{$:/language/Docs/ModuleTypes/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/NewJournal.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/NewJournal.multids\",\n \"text\": \"{{$:/config/NewJournal/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Notifications.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Notifications.multids\",\n \"text\": \"{{$:/language/Notifications/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/PaletteColours.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/PaletteColours.multids\",\n \"text\": \"{{$:/language/Docs/PaletteColours/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/Search.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/Search.multids\",\n \"text\": \"{{$:/language/Search/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/SideBar.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/SideBar.multids\",\n \"text\": \"{{$:/language/SideBar/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/SiteSubtitle.tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/SiteSubtitle.tid\",\n \"text\": \"{{$:/SiteSubtitle||$:/plugins/tiddlywiki/translators/templates/tid}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/SiteTitle.tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/SiteTitle.tid\",\n \"text\": \"{{$:/SiteTitle||$:/plugins/tiddlywiki/translators/templates/tid}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/ThemeTweaks.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/ThemeTweaks.multids\",\n \"text\": \"{{$:/language/ThemeTweaks/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/TiddlerInfo.multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/TiddlerInfo.multids\",\n \"text\": \"{{$:/language/TiddlerInfo/||$:/plugins/tiddlywiki/translators/templates/multids}}\"\n },\n \"$:/plugins/tiddlywiki/translators/palette\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/palette\",\n \"name\": \"Translators Colour Palette\",\n \"description\": \"A palette for the translators edition\",\n \"tags\": \"$:/tags/Palette\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"text\": \"alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: <<colour muted-foreground>>\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #ff0000\\ndownload-background: #34c734\\ndownload-foreground: <<colour background>>\\ndragger-background: <<colour foreground>>\\ndragger-foreground: <<colour background>>\\ndropdown-background: <<colour background>>\\ndropdown-border: <<colour muted-foreground>>\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: rgba(0,200,0,0.7)\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nforeground: #333333\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: <<colour foreground>>\\nmodal-background: <<colour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #bbb\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #b9ceb8\\npre-background: #f5f5f5\\npre-border: #cccccc\\nprimary: #5778d8\\nsidebar-button-foreground: <<colour foreground>>\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: #aaaaaa\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #ececec\\nsidebar-tab-background: <<colour tab-background>>\\nsidebar-tab-border-selected: <<colour tab-border-selected>>\\nsidebar-tab-border: <<colour tab-border>>\\nsidebar-tab-divider: #e4e4e4\\nsidebar-tab-foreground-selected: \\nsidebar-tab-foreground: <<colour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: #444444\\nsidebar-tiddler-link-foreground: #999999\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #d8d8d8\\ntab-border-selected: #d8d8d8\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: <<colour tab-foreground>>\\ntab-foreground: #666666\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #d5ad34\\ntag-foreground: #ffffff\\ntiddler-background: <<colour background>>\\ntiddler-border: <<colour background>>\\ntiddler-controls-foreground-hover: #888888\\ntiddler-controls-foreground-selected: #444444\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: #f8f8f8\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: <<colour background>>\\ntiddler-link-foreground: <<colour primary>>\\ntiddler-subtitle-foreground: #c0c0c0\\ntiddler-title-foreground: #182955\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/readme\",\n \"text\": \"This plugin exposes a new system tiddler [[$:/Translators]] that presents a user interface for creating and maintaining translations. It is used to build the special [[translators edition|https://tiddlywiki.com/editions/translators]].\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/translators]]\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/styles\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \".tc-translators-string-table table {\\n\\twidth: 100%;\\n}\\n\\n.tc-translators-string-table .tc-btn-invisible {\\n\\twidth: 1em;\\n\\theight: 2em;\\n}\\n\\n.tc-translators-string-table .tc-drop-down {\\n\\tmin-width: 500px;\\n}\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/filtered-multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/filtered-multids\",\n \"text\": \"\\\\define generateMultids(filter)\\ntitle: $:/language/\\n\\n<$list filter=\\\"\\\"\\\"$filter$\\\"\\\"\\\"><$list filter=\\\"[is[current]removeprefix[$:/language/]]\\\"><$text text=<<currentTiddler>>/></$list>: <$text text={{!!text}}/>\\n</$list>\\n\\\\end\\n<$macrocall $name=\\\"generateMultids\\\" filter=<<currentTiddler>>/>\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/help-tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/help-tid\",\n \"text\": \"\\\\define generateTid(title)\\ntitle: $:/language/Help/$title$\\ndescription: <$text text={{$:/language/Help/$title$!!description}}/>\\n\\n<$text text={{$:/language/Help/$title$}}/>\\n\\\\end\\n<$macrocall $name=\\\"generateTid\\\" title=<<currentTiddler>>/>\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/modal-tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/modal-tid\",\n \"text\": \"\\\\define generateTid(title)\\ntitle: $:/language/Modals/$title$\\ntype: <$text text={{$:/language/Modals/$title$!!type}}/>\\nsubtitle: <$text text={{$:/language/Modals/$title$!!subtitle}}/>\\nfooter: <$text text={{$:/language/Modals/$title$!!footer}}/>\\nhelp: <$text text={{$:/language/Modals/$title$!!help}}/>\\n\\n<$text text={{$:/language/Modals/$title$}}/>\\n\\\\end\\n<$macrocall $name=\\\"generateTid\\\" title=<<currentTiddler>>/>\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/multids\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/multids\",\n \"text\": \"\\\\define generateMultids(prefix)\\ntitle: $prefix$\\n\\n<$list filter=\\\"[prefix[$prefix$]sort[title]]\\\"><$list filter=\\\"[is[current]removeprefix[$prefix$]]\\\"><$text text=<<currentTiddler>>/></$list>: <$text text={{!!text}}/>\\n</$list>\\n\\\\end\\n<$macrocall $name=\\\"generateMultids\\\" prefix=<<currentTiddler>>/>\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/snippet-tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/snippet-tid\",\n \"text\": \"\\\\define generateTid(title)\\ntitle: $:/language/Snippets/$title$\\ntags: $:/tags/TextEditor/Snippet\\ncaption: <$text text={{$:/language/Snippets/$title$!!caption}}/>\\n\\n<$text text={{$:/language/Snippets/$title$}}/>\\n\\\\end\\n<$macrocall $name=\\\"generateTid\\\" title=<<currentTiddler>>/>\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/tid\",\n \"text\": \"\\\\define generateTid(title)\\ntitle: $title$\\n\\n<$list filter=\\\"\\\"\\\"[[$title$]is[tiddler]]\\\"\\\"\\\"><$text text={{$title$}}/></$list>\\n\\\\end\\n<$macrocall $name=\\\"generateTid\\\" title=<<currentTiddler>>/>\"\n },\n \"$:/plugins/tiddlywiki/translators/templates/type-tid\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/templates/type-tid\",\n \"text\": \"\\\\define generateTid(title)\\ntitle: $:/language/Docs/Types/$title$\\ndescription: <$text text={{$:/language/Docs/Types/$title$!!description}}/>\\nname: <$text text={{$:/language/Docs/Types/$title$!!name}}/>\\ngroup: <$text text={{$:/language/Docs/Types/$title$!!group}}/>\\n\\n\\\\end\\n<$macrocall $name=\\\"generateTid\\\" title=<<currentTiddler>>/>\"\n },\n \"$:/plugins/tiddlywiki/translators/editorTag\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/editorTag\",\n \"text\": \"textarea\"\n },\n \"$:/plugins/tiddlywiki/translators/editorView\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/editorView\",\n \"text\": \"translatableStringEditorWrapperAll\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Buttons\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Buttons\",\n \"caption\": \"Buttons\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/Buttons/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Buttons/]]\\n\\\\end\\n\\n! Buttons\\n\\nToolbar buttons. The ''/Caption'' tiddlers specify the text to be displayed on the button and the ''/Hint'' tiddlers specify the tooltip text.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/ControlPanel\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/ControlPanel\",\n \"caption\": \"Control Panel\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/ControlPanel/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/ControlPanel/]]\\n\\\\end\\n\\n! Control Panel\\n\\n[[Control Panel|$:/ControlPanel]].\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Date\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Date\",\n \"caption\": \"Date\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/Date/]]\\n[all[tiddlers+shadows]prefix[$:/language/RelativeDate/]]\\n+[sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Date/]] [all[current]removeprefix[$:/language/RelativeDate/]]\\n\\\\end\\n\\n! Date\\n\\nAbsolute and relative dates.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/EditTemplate\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/EditTemplate\",\n \"caption\": \"Edit Template\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/EditTemplate/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/EditTemplate/]]\\n\\\\end\\n\\n! Edit Template\\n\\nStrings used in the tiddler edit template.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Docs/Fields\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Docs/Fields\",\n \"caption\": \"Fields\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[shadows+tiddlers]prefix[$:/language/Docs/Fields/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Docs/Fields/]]\\n\\\\end\\n\\n! Fields\\n\\nDescriptions of commonly used fields.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Filters\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Filters\",\n \"caption\": \"Filters\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/Filters/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Filters/]]\\n\\\\end\\n\\n! Filters\\n\\nTranslatable titles of the preconfigured filters available in [[advanced search|$:/AdvancedSearch]].\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/GettingStarted\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/GettingStarted\",\n \"caption\": \"Getting Started\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\nGettingStarted\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]]\\n\\\\end\\n\\n! Getting Started\\n\\nThe GettingStarted tiddler that is displayed when an empty ~TiddlyWiki starts.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Help\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Help\",\n \"caption\": \"Help\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/Help/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Help/]]\\n\\\\end\\n\\n! Help\\n\\nHelp text for the ~TiddlyWiki commands available under Node.js.\\n\\n<<translatableStringEditor editorFields:\\\"text description\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Import\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Import\",\n \"caption\": \"Import\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/Import/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Import/]]\\n\\\\end\\n\\n! Import\\n\\nImport mechanism.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Miscellaneous\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Miscellaneous\",\n \"caption\": \"Miscellaneous\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/]]\\n-[all[tiddlers+shadows]prefix[$:/language/Buttons/]]\\n-[all[tiddlers+shadows]prefix[$:/language/ControlPanel/]]\\n-[all[tiddlers+shadows]prefix[$:/language/Date/]]\\n-[all[tiddlers+shadows]prefix[$:/language/Docs/]]\\n-[all[tiddlers+shadows]prefix[$:/language/EditTemplate/]]\\n-[all[tiddlers+shadows]prefix[$:/language/Filters/]]\\n-[all[tiddlers+shadows]prefix[$:/language/Help/]]\\n-[all[tiddlers+shadows]prefix[$:/language/Import/]]\\n-[all[tiddlers+shadows]prefix[$:/language/RelativeDate/]]\\n-[all[tiddlers+shadows]prefix[$:/language/Search/]]\\n-[all[tiddlers+shadows]prefix[$:/language/SideBar/]]\\n-[all[tiddlers+shadows]prefix[$:/language/Snippets/]]\\n-[all[tiddlers+shadows]prefix[$:/language/ThemeTweaks/]]\\n-[all[tiddlers+shadows]prefix[$:/language/TiddlerInfo/]]\\n[all[tiddlers+shadows]prefix[$:/config/NewJournal/]]\\n[[$:/SiteTitle]]\\n[[$:/SiteSubtitle]]\\n[[$:/core/readme]]\\n+[sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/]] [all[current]removeprefix[$:/config/]] [all[current]!prefix[$:/language/]!prefix[$:/config/]]\\n\\\\end\\n\\n! Miscellaneous\\n\\nMiscellaneous translatable strings.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Docs/ModuleTypes\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Docs/ModuleTypes\",\n \"caption\": \"Module Types\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[shadows+tiddlers]prefix[$:/language/Docs/ModuleTypes/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Docs/ModuleTypes/]]\\n\\\\end\\n\\n! Module Types\\n\\nModule types. This is technical information that is probably not required in most translations.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Docs/PaletteColours\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Docs/PaletteColours\",\n \"caption\": \"Palette Colours\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[shadows+tiddlers]prefix[$:/language/Docs/PaletteColours/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Docs/PaletteColours/]]\\n\\\\end\\n\\n! Palette Colours\\n\\nPalette colours.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Search\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Search\",\n \"caption\": \"Search\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/Search/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Search/]]\\n\\\\end\\n\\n! Search\\n\\nSearch-related translatable strings.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/SideBar\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/SideBar\",\n \"caption\": \"Sidebar\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/SideBar/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/SideBar/]]\\n\\\\end\\n\\n! Sidebar\\n\\nSidebar-related translatable strings.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Snippets\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Snippets\",\n \"caption\": \"Snippets\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/Snippets/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Snippets/]]\\n\\\\end\\n\\n! Snippets\\n\\nText snippets for use by the stamp text editor toolbar button.\\n\\n<<translatableStringEditor editorFields:\\\"caption text\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/ThemeTweaks\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/ThemeTweaks\",\n \"caption\": \"Theme Tweaks\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/ThemeTweaks/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/ThemeTweaks/]]\\n\\\\end\\n\\n! Theme Tweaks\\n\\nStrings used in the theme tweaks for Vanilla.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/TiddlerInfo\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/TiddlerInfo\",\n \"caption\": \"Tiddler Info\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[tiddlers+shadows]prefix[$:/language/TiddlerInfo/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/TiddlerInfo/]]\\n\\\\end\\n\\n! Tiddler Info\\n\\nTiddler info panel.\\n\\n<<translatableStringEditor>>\\n\"\n },\n \"$:/plugins/tiddlywiki/translators/ui/group/Docs/Types\": {\n \"title\": \"$:/plugins/tiddlywiki/translators/ui/group/Docs/Types\",\n \"caption\": \"Types\",\n \"tags\": \"$:/tags/TranslationGroup\",\n \"text\": \"\\\\define translatableTiddlerTitles()\\n[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]sort[title]]\\n\\\\end\\n\\\\define shortenTitle()\\n[all[current]removeprefix[$:/language/Docs/Types/]]\\n\\\\end\\n\\n! Types\\n\\nDescriptions for each content type (as appears in the type dropdown in the tiddler editor).\\n\\n<<translatableStringEditor editorFields:\\\"description group\\\">>\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/tw2parser":{"title":"$:/plugins/tiddlywiki/tw2parser","name":"TW2 Parser","description":"TiddlyWiki Classic parser","author":"Jeffrey Wilkinson","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/core/ui/ViewTemplate/classic\": {\n \"title\": \"$:/core/ui/ViewTemplate/classic\",\n \"tags\": \"$:/tags/ViewTemplate $:/tags/EditTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\n\\n\"\n },\n \"$:/core/modules/widgets/classictransclude.js\": {\n \"title\": \"$:/core/modules/widgets/classictransclude.js\",\n \"text\": \"/*\\\\\\ntitle: $:/core/modules/widgets/classictransclude.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nTransclude widget\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\nvar sliceSeparator = \\\"::\\\";\\nvar sectionSeparator = \\\"##\\\";\\n\\nfunction getsectionname(title) {\\n\\tif(!title)\\n\\t\\treturn \\\"\\\";\\n\\tvar pos = title.indexOf(sectionSeparator);\\n\\tif(pos != -1) {\\n\\t\\treturn title.substr(pos + sectionSeparator.length);\\n\\t}\\n\\treturn \\\"\\\";\\n}\\nfunction getslicename(title) { \\n\\tif(!title)\\n\\t\\treturn \\\"\\\";\\n\\tvar pos = title.indexOf(sliceSeparator);\\n\\tif(pos != -1) {\\n\\t\\treturn title.substr(pos + sliceSeparator.length);\\n\\t}\\n\\treturn \\\"\\\";\\n};\\nfunction gettiddlername(title) {\\n\\tif(!title)\\n\\t\\treturn \\\"\\\";\\n\\tvar pos = title.indexOf(sectionSeparator);\\n\\n\\tif(pos != -1) {\\n\\t\\treturn title.substr(0,pos);\\n\\t}\\n\\tpos = title.indexOf(sliceSeparator);\\n\\tif(pos != -1) {\\n\\t\\treturn title.substr(0,pos);\\n\\t}\\n\\treturn title;\\n}\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n\\nvar TranscludeWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nTranscludeWidget.prototype = new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nTranscludeWidget.prototype.execute = function() {\\n\\t// Get our parameters\\n\\tthis.rawTitle = this.getAttribute(\\\"tiddler\\\",this.getVariable(\\\"currentTiddler\\\"));\\n\\tthis.transcludeTitle = gettiddlername(this.rawTitle);\\n\\tthis.section = getsectionname(this.rawTitle);\\n\\tthis.slice = getslicename(this.rawTitle);\\n\\t// Check for recursion\\n\\tvar recursionMarker = this.makeRecursionMarker();\\n\\tif(this.parentWidget && this.parentWidget.hasVariable(\\\"transclusion\\\",recursionMarker)) {\\n\\t\\tthis.makeChildWidgets([{type: \\\"text\\\", text: $tw.language.getString(\\\"Error/RecursiveTransclusion\\\")}]);\\n\\t\\treturn;\\n\\t}\\n\\t// Check for correct type\\n\\tvar existingTiddler = this.wiki.getTiddler(this.transcludeTitle);\\n\\t// Check if we're dealing with a classic tiddler\\n\\tif(existingTiddler && existingTiddler.hasField(\\\"type\\\") && existingTiddler.fields.type !== \\\"text/x-tiddlywiki\\\") {\\n\\t\\tthis.makeChildWidgets([{type: \\\"text\\\", text: \\\"Tiddler not of type 'text/x-tiddlywiki'\\\"}]);\\n\\t\\treturn;\\n\\t}\\n\\tif(existingTiddler && !existingTiddler.hasField(\\\"type\\\")) {\\n\\t\\tthis.makeChildWidgets([{type: \\\"text\\\", text: \\\"Tiddler not of type 'text/x-tiddlywiki'\\\"}]);\\n\\t\\treturn;\\n\\t}\\t\\t\\n\\t// Set context variables for recursion detection\\n\\tthis.setVariable(\\\"transclusion\\\",recursionMarker);\\n\\t// Parse \\n\\tvar text = this.wiki.getTiddlerText(this.transcludeTitle);\\n\\tif (!!this.section||!!this.slice) {\\n\\t\\ttext =this.refineTiddlerText(text, this.section, this.slice);\\n\\t}\\n\\n\\tthis.options ={};\\n\\tthis.options.parseAsInline = false;\\n\\tvar parser = this.wiki.parseText(\\\"text/x-tiddlywiki\\\",text,{});\\n\\tvar\\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(parseTreeNodes);\\n};\\n/*\\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\\n*/\\nTranscludeWidget.prototype.makeRecursionMarker = function() {\\n\\tvar output = [];\\n\\toutput.push(\\\"{\\\");\\n\\toutput.push(this.getVariable(\\\"currentTiddler\\\",{defaultValue: \\\"\\\"}));\\n\\toutput.push(\\\"|\\\");\\n\\toutput.push(this.transcludeTitle || \\\"\\\");\\n\\toutput.push(\\\"|\\\");\\n\\toutput.push(this.transcludeField || \\\"\\\");\\n\\toutput.push(\\\"|\\\");\\n\\toutput.push(this.transcludeIndex || \\\"\\\");\\n\\toutput.push(\\\"|\\\");\\n\\toutput.push(this.section || \\\"\\\");\\n\\toutput.push(\\\"|\\\");\\n\\toutput.push(this.slice || \\\"\\\");\\n\\toutput.push(\\\"}\\\");\\n\\treturn output.join(\\\"\\\");\\n};\\n\\nTranscludeWidget.prototype.slicesRE = /(?:^([\\\\'\\\\/]{0,2})~?([\\\\.\\\\w]+)\\\\:\\\\1[\\\\t\\\\x20]*([^\\\\n]*)[\\\\t\\\\x20]*$)|(?:^\\\\|([\\\\'\\\\/]{0,2})~?([\\\\.\\\\w]+)\\\\:?\\\\4\\\\|[\\\\t\\\\x20]*([^\\\\|\\\\n]*)[\\\\t\\\\x20]*\\\\|$)/gm;\\n\\nTranscludeWidget.prototype.calcAllSlices = function(text)\\n{\\n\\tvar slices = {};\\n\\tthis.slicesRE.lastIndex = 0;\\n\\tvar m = this.slicesRE.exec(text);\\n\\twhile(m) {\\n\\t\\tif(m[2])\\n\\t\\t\\tslices[m[2]] = m[3];\\n\\t\\telse\\n\\t\\t\\tslices[m[5]] = m[6];\\n\\t\\tm = this.slicesRE.exec(text);\\n\\t}\\n\\treturn slices;\\n};\\n\\n// Returns the slice of text of the given name\\nTranscludeWidget.prototype.getTextSlice = function(text,sliceName)\\n{\\n\\treturn (this.calcAllSlices(text))[sliceName];\\n};\\n\\nTranscludeWidget.prototype.refineTiddlerText = function(text,section,slice)\\n{\\n\\tvar textsection = null;\\n\\tif (slice) {\\n\\t\\tvar textslice = this.getTextSlice(text,slice);\\n\\t\\tif(textslice)\\n\\t\\t\\treturn textslice;\\n\\t}\\n\\tif(!section)\\n\\t\\treturn text;\\n\\tvar re = new RegExp(\\\"(^!{1,6}[ \\\\t]*\\\" + $tw.utils.escapeRegExp(section) + \\\"[ \\\\t]*\\\\n)\\\",\\\"mg\\\");\\n\\tre.lastIndex = 0;\\n\\tvar match = re.exec(text);\\n\\tif(match) {\\n\\t\\tvar t = text.substr(match.index+match[1].length);\\n\\t\\tvar re2 = /^!/mg;\\n\\t\\tre2.lastIndex = 0;\\n\\t\\tmatch = re2.exec(t); //# search for the next heading\\n\\t\\tif(match)\\n\\t\\t\\tt = t.substr(0,match.index-1);//# don't include final \\\\n\\n\\t\\treturn t;\\n\\t}\\n\\treturn \\\"\\\";\\n}\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(changedAttributes.tiddler ||changedTiddlers[this.transcludeTitle]) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\t\\t\\n\\t}\\n};\\n\\nexports.classictransclude = TranscludeWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/macros/tiddlywiki/entry.js\": {\n \"title\": \"$:/macros/tiddlywiki/entry.js\",\n \"text\": \"/*\\\\\\ntitle: $:/macros/tiddlywiki/entry.js\\ntype: application/javascript\\nmodule-type: macro\\n\\\\*/\\n(function(){\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n/*\\nInformation about this macro\\nreturns value of key in a data json tiddler\\nnote that macros are not connected with the refresh mechanism -use with caution.\\n*/\\nexports.name = \\\"entryof\\\";\\n\\nexports.params = [\\n\\t{ name: \\\"key\\\" }, { name: \\\"map\\\" }\\n];\\n/*\\nRun the macro\\n*/\\nexports.run = function(key,map) {\\n\\ttry{\\n\\t\\treturn JSON.parse(map)[key];\\n\\t} catch(e) {\\n\\t\\treturn \\\"\\\";\\n\\t}\\n}\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"macro\"\n },\n \"$:/plugins/tiddlywiki/tw2parser/image-css\": {\n \"title\": \"$:/plugins/tiddlywiki/tw2parser/image-css\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"type\": \"text/plain\",\n \"text\": \".classic-image-left{\\n float: left;\\n}\\n\\n.classic-image-right{\\n float: right;\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/tw2parser/macrodefs\": {\n \"title\": \"$:/plugins/tiddlywiki/tw2parser/macrodefs\",\n \"text\": \"\\\\define tiddler(tiddler)\\n<$classictransclude tiddler = \\\"$tiddler$\\\"/>\\n\\\\end\\n\\n\\\\define slider(chkUniqueCookieName tiddler label tooltip)\\n<span title=$tooltip$><$button popup=\\\"$chkUniqueCookieName$\\\" class=\\\"tc-btn-invisible tc-slider\\\">$label$</$button>\\n<$reveal type=\\\"nomatch\\\" text=\\\"\\\" default=\\\"\\\" state=\\\"$chkUniqueCookieName$\\\" animate=\\\"yes\\\">\\n<$classictransclude tiddler = \\\"$tiddler$\\\"/>\\n</$reveal></span>\\n\\\\end\\n\\n\\\\define __system_tabinstance(state, currentTab, prompts, labels)\\n\\t\\t<span title=<<entryof \\\"$currentTab$\\\" \\\"\\\"\\\"$prompts$\\\"\\\"\\\">> ><$button set=<<qualify \\\"$state$\\\">> setTo=\\\"$currentTab$\\\" selectedClass=\\\"tc-tab-selected\\\">\\n\\t\\t<<entryof \\\"$currentTab$\\\" \\\"\\\"\\\"$labels$\\\"\\\"\\\" >>\\n\\t\\t</$button></span>\\n\\\\end\\n\\n\\\\define __system_tabs(tabsList,prompts,labels,state:\\\"$:/state/tab\\\")\\n<div class=\\\"tc-tab-buttons\\\">\\n\\t<$list filter=\\\"$tabsList$\\\" variable=\\\"currentTab\\\">\\n\\t\\t<$macrocall $name=\\\"__system_tabinstance\\\" state=\\\"$state$\\\" prompts=\\\"\\\"\\\"$prompts$\\\"\\\"\\\" labels=\\\"\\\"\\\"$labels$\\\"\\\"\\\" currentTab=<<currentTab>>/>\\n\\t</$list>\\n</div>\\n<div class=\\\"tc-tab-divider\\\"/>\\n<div class=\\\"tc-tab-content\\\">\\n\\t<$list filter=\\\"$tabsList$\\\" variable=\\\"currentTab\\\">\\n\\t\\t<$reveal type=\\\"match\\\" state=<<qualify \\\"$state$\\\">> text=<<currentTab>> default=\\\"$default$\\\">\\n\\t\\t\\t<$classictransclude tiddler=<<currentTab>> />\\n\\t\\t</$reveal>\\n\\t</$list>\\n</div>\\n\\\\end\\n\"\n },\n \"$:/macros/classic/macroadapter.js\": {\n \"title\": \"$:/macros/classic/macroadapter.js\",\n \"text\": \"/*\\\\\\ntitle: $:/macros/classic/macroadapter.js\\ntype: application/javascript\\nmodule-type: module\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n/*\\nInformation about this module:\\nrename macros and\\nre-jig macro params from tw2 to tw5 style\\nnew macros created as a result of adapting tw2 should be \\nprepended \\\"__system\\\" to distinguish them from the actual used name\\n*/\\nvar sliceSeparator = \\\"::\\\";\\nvar sectionSeparator = \\\"##\\\";\\n\\nfunction getsectionname(title) {\\n\\tif(!title)\\n\\t\\treturn \\\"\\\";\\n\\tvar pos = title.indexOf(sectionSeparator);\\n\\tif(pos != -1) {\\n\\t\\treturn title.substr(pos + sectionSeparator.length);\\n\\t}\\n\\treturn \\\"\\\";\\n}\\nfunction getslicename(title) { \\n\\tif(!title)\\n\\t\\treturn \\\"\\\";\\n\\tvar pos = title.indexOf(sliceSeparator);\\n\\tif(pos != -1) {\\n\\t\\treturn title.substr(pos + sliceSeparator.length);\\n\\t}\\n\\treturn \\\"\\\";\\n};\\nfunction gettiddlername(title) {\\n\\tif(!title)\\n\\t\\treturn \\\"\\\";\\n\\tvar pos = title.indexOf(sectionSeparator);\\n\\n\\tif(pos != -1) {\\n\\t\\treturn title.substr(0,pos);\\n\\t}\\n\\tpos = title.indexOf(sliceSeparator);\\n\\tif(pos != -1) {\\n\\t\\treturn title.substr(0,pos);\\n\\t}\\n\\treturn title;\\n}\\n\\nvar parserparams = function(paramString) {\\n\\tvar params = [],\\n\\t\\treParam = /\\\\s*(?:([A-Za-z0-9\\\\-_]+)\\\\s*:)?(?:\\\\s*(?:\\\"\\\"\\\"([\\\\s\\\\S]*?)\\\"\\\"\\\"|\\\"([^\\\"]*)\\\"|'([^']*)'|\\\\[\\\\[([^\\\\]]*)\\\\]\\\\]|([^\\\"'\\\\s]+)))/mg,\\n\\t\\tparamMatch = reParam.exec(paramString);\\n\\twhile(paramMatch) {\\n\\t\\t// Process this parameter\\n\\t\\tvar paramInfo = {\\n\\t\\t\\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\\n\\t\\t};\\n\\t\\tif(paramMatch[1]) {\\n\\t\\t\\tparamInfo.name = paramMatch[1];\\n\\t\\t}\\n\\t\\tparams.push(paramInfo);\\n\\t\\t// Find the next match\\n\\t\\tparamMatch = reParam.exec(paramString);\\n\\t}\\n\\treturn params;\\n}\\nvar tabshandler = function(paramstring) {\\n\\tvar params = parserparams(paramstring);\\n\\tvar cookie = params[0].value;\\n\\tvar numTabs = (params.length-1)/3;\\n\\tvar t;\\n\\tvar tabslist = \\\"\\\";\\n\\tvar labelarray = {};\\n var promptarray = {};\\n\\tfor(t=0; t<numTabs; t++) {\\n\\t\\tvar contentName = params[t*3+3].value;\\n\\t\\ttabslist = tabslist+\\\" \\\" + contentName;\\n\\t\\tlabelarray[contentName] = params[t*3+1].value;\\n\\t\\tpromptarray[contentName] = params[t*3+2].value;\\n\\t} \\n\\t//Create a list of names (tiddlers, tiddler/sections, tiddler/slices), and create maps from name -> label and name -> prompt\\n\\t//Use json to implement maps \\n\\treturn '\\\"\\\"\\\"'+tabslist +'\\\"\\\"\\\" \\\"\\\"\\\"'+JSON.stringify(promptarray)+'\\\"\\\"\\\" \\\"\\\"\\\"'+JSON.stringify(labelarray)+'\\\"\\\"\\\" \\\"\\\"\\\"'+cookie+'\\\"\\\"\\\"';\\n};\\nvar namedapter = {tabs:'__system_tabs'};\\nvar paramadapter = {\\n\\ttabs: tabshandler\\n}\\nexports.name = 'macroadapter';\\nexports.namedapter = namedapter;\\nexports.paramadapter = paramadapter;\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"module\"\n },\n \"$:/plugins/tiddlywiki/tw2parser/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/tw2parser/readme\",\n \"text\": \"This experimental plugin provides support for parsing and rendering tiddlers written in TiddlyWiki Classic format (`text/x-tiddlywiki`).\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/tw2parser]]\\n\"\n },\n \"$:/plugins/tiddlywiki/tw2parser/wikitextparser.js\": {\n \"title\": \"$:/plugins/tiddlywiki/tw2parser/wikitextparser.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/tw2parser/wikitextparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nParses a block of tiddlywiki-format wiki text into a parse tree object. This is a transliterated version of the old TiddlyWiki code. The plan is to replace it with a new, mostly backwards compatible parser built in PEGJS.\\n\\nA wikitext parse tree is an array of objects with a `type` field that can be `text`,`macro` or the name of an HTML element.\\n\\nText nodes are represented as `{type: \\\"text\\\", value: \\\"A string of text\\\"}`.\\n\\nMacro nodes look like this:\\n`\\n{type: \\\"macro\\\", name: \\\"view\\\", params: {\\n\\tone: {type: \\\"eval\\\", value: \\\"2+2\\\"},\\n\\ttwo: {type: \\\"string\\\", value: \\\"twenty two\\\"}\\n}}\\n`\\nHTML nodes look like this:\\n`\\n{type: \\\"div\\\", attributes: {\\n\\tsrc: \\\"one\\\"\\n\\tstyles: {\\n\\t\\t\\\"background-color\\\": \\\"#fff\\\",\\n\\t\\t\\\"color\\\": \\\"#000\\\"\\n\\t}\\n}}\\n`\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n/*\\nCreates a new instance of the wiki text parser with the specified options. The\\noptions are a hashmap of mandatory members as follows:\\n\\n\\twiki: The wiki object to use to parse any cascaded content (eg transclusion)\\n\\nPlanned:\\n\\n\\tenableRules: An array of names of wiki text rules to enable. If not specified, all rules are available\\n\\textraRules: An array of additional rule handlers to add\\n\\tenableMacros: An array of names of macros to enable. If not specified, all macros are available\\n\\textraMacros: An array of additional macro handlers to add\\n*/\\n\\nvar WikiTextParser = function(type,text,options) {\\n\\tthis.wiki = options.wiki;\\n\\tthis.autoLinkWikiWords = true;\\n\\tthis.installRules();\\n\\ttext = text || \\\"no text\\\";\\n\\tthis.source = text;\\n\\tthis.nextMatch = 0;\\n\\tthis.children = [];\\n\\tthis.tree =[];\\n\\tthis.output = null;\\n\\tthis.subWikify(this.children);\\n\\t// prepend tw2 macros locally to the content\\n\\tvar parser = this.wiki.parseTiddler(\\\"$:/plugins/tiddlywiki/tw2parser/macrodefs\\\",{parseAsInline:false});\\n\\tthis.tree = [{\\n\\t\\ttype: \\\"element\\\",\\n\\t\\ttag: \\\"div\\\",\\n\\t\\tchildren:this.children\\n\\t}];\\n\\t// clone the output of parser \\n\\tvar root = JSON.parse(JSON.stringify(parser.tree));\\n\\t// macros are defined in a linear tree; walk down the tree and append the source's parsed content \\n\\tvar baseroot = root;\\n\\twhile (root[0] && root[0].children && root[0].children.length !== 0 ){ \\n\\t\\troot = root[0].children;\\n\\t}\\n\\troot[0].children[0] = this.tree[0];\\n\\tthis.tree = baseroot;\\n};\\n\\n\\nWikiTextParser.prototype.installRules = function() {\\n\\tvar rules = require(\\\"./wikitextrules.js\\\").rules,\\n\\t\\tpattern = [];\\n\\tfor(var n=0; n<rules.length; n++) {\\n\\t\\tpattern.push(\\\"(\\\" + rules[n].match + \\\")\\\");\\n\\t}\\n\\tthis.rules = rules;\\n\\tthis.rulesRegExp = new RegExp(pattern.join(\\\"|\\\"),\\\"mg\\\");\\n};\\n\\n\\nWikiTextParser.prototype.outputText = function(place,startPos,endPos) {\\n\\tif(startPos < endPos) {\\n\\t\\tplace.push({type: \\\"text\\\",text:this.source.substring(startPos,endPos)});\\n\\t}\\n};\\n\\nWikiTextParser.prototype.subWikify = function(output,terminator) {\\n\\t// Handle the terminated and unterminated cases separately, this speeds up wikifikation by about 30%\\n\\tif(terminator)\\n\\t\\tthis.subWikifyTerm(output,new RegExp(\\\"(\\\" + terminator + \\\")\\\",\\\"mg\\\"));\\n\\telse\\n\\t\\tthis.subWikifyUnterm(output);\\n};\\n\\nWikiTextParser.prototype.subWikifyUnterm = function(output) {\\n\\t// subWikify can be indirectly recursive, so we need to save the old output pointer\\n\\tvar oldOutput = this.output;\\n\\tthis.output = output;\\n\\t// Get the first match\\n\\tthis.rulesRegExp.lastIndex = this.nextMatch;\\n\\tvar ruleMatch = this.rulesRegExp.exec(this.source);\\n\\twhile(ruleMatch) {\\n\\t\\t// Output any text before the match\\n\\t\\tif(ruleMatch.index > this.nextMatch)\\n\\t\\t\\tthis.outputText(this.output,this.nextMatch,ruleMatch.index);\\n\\t\\t// Set the match parameters for the handler\\n\\t\\tthis.matchStart = ruleMatch.index;\\n\\t\\tthis.matchLength = ruleMatch[0].length;\\n\\t\\tthis.matchText = ruleMatch[0];\\n\\t\\tthis.nextMatch = this.rulesRegExp.lastIndex;\\n\\t\\t// Figure out which rule matched and call its handler\\n\\t\\tvar t;\\n\\t\\tfor(t=1; t<ruleMatch.length; t++) {\\n\\t\\t\\tif(ruleMatch[t]) {\\n\\t\\t\\t\\tthis.rules[t-1].handler(this);\\n\\t\\t\\t\\tthis.rulesRegExp.lastIndex = this.nextMatch;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Get the next match\\n\\t\\truleMatch = this.rulesRegExp.exec(this.source);\\n\\t}\\n\\t// Output any text after the last match\\n\\tif(this.nextMatch < this.source.length) {\\n\\t\\tthis.outputText(this.output,this.nextMatch,this.source.length);\\n\\t\\tthis.nextMatch = this.source.length;\\n\\t}\\n\\t// Restore the output pointer\\n\\tthis.output = oldOutput;\\n};\\n\\nWikiTextParser.prototype.subWikifyTerm = function(output,terminatorRegExp) {\\n\\t// subWikify can be indirectly recursive, so we need to save the old output pointer\\n\\tvar oldOutput = this.output;\\n\\tthis.output = output;\\n\\t// Get the first matches for the rule and terminator RegExps\\n\\tterminatorRegExp.lastIndex = this.nextMatch;\\n\\tvar terminatorMatch = terminatorRegExp.exec(this.source);\\n\\tthis.rulesRegExp.lastIndex = this.nextMatch;\\n\\tvar ruleMatch = this.rulesRegExp.exec(terminatorMatch ? this.source.substr(0,terminatorMatch.index) : this.source);\\n\\twhile(terminatorMatch || ruleMatch) {\\n\\t\\t// Check for a terminator match before the next rule match\\n\\t\\tif(terminatorMatch && (!ruleMatch || terminatorMatch.index <= ruleMatch.index)) {\\n\\t\\t\\t// Output any text before the match\\n\\t\\t\\tif(terminatorMatch.index > this.nextMatch)\\n\\t\\t\\t\\tthis.outputText(this.output,this.nextMatch,terminatorMatch.index);\\n\\t\\t\\t// Set the match parameters\\n\\t\\t\\tthis.matchText = terminatorMatch[1];\\n\\t\\t\\tthis.matchLength = terminatorMatch[1].length;\\n\\t\\t\\tthis.matchStart = terminatorMatch.index;\\n\\t\\t\\tthis.nextMatch = this.matchStart + this.matchLength;\\n\\t\\t\\t// Restore the output pointer\\n\\t\\t\\tthis.output = oldOutput;\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t// It must be a rule match; output any text before the match\\n\\t\\tif(ruleMatch.index > this.nextMatch)\\n\\t\\t\\tthis.outputText(this.output,this.nextMatch,ruleMatch.index);\\n\\t\\t// Set the match parameters\\n\\t\\tthis.matchStart = ruleMatch.index;\\n\\t\\tthis.matchLength = ruleMatch[0].length;\\n\\t\\tthis.matchText = ruleMatch[0];\\n\\t\\tthis.nextMatch = this.rulesRegExp.lastIndex;\\n\\t\\t// Figure out which rule matched and call its handler\\n\\t\\tvar t;\\n\\t\\tfor(t=1; t<ruleMatch.length; t++) {\\n\\t\\t\\tif(ruleMatch[t]) {\\n\\t\\t\\t\\tthis.rules[t-1].handler(this);\\n\\t\\t\\t\\tthis.rulesRegExp.lastIndex = this.nextMatch;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Get the next match\\n\\t\\tterminatorRegExp.lastIndex = this.nextMatch;\\n\\t\\tterminatorMatch = terminatorRegExp.exec(this.source);\\n\\t\\truleMatch = this.rulesRegExp.exec(terminatorMatch ? this.source.substr(0,terminatorMatch.index) : this.source);\\n\\t}\\n\\t// Output any text after the last match\\n\\tif(this.nextMatch < this.source.length) {\\n\\t\\tthis.outputText(this.output,this.nextMatch,this.source.length);\\n\\t\\tthis.nextMatch = this.source.length;\\n\\t}\\n\\t// Restore the output pointer\\n\\tthis.output = oldOutput;\\n};\\n\\nexports[\\\"text/x-tiddlywiki\\\"] = WikiTextParser;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"parser\"\n },\n \"$:/plugins/tiddlywiki/tw2parser/wikitextrules.js\": {\n \"title\": \"$:/plugins/tiddlywiki/tw2parser/wikitextrules.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/tw2parser/wikitextrules.js\\ntype: application/javascript\\nmodule-type: module\\n\\nRule modules for the wikitext parser\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\nvar macroadapter = require(\\\"$:/macros/classic/macroadapter.js\\\");\\nvar textPrimitives = {\\n\\tupperLetter: \\\"[A-Z\\\\u00c0-\\\\u00de\\\\u0150\\\\u0170]\\\",\\n\\tlowerLetter: \\\"[a-z0-9_\\\\\\\\-\\\\u00df-\\\\u00ff\\\\u0151\\\\u0171]\\\",\\n\\tanyLetter: \\\"[A-Za-z0-9_\\\\\\\\-\\\\u00c0-\\\\u00de\\\\u00df-\\\\u00ff\\\\u0150\\\\u0170\\\\u0151\\\\u0171]\\\",\\n\\tanyLetterStrict: \\\"[A-Za-z0-9\\\\u00c0-\\\\u00de\\\\u00df-\\\\u00ff\\\\u0150\\\\u0170\\\\u0151\\\\u0171]\\\",\\n\\tsliceSeparator: \\\"::\\\",\\n\\tsectionSeparator: \\\"##\\\",\\n\\turlPattern: \\\"(?:file|http|https|mailto|ftp|irc|news|data):[^\\\\\\\\s'\\\\\\\"]+(?:/|\\\\\\\\b)\\\",\\n\\tunWikiLink: \\\"~\\\",\\n\\tbrackettedLink: \\\"\\\\\\\\[\\\\\\\\[([^\\\\\\\\]]+)\\\\\\\\]\\\\\\\\]\\\",\\n\\ttitledBrackettedLink: \\\"\\\\\\\\[\\\\\\\\[([^\\\\\\\\[\\\\\\\\]\\\\\\\\|]+)\\\\\\\\|([^\\\\\\\\[\\\\\\\\]\\\\\\\\|]+)\\\\\\\\]\\\\\\\\]\\\"\\n};\\n\\ntextPrimitives.wikiLink = \\\"(?:(?:\\\" + textPrimitives.upperLetter + \\\"+\\\" +\\n\\t\\t\\t\\t\\t\\t\\ttextPrimitives.lowerLetter + \\\"+\\\" +\\n\\t\\t\\t\\t\\t\\t\\ttextPrimitives.upperLetter +\\n\\t\\t\\t\\t\\t\\t\\ttextPrimitives.anyLetter + \\\"*)|(?:\\\" +\\n\\t\\t\\t\\t\\t\\t\\ttextPrimitives.upperLetter + \\\"{2,}\\\" +\\n\\t\\t\\t\\t\\t\\t\\ttextPrimitives.lowerLetter + \\\"+))\\\";\\n\\ntextPrimitives.cssLookahead = \\\"(?:(\\\" + textPrimitives.anyLetter +\\n\\t\\\"+)\\\\\\\\(([^\\\\\\\\)\\\\\\\\|\\\\\\\\n]+)(?:\\\\\\\\):))|(?:(\\\" + textPrimitives.anyLetter + \\\"+):([^;\\\\\\\\|\\\\\\\\n]+);)\\\";\\n\\ntextPrimitives.cssLookaheadRegExp = new RegExp(textPrimitives.cssLookahead,\\\"mg\\\");\\n\\ntextPrimitives.tiddlerForcedLinkRegExp = new RegExp(\\\"(?:\\\" + textPrimitives.titledBrackettedLink + \\\")|(?:\\\" +\\n\\ttextPrimitives.brackettedLink + \\\")|(?:\\\" +\\n\\ttextPrimitives.urlPattern + \\\")\\\",\\\"mg\\\");\\n\\ntextPrimitives.tiddlerAnyLinkRegExp = new RegExp(\\\"(\\\"+ textPrimitives.wikiLink + \\\")|(?:\\\" +\\n\\ttextPrimitives.titledBrackettedLink + \\\")|(?:\\\" +\\n\\ttextPrimitives.brackettedLink + \\\")|(?:\\\" +\\n\\ttextPrimitives.urlPattern + \\\")\\\",\\\"mg\\\");\\n\\n// Helper to add an attribute to an HTML node\\nvar setAttr = function(node,attr,value) {\\n\\tif(!node.attributes) {\\n\\t\\tnode.attributes = {};\\n\\t}\\n\\tnode.attributes[attr] ={type: \\\"string\\\", value:value} ;\\n};\\n\\nvar inlineCssHelper = function(w) {\\n\\tvar styles = [];\\n\\ttextPrimitives.cssLookaheadRegExp.lastIndex = w.nextMatch;\\n\\tvar lookaheadMatch = textPrimitives.cssLookaheadRegExp.exec(w.source);\\n\\twhile(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\\n\\t\\tvar s,v;\\n\\t\\tif(lookaheadMatch[1]) {\\n\\t\\t\\ts = lookaheadMatch[1];\\n\\t\\t\\tv = lookaheadMatch[2];\\n\\t\\t} else {\\n\\t\\t\\ts = lookaheadMatch[3];\\n\\t\\t\\tv = lookaheadMatch[4];\\n\\t\\t}\\n\\t\\tif(s==\\\"bgcolor\\\")\\n\\t\\t\\ts = \\\"backgroundColor\\\";\\n\\t\\tif(s==\\\"float\\\")\\n\\t\\t\\ts = \\\"cssFloat\\\";\\n\\t\\tstyles.push({style: s, value: v});\\n\\t\\tw.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\\n\\t\\ttextPrimitives.cssLookaheadRegExp.lastIndex = w.nextMatch;\\n\\t\\tlookaheadMatch = textPrimitives.cssLookaheadRegExp.exec(w.source);\\n\\t}\\n\\treturn styles;\\n};\\n\\nvar applyCssHelper = function(e,styles) {\\n\\n\\tif(styles.length > 0) {\\n\\n\\t\\tfor(var t=0; t< styles.length; t++) {\\n\\t\\t\\t$tw.utils.addStyleToParseTreeNode(e,$tw.utils.roundTripPropertyName(styles[t].style),styles[t].value);\\n\\t\\t}\\n\\t}\\n\\t\\n};\\n\\nvar enclosedTextHelper = function(w) {\\n\\tthis.lookaheadRegExp.lastIndex = w.matchStart;\\n\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\tvar text = lookaheadMatch[1];\\n\\t\\tw.output.push({type:\\\"element\\\",tag:this.element,\\n\\t\\t\\tchildren:[{type: \\\"text\\\",text: lookaheadMatch[1]}]});\\n\\t\\tw.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\\n\\t}\\n};\\n\\nvar insertMacroCall = function(w,output,macroName,paramString) {\\n\\tvar params = [],\\n\\t\\treParam = /\\\\s*(?:([A-Za-z0-9\\\\-_]+)\\\\s*:)?(?:\\\\s*(?:\\\"\\\"\\\"([\\\\s\\\\S]*?)\\\"\\\"\\\"|\\\"([^\\\"]*)\\\"|'([^']*)'|\\\\[\\\\[([^\\\\]]*)\\\\]\\\\]|([^\\\"'\\\\s]+)))/mg,\\n\\t\\tparamMatch = reParam.exec(paramString);\\n\\twhile(paramMatch) {\\n\\t\\t// Process this parameter\\n\\t\\tvar paramInfo = {\\n\\t\\t\\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\\n\\t\\t};\\n\\t\\tif(paramMatch[1]) {\\n\\t\\t\\tparamInfo.name = paramMatch[1];\\n\\t\\t}\\n\\t\\tparams.push(paramInfo);\\n\\t\\t// Find the next match\\n\\t\\tparamMatch = reParam.exec(paramString);\\n\\t}\\n\\toutput.push({\\n\\t\\ttype: \\\"macrocall\\\",\\n\\t\\tname: macroName,\\n\\t\\tparams: params,\\n\\t\\tisBlock: false\\n\\t});\\n}\\n\\n\\nvar isLinkExternal = function(to) {\\n\\tvar externalRegExp = /(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\\\s'\\\"]+(?:\\\\/|\\\\b)/i;\\n\\treturn externalRegExp.test(to);\\n};\\nvar rules = [\\n{\\n\\tname: \\\"table\\\",\\n\\tmatch: \\\"^\\\\\\\\|(?:[^\\\\\\\\n]*)\\\\\\\\|(?:[fhck]?)$\\\",\\n\\tlookaheadRegExp: /^\\\\|([^\\\\n]*)\\\\|([fhck]?)$/mg,\\n\\trowTermRegExp: /(\\\\|(?:[fhck]?)$\\\\n?)/mg,\\n\\tcellRegExp: /(?:\\\\|([^\\\\n\\\\|]*)\\\\|)|(\\\\|[fhck]?$\\\\n?)/mg,\\n\\tcellTermRegExp: /((?:\\\\x20*)\\\\|)/mg,\\n\\trowTypes: {\\\"c\\\":\\\"caption\\\", \\\"h\\\":\\\"thead\\\", \\\"\\\":\\\"tbody\\\", \\\"f\\\":\\\"tfoot\\\"},\\n\\thandler: function(w)\\n\\t{\\n\\t\\tvar table = {type:\\\"element\\\",tag:\\\"table\\\",attributes: {\\\"class\\\": {type: \\\"string\\\", value:\\\"table\\\"}},\\n\\t\\t\\t\\t\\tchildren: []};\\n\\t\\t\\n\\t\\tw.output.push(table);\\n\\t\\tvar prevColumns = [];\\n\\t\\tvar currRowType = null;\\n\\t\\tvar rowContainer;\\n\\t\\tvar rowCount = 0;\\n\\t\\tw.nextMatch = w.matchStart;\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\twhile(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\\n\\t\\t\\tvar nextRowType = lookaheadMatch[2];\\n\\t\\t\\tif(nextRowType == \\\"k\\\") {\\n\\t\\t\\t\\ttable.attributes[\\\"class\\\"] = lookaheadMatch[1];\\n\\t\\t\\t\\tw.nextMatch += lookaheadMatch[0].length+1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif(nextRowType != currRowType) {\\n\\t\\t\\t\\t\\trowContainer = {type:\\\"element\\\",tag:this.rowTypes[nextRowType],children: []};\\n\\t\\t\\t\\t\\ttable.children.push(rowContainer);\\n\\t\\t\\t\\t\\tcurrRowType = nextRowType;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(currRowType == \\\"c\\\") {\\n\\t\\t\\t\\t\\t// Caption\\n\\t\\t\\t\\t\\tw.nextMatch++;\\n\\t\\t\\t\\t\\t// Move the caption to the first row if it isn't already\\n\\t\\t\\t\\t\\tif(table.children.length !== 1) {\\n\\t\\t\\t\\t\\t\\ttable.children.pop(); // Take rowContainer out of the children array\\n\\t\\t\\t\\t\\t\\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\trowContainer.attributes={};\\n\\t\\t\\t\\t\\trowContainer.attributes.align = rowCount === 0 ? \\\"top\\\" : \\\"bottom\\\";\\n\\t\\t\\t\\t\\tw.subWikifyTerm(rowContainer.children,this.rowTermRegExp);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tvar theRow = {type:\\\"element\\\",tag:\\\"tr\\\",\\n\\t\\t\\t\\t\\t\\tattributes: {\\\"class\\\": {type: \\\"string\\\", value:rowCount%2 ? \\\"oddRow\\\" : \\\"evenRow\\\"}},\\n\\t\\t\\t\\t\\t\\tchildren: []};\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\trowContainer.children.push(theRow);\\n\\t\\t\\t\\t\\tthis.rowHandler(w,theRow.children,prevColumns);\\n\\t\\t\\t\\t\\trowCount++;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\\n\\t\\t\\tlookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\t}\\n\\t},\\n\\trowHandler: function(w,e,prevColumns)\\n\\t{\\n\\t\\tvar col = 0;\\n\\t\\tvar colSpanCount = 1;\\n\\t\\tvar prevCell = null;\\n\\t\\tthis.cellRegExp.lastIndex = w.nextMatch;\\n\\t\\tvar cellMatch = this.cellRegExp.exec(w.source);\\n\\t\\twhile(cellMatch && cellMatch.index == w.nextMatch) {\\n\\t\\t\\tif(cellMatch[1] == \\\"~\\\") {\\n\\t\\t\\t\\t// Rowspan\\n\\t\\t\\t\\tvar last = prevColumns[col];\\n\\t\\t\\tif(last) {\\n\\t\\t\\t\\tlast.rowSpanCount++;\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(last.element,\\\"rowspan\\\",last.rowSpanCount);\\n\\t\\t\\t\\tvar vAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\\\"valign\\\",\\\"center\\\");\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(last.element,\\\"valign\\\",vAlign);\\n\\t\\t\\t\\tif(colSpanCount > 1) {\\n\\t\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(last.element,\\\"colspan\\\",colSpanCount);\\n\\t\\t\\t\\t\\tcolSpanCount = 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t\\tw.nextMatch = this.cellRegExp.lastIndex-1;\\n\\t\\t\\t} else if(cellMatch[1] == \\\">\\\") {\\n\\t\\t\\t\\t// Colspan\\n\\t\\t\\t\\tcolSpanCount++;\\n\\t\\t\\t\\tw.nextMatch = this.cellRegExp.lastIndex-1;\\n\\t\\t\\t} else if(cellMatch[2]) {\\n\\t\\t\\t\\t// End of row\\n\\t\\t\\t\\tif(prevCell && colSpanCount > 1) {\\n\\t\\t\\t\\t\\tprevCell.attributes.colspan = colSpanCount;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tw.nextMatch = this.cellRegExp.lastIndex;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Cell\\n\\t\\t\\t\\tw.nextMatch++;\\n\\t\\t\\t\\tvar styles = inlineCssHelper(w);\\n\\t\\t\\t\\tvar spaceLeft = false;\\n\\t\\t\\t\\tvar chr = w.source.substr(w.nextMatch,1);\\n\\t\\t\\t\\twhile(chr == \\\" \\\") {\\n\\t\\t\\t\\t\\tspaceLeft = true;\\n\\t\\t\\t\\t\\tw.nextMatch++;\\n\\t\\t\\t\\t\\tchr = w.source.substr(w.nextMatch,1);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar cell;\\n\\t\\t\\t\\tif(chr == \\\"!\\\") {\\n\\t\\t\\t\\t\\tcell = {type:\\\"element\\\",tag:\\\"th\\\",children: []};\\n\\t\\t\\t\\t\\te.push(cell);\\n\\t\\t\\t\\t\\tw.nextMatch++;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tcell = {type:\\\"element\\\",tag:\\\"td\\\",children: []};\\n\\t\\t\\t\\t\\te.push(cell);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tprevCell = cell;\\n\\t\\t\\t\\tprevColumns[col] = {rowSpanCount:1,element:cell};\\n\\t\\t\\t\\tif(colSpanCount > 1) {\\n\\t\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(cell,\\\"colspan\\\",colSpanCount);\\n\\t\\t\\t\\t\\tcolSpanCount = 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tapplyCssHelper(cell,styles);\\n\\t\\t\\t\\tw.subWikifyTerm(cell.children,this.cellTermRegExp);\\n\\t\\t\\t\\tif (!cell.attributes) cell.attributes ={};\\n\\t\\t\\t\\tif(w.matchText.substr(w.matchText.length-2,1) == \\\" \\\") // spaceRight\\n\\t\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(cell,\\\"align\\\",spaceLeft ? \\\"center\\\" : \\\"left\\\");\\n\\t\\t\\t\\telse if(spaceLeft)\\n\\t\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(cell,\\\"align\\\",\\\"right\\\");\\n\\t\\t\\t\\tw.nextMatch--;\\n\\t\\t\\t}\\n\\t\\t\\tcol++;\\n\\t\\t\\tthis.cellRegExp.lastIndex = w.nextMatch;\\n\\t\\t\\tcellMatch = this.cellRegExp.exec(w.source);\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"heading\\\",\\n\\tmatch: \\\"^!{1,6}\\\",\\n\\ttermRegExp: /(\\\\n)/mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tvar e = {type:\\\"element\\\",tag:\\\"h\\\" + w.matchLength,children: []};\\n\\t\\tw.output.push(e);\\n\\t\\tw.subWikifyTerm(e.children,this.termRegExp);\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"list\\\",\\n\\tmatch: \\\"^(?:[\\\\\\\\*#;:]+)\\\",\\n\\tlookaheadRegExp: /^(?:(?:(\\\\*)|(#)|(;)|(:))+)/mg,\\n\\ttermRegExp: /(\\\\n)/mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tvar stack = [w.output];\\n\\t\\tvar currLevel = 0, currType = null;\\n\\t\\tvar listLevel, listType, itemType, baseType;\\n\\t\\tw.nextMatch = w.matchStart;\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\twhile(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {\\n\\t\\t\\tif(lookaheadMatch[1]) {\\n\\t\\t\\t\\tlistType = \\\"ul\\\";\\n\\t\\t\\t\\titemType = \\\"li\\\";\\n\\t\\t\\t} else if(lookaheadMatch[2]) {\\n\\t\\t\\t\\tlistType = \\\"ol\\\";\\n\\t\\t\\t\\titemType = \\\"li\\\";\\n\\t\\t\\t} else if(lookaheadMatch[3]) {\\n\\t\\t\\t\\tlistType = \\\"dl\\\";\\n\\t\\t\\t\\titemType = \\\"dt\\\";\\n\\t\\t\\t} else if(lookaheadMatch[4]) {\\n\\t\\t\\t\\tlistType = \\\"dl\\\";\\n\\t\\t\\t\\titemType = \\\"dd\\\";\\n\\t\\t\\t}\\n\\t\\t\\tif(!baseType)\\n\\t\\t\\t\\tbaseType = listType;\\n\\t\\t\\tlistLevel = lookaheadMatch[0].length;\\n\\t\\t\\tw.nextMatch += lookaheadMatch[0].length;\\n\\t\\t\\tvar t,e;\\n\\t\\t\\tif(listLevel > currLevel) {\\n\\t\\t\\t\\tfor(t=currLevel; t<listLevel; t++) {\\n\\t\\t\\t\\t\\tvar target = stack[stack.length-1];\\n\\t\\t\\t\\t\\tif(currLevel !== 0 && target.children) {\\n\\t\\t\\t\\t\\t\\ttarget = target.children[target.children.length-1];\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\te = {type:\\\"element\\\",tag:listType,children: []};\\n\\t\\t\\t\\t\\ttarget.push(e);\\n\\t\\t\\t\\t\\tstack.push(e.children);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else if(listType!=baseType && listLevel==1) {\\n\\t\\t\\t\\tw.nextMatch -= lookaheadMatch[0].length;\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t} else if(listLevel < currLevel) {\\n\\t\\t\\t\\tfor(t=currLevel; t>listLevel; t--)\\n\\t\\t\\t\\t\\tstack.pop();\\n\\t\\t\\t} else if(listLevel == currLevel && listType != currType) {\\n\\t\\t\\t\\tstack.pop();\\n\\t\\t\\t\\te = {type:\\\"element\\\",tag:listType,children: []};\\n\\t\\t\\t\\tstack[stack.length-1].push(e);\\n\\t\\t\\t\\tstack.push(e.children);\\n\\t\\t\\t}\\n\\t\\t\\tcurrLevel = listLevel;\\n\\t\\t\\tcurrType = listType;\\n\\t\\t\\te = {type:\\\"element\\\",tag:itemType,children: []};\\n\\t\\t\\tstack[stack.length-1].push(e);\\n\\t\\t\\tw.subWikifyTerm(e.children,this.termRegExp);\\n\\t\\t\\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\\n\\t\\t\\tlookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"quoteByBlock\\\",\\n\\tmatch: \\\"^<<<\\\\\\\\n\\\",\\n\\ttermRegExp: /(^<<<(\\\\n|$))/mg,\\n\\telement: \\\"blockquote\\\",\\n\\thandler: function(w) {\\n\\t\\tvar e = {type:\\\"element\\\",tag:this.element,children: []};\\n\\t\\tw.output.push(e);\\n\\t\\tw.subWikifyTerm(e.children,this.termRegExp);\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"quoteByLine\\\",\\n\\tmatch: \\\"^>+\\\",\\n\\tlookaheadRegExp: /^>+/mg,\\n\\ttermRegExp: /(\\\\n)/mg,\\n\\telement: \\\"blockquote\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tvar stack = [];\\n\\t\\tvar currLevel = 0;\\n\\t\\tvar newLevel = w.matchLength;\\n\\t\\tvar t,matched,e;\\n\\t\\tdo {\\n\\t\\t\\tif(newLevel > currLevel) {\\n\\t\\t\\t\\tfor(t=currLevel; t<newLevel; t++) {\\n\\t\\t\\t\\t\\tvar f = stack[stack.length-1];\\n\\t\\t\\t\\t\\te = {type:\\\"element\\\",tag:this.element,children: []};\\n\\t\\t\\t\\t\\tstack.push(e);\\n\\t\\t\\t\\t\\tif (t ===0){\\n\\t\\t\\t\\t\\t\\tw.output.push(e);\\n\\t\\t\\t\\t\\t}else {\\n\\t\\t\\t\\t\\t\\tf.children.push(e);\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else if(newLevel < currLevel) {\\n\\t\\t\\t\\tfor(t=currLevel; t>newLevel; t--)\\n\\t\\t\\t\\t\\tstack.pop();\\n\\t\\t\\t}\\n\\t\\t\\tcurrLevel = newLevel;\\n\\t\\t\\tw.subWikifyTerm(stack[stack.length-1].children,this.termRegExp);\\n\\t\\t\\tstack[stack.length-1].children.push({type:\\\"element\\\",tag:\\\"br\\\"});\\n\\t\\t\\t//e.push({type:\\\"element\\\",tag:\\\"br\\\"});\\n\\n\\t\\t\\tthis.lookaheadRegExp.lastIndex = w.nextMatch;\\n\\t\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\t\\tmatched = lookaheadMatch && lookaheadMatch.index == w.nextMatch;\\n\\t\\t\\tif(matched) {\\n\\t\\t\\t\\tnewLevel = lookaheadMatch[0].length;\\n\\t\\t\\t\\tw.nextMatch += lookaheadMatch[0].length;\\n\\t\\t\\t}\\n\\t\\t} while(matched);\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"rule\\\",\\n\\tmatch: \\\"^----+$\\\\\\\\n?|<hr ?/?>\\\\\\\\n?\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tw.output.push({type:\\\"element\\\",tag:\\\"hr\\\"});\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"monospacedByLine\\\",\\n\\tmatch: \\\"^(?:/\\\\\\\\*\\\\\\\\{\\\\\\\\{\\\\\\\\{\\\\\\\\*/|\\\\\\\\{\\\\\\\\{\\\\\\\\{|//\\\\\\\\{\\\\\\\\{\\\\\\\\{|<!--\\\\\\\\{\\\\\\\\{\\\\\\\\{-->)\\\\\\\\n\\\",\\n\\telement: \\\"pre\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tswitch(w.matchText) {\\n\\t\\tcase \\\"/*{{{*/\\\\n\\\": // CSS\\n\\t\\t\\tthis.lookaheadRegExp = /\\\\/\\\\*\\\\{\\\\{\\\\{\\\\*\\\\/\\\\n*((?:^[^\\\\n]*\\\\n)+?)(\\\\n*^\\\\f*\\\\/\\\\*\\\\}\\\\}\\\\}\\\\*\\\\/$\\\\n?)/mg;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"{{{\\\\n\\\": // monospaced block\\n\\t\\t\\tthis.lookaheadRegExp = /^\\\\{\\\\{\\\\{\\\\n((?:^[^\\\\n]*\\\\n)+?)(^\\\\f*\\\\}\\\\}\\\\}$\\\\n?)/mg;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"//{{{\\\\n\\\": // plugin\\n\\t\\t\\tthis.lookaheadRegExp = /^\\\\/\\\\/\\\\{\\\\{\\\\{\\\\n\\\\n*((?:^[^\\\\n]*\\\\n)+?)(\\\\n*^\\\\f*\\\\/\\\\/\\\\}\\\\}\\\\}$\\\\n?)/mg;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"<!--{{{-->\\\\n\\\": //template\\n\\t\\t\\tthis.lookaheadRegExp = /<!--\\\\{\\\\{\\\\{-->\\\\n*((?:^[^\\\\n]*\\\\n)+?)(\\\\n*^\\\\f*<!--\\\\}\\\\}\\\\}-->$\\\\n?)/mg;\\n\\t\\t\\tbreak;\\n\\t\\tdefault:\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\tenclosedTextHelper.call(this,w);\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"typedBlock\\\",\\n\\t\\tmatch: \\\"^\\\\\\\\$\\\\\\\\$\\\\\\\\$(?:[^ >\\\\\\\\r\\\\\\\\n]*)\\\\\\\\r?\\\\\\\\n\\\",\\n\\tlookaheadRegExp: /^\\\\$\\\\$\\\\$([^ >\\\\r\\\\n]*)\\\\n((?:^[^\\\\n]*\\\\r?\\\\n)+?)(^\\\\f*\\\\$\\\\$\\\\$\\\\r?\\\\n?)/mg,\\n\\t//match: \\\"^\\\\\\\\$\\\\\\\\$\\\\\\\\$(?:[^ >\\\\\\\\r\\\\\\\\n]*)(?: *> *([^ \\\\\\\\r\\\\\\\\n]+))?\\\\\\\\r?\\\\\\\\n\\\",\\n\\t//lookaheadRegExp: /^\\\\$\\\\$\\\\$([^ >\\\\r\\\\n]*)(?: *> *([^ \\\\r\\\\n]+))\\\\n((?:^[^\\\\n]*\\\\n)+?)(^\\\\f*\\\\$\\\\$\\\\$$\\\\n?)/mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\t\\t// The wikitext parsing infrastructure is horribly unre-entrant\\n\\t\\t\\tvar parseType = lookaheadMatch[1],\\n\\t\\t\\t\\trenderType ,//= this.match[2],\\n\\t\\t\\t\\ttext = lookaheadMatch[2],\\n\\t\\t\\t\\toldOutput = w.output,\\n\\t\\t\\t\\toldSource = w.source,\\n\\t\\t\\t\\toldNextMatch = w.nextMatch,\\n\\t\\t\\t\\toldChildren = w.children;\\n\\t\\t\\t// Parse the block according to the specified type\\n\\t\\t\\tvar parser = $tw.wiki.parseText(parseType,text.toString(),{defaultType: \\\"text/plain\\\"});\\n\\n\\t\\t\\tw.output = oldOutput;\\n\\t\\t\\tw.source = oldSource;\\n\\t\\t\\tw.nextMatch = oldNextMatch;\\n\\t\\t\\tw.children = oldChildren;\\n\\t\\t\\tfor (var i=0; i<parser.tree.length; i++) {\\n\\t\\t\\t\\tw.output.push(parser.tree[i]);\\n\\t\\t\\t}\\n\\t\\t\\tw.nextMatch = this.lookaheadRegExp.lastIndex;\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"wikifyComment\\\",\\n\\tmatch: \\\"^(?:/\\\\\\\\*\\\\\\\\*\\\\\\\\*|<!---)\\\\\\\\n\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tvar termRegExp = (w.matchText == \\\"/***\\\\n\\\") ? (/(^\\\\*\\\\*\\\\*\\\\/\\\\n)/mg) : (/(^--->\\\\n)/mg);\\n\\t\\tw.subWikifyTerm(w.output,termRegExp);\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"macro\\\",\\n\\tmatch: \\\"<<\\\",\\n\\tlookaheadRegExp: /<<(?:([!@£\\\\$%\\\\^\\\\&\\\\*\\\\(\\\\)`\\\\~'\\\"\\\\|\\\\\\\\\\\\/;\\\\:\\\\.\\\\,\\\\+\\\\=\\\\-\\\\_\\\\{\\\\}])|([^>\\\\s]+))(?:\\\\s*)((?:[^>]|(?:>(?!>)))*)>>/mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source),\\n\\t\\t\\tname;\\n\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\t\\tname = lookaheadMatch[1] || lookaheadMatch[2];\\n\\t\\t\\tvar params = lookaheadMatch[3], nameold =name;\\n\\t\\t\\tif (name) {\\n\\t\\t\\t\\tif (!!macroadapter.paramadapter[name]) {\\n\\t\\t\\t\\t\\tparams=macroadapter.paramadapter[name](params);\\n\\t\\t\\t\\t\\t//alert(\\\"going out as \\\"+params);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (!!macroadapter.namedapter[name]) {\\n\\t\\t\\t\\t\\tname=macroadapter.namedapter[name];\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tw.nextMatch = this.lookaheadRegExp.lastIndex;\\n\\t\\t\\t\\tinsertMacroCall(w,w.output,name,params);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n},\\n\\n\\n{\\n\\tname: \\\"prettyLink\\\",\\n\\tmatch: \\\"\\\\\\\\[\\\\\\\\[\\\",\\n\\tlookaheadRegExp: /\\\\[\\\\[(.*?)(?:\\\\|(~)?(.*?))?\\\\]\\\\]/mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\t\\tvar text = lookaheadMatch[1],\\n\\t\\t\\t\\tlink = text;\\n\\t\\t\\tif(lookaheadMatch[3]) {\\n\\t\\t\\t\\t// Pretty bracketted link\\n\\t\\t\\t\\tlink = lookaheadMatch[3];\\n\\t\\t\\t}\\n\\tif(isLinkExternal(link)) {\\n\\t\\tw.output.push({\\n\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\ttag: \\\"a\\\",\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\thref: {type: \\\"string\\\", value: link},\\n\\t\\t\\t\\t\\\"class\\\": {type: \\\"string\\\", value: \\\"tc-tiddlylink-external\\\"},\\n\\t\\t\\t\\ttarget: {type: \\\"string\\\", value: \\\"_blank\\\"}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: [{\\n\\t\\t\\t\\ttype: \\\"text\\\", text: text\\n\\t\\t\\t}]\\n\\t\\t});\\n\\t} else {\\n\\t\\tw.output.push({\\n\\t\\t\\ttype: \\\"link\\\",\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tto: {type: \\\"string\\\", value: link}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: [{\\n\\t\\t\\t\\ttype: \\\"text\\\", text: text\\n\\t\\t\\t}]\\n\\t\\t});\\n\\t}\\n\\n\\t\\t\\tw.nextMatch = this.lookaheadRegExp.lastIndex;\\n\\t\\t}\\n\\t}\\n},\\n{\\n\\tname: \\\"wikiLink\\\",\\n\\tmatch: textPrimitives.unWikiLink+\\\"?\\\"+textPrimitives.wikiLink,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tif(w.matchText.substr(0,1) == textPrimitives.unWikiLink) {\\n\\t\\t\\tw.outputText(w.output,w.matchStart+1,w.nextMatch);\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\tif(w.matchStart > 0) {\\n\\t\\t\\tvar preRegExp = new RegExp(textPrimitives.anyLetterStrict,\\\"mg\\\");\\n\\t\\t\\tpreRegExp.lastIndex = w.matchStart-1;\\n\\t\\t\\tvar preMatch = preRegExp.exec(w.source);\\n\\t\\t\\tif(preMatch.index == w.matchStart-1) {\\n\\t\\t\\t\\tw.outputText(w.output,w.matchStart,w.nextMatch);\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(w.autoLinkWikiWords) {\\n\\t\\t\\tw.output.push({\\n\\t\\t\\t\\ttype: \\\"link\\\",\\n\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\tto: {type: \\\"string\\\", value: w.matchText}\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\tchildren: [{\\n\\t\\t\\t\\t\\ttype: \\\"text\\\",\\n\\t\\t\\t\\t\\ttext: w.source.substring(w.matchStart,w.nextMatch)\\n\\t\\t\\t\\t}]\\n\\t\\t\\t});\\n\\t\\t} else {\\t\\n\\t\\t\\tw.outputText(w.output,w.matchStart,w.nextMatch);\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"urlLink\\\",\\n\\tmatch: textPrimitives.urlPattern,\\n\\thandler: function(w)\\n\\t{\\n\\t\\t\\tw.output.push({\\n\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\ttag: \\\"a\\\",\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\thref: {type: \\\"string\\\", value: w.matchText},\\n\\t\\t\\t\\t\\\"class\\\": {type: \\\"string\\\", value: \\\"tc-tiddlylink-external\\\"},\\n\\t\\t\\t\\ttarget: {type: \\\"string\\\", value: \\\"_blank\\\"}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: [{\\n\\t\\t\\t\\ttype: \\\"text\\\", text: w.source.substring(w.matchStart,w.nextMatch)\\n\\t\\t\\t}]\\n\\t\\t});\\n\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"image\\\",\\n\\tmatch: \\\"\\\\\\\\[[<>]?[Ii][Mm][Gg]\\\\\\\\[\\\",\\n\\t// [<] sequence below is to avoid lessThan-questionMark sequence so TiddlyWikis can be included in PHP files\\n\\tlookaheadRegExp: /\\\\[([<]?)(>?)[Ii][Mm][Gg]\\\\[(?:([^\\\\|\\\\]]+)\\\\|)?([^\\\\[\\\\]\\\\|]+)\\\\](?:\\\\[([^\\\\]]*)\\\\])?\\\\]/mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tvar node = {\\n\\t\\t\\ttype: \\\"image\\\",\\n\\t\\t\\tattributes: {}\\n\\t\\t};\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source),\\n\\t\\t\\timageParams = {},\\n\\t\\t\\tlinkParams = {};\\n\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\t\\tif(lookaheadMatch[1]) {\\n\\t\\t\\t\\tnode.attributes.class = {type: \\\"string\\\", value: \\\"classic-image-left\\\"};\\n\\t\\t\\t} else if(lookaheadMatch[2]) {\\n\\t\\t\\t\\tnode.attributes.class = {type: \\\"string\\\", value: \\\"classic-image-right\\\"};\\n\\t\\t\\t}\\n\\t\\t\\tif(lookaheadMatch[3]) {\\n\\t\\t\\t\\tnode.attributes.tooltip = {type: \\\"string\\\", value: lookaheadMatch[3]};\\n\\t\\t\\t}\\n\\t\\t\\tnode.attributes.source = {type: \\\"string\\\", value: lookaheadMatch[4]};\\n\\t\\t\\tif(lookaheadMatch[5]) {\\n\\t\\t\\t\\tif(isLinkExternal(lookaheadMatch[5])) {\\n\\t\\t\\t\\t\\tw.output.push({\\n\\t\\t\\t\\t\\t\\ttype: \\\"element\\\",\\n\\t\\t\\t\\t\\t\\ttag: \\\"a\\\",\\n\\t\\t\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\t\\t\\thref: {type: \\\"string\\\", value:lookaheadMatch[5]},\\n\\t\\t\\t\\t\\t\\t\\t\\\"class\\\": {type: \\\"string\\\", value: \\\"tc-tiddlylink-external\\\"},\\n\\t\\t\\t\\t\\t\\t\\ttarget: {type: \\\"string\\\", value: \\\"_blank\\\"}\\n\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\tchildren: [node]\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tw.output.push({\\n\\t\\t\\t\\t\\t\\ttype: \\\"link\\\",\\n\\t\\t\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\t\\t\\tto: {type: \\\"string\\\", value: lookaheadMatch[5]}\\n\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\tchildren: [node]\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tw.output.push(node);\\n\\t\\t\\t}\\n\\t\\t\\tw.nextMatch = this.lookaheadRegExp.lastIndex;\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"html\\\",\\n\\tmatch: \\\"<[Hh][Tt][Mm][Ll]>\\\",\\n\\tlookaheadRegExp: /<[Hh][Tt][Mm][Ll]>((?:.|\\\\n)*?)<\\\\/[Hh][Tt][Mm][Ll]>/mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\t\\tw.output.push({\\ttype:\\\"raw\\\", html:lookaheadMatch[1]});\\n\\t\\t\\tw.nextMatch = this.lookaheadRegExp.lastIndex;\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"commentByBlock\\\",\\n\\tmatch: \\\"/%\\\",\\n\\tlookaheadRegExp: /\\\\/%((?:.|\\\\n)*?)%\\\\//mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart)\\n\\t\\t\\tw.nextMatch = this.lookaheadRegExp.lastIndex;\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"characterFormat\\\",\\n\\tmatch: \\\"''|//|__|\\\\\\\\^\\\\\\\\^|~~|--(?!\\\\\\\\s|$)|\\\\\\\\{\\\\\\\\{\\\\\\\\{|`\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tvar e,lookaheadRegExp,lookaheadMatch;\\n\\t\\tswitch(w.matchText) {\\n\\t\\tcase \\\"''\\\":\\n\\t\\t\\te = {type:\\\"element\\\",tag:\\\"strong\\\",children: []};\\n\\t\\t\\tw.output.push(e);\\n\\t\\t\\tw.subWikifyTerm(e.children,/('')/mg);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"//\\\":\\n\\t\\t\\te = {type:\\\"element\\\",tag:\\\"em\\\",children: []};\\n\\t\\t\\tw.output.push(e);\\n\\t\\t\\tw.subWikifyTerm(e.children,/(\\\\/\\\\/)/mg);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"__\\\":\\n\\t\\t\\te = {type:\\\"element\\\",tag:\\\"u\\\",children: []};\\n\\t\\t\\tw.output.push(e);\\n\\t\\t\\tw.subWikifyTerm(e.children,/(__)/mg);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"^^\\\":\\n\\t\\t\\te = {type:\\\"element\\\",tag:\\\"sup\\\",children: []};\\n\\t\\t\\tw.output.push(e);\\n\\t\\t\\tw.subWikifyTerm(e.children,/(\\\\^\\\\^)/mg);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"~~\\\":\\n\\t\\t\\te = {type:\\\"element\\\",tag:\\\"sub\\\",children: []};\\n\\t\\t\\tw.output.push(e);\\n\\t\\t\\tw.subWikifyTerm(e.children,/(~~)/mg);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"--\\\":\\n\\t\\t\\te = {type:\\\"element\\\",tag:\\\"strike\\\",children: []};\\n\\t\\t\\tw.output.push(e);\\n\\t\\t\\tw.subWikifyTerm(e.children,/(--)/mg);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"`\\\":\\n\\t\\t\\tlookaheadRegExp = /`((?:.|\\\\n)*?)`/mg;\\n\\t\\t\\tlookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\t\\tlookaheadMatch = lookaheadRegExp.exec(w.source);\\n\\t\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\t\\t\\tw.output.push({type:\\\"element\\\",tag:\\\"code\\\",\\n\\t\\t\\t\\t\\tchildren:[{type: \\\"text\\\",text: lookaheadMatch[1]}]});\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"{{{\\\":\\n\\t\\t\\tlookaheadRegExp = /\\\\{\\\\{\\\\{((?:.|\\\\n)*?)\\\\}\\\\}\\\\}/mg;\\n\\t\\t\\tlookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\t\\tlookaheadMatch = lookaheadRegExp.exec(w.source);\\n\\t\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\t\\t\\tw.output.push({type:\\\"element\\\",tag:\\\"code\\\",\\n\\t\\t\\t\\t\\tchildren:[{type: \\\"text\\\",text: lookaheadMatch[1]}]});\\n\\t\\t\\t\\tw.nextMatch = lookaheadRegExp.lastIndex;\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"customFormat\\\",\\n\\tmatch: \\\"@@|\\\\\\\\{\\\\\\\\{\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tswitch(w.matchText) {\\n\\t\\tcase \\\"@@\\\":\\n\\t\\t\\tvar e = {type:\\\"element\\\",tag:\\\"span\\\",children: []};\\n\\t\\t\\tw.output.push(e);\\n\\t\\t\\tvar styles = inlineCssHelper(w);\\n\\t\\t\\tif(styles.length === 0)\\n\\t\\t\\t\\tsetAttr(e,\\\"class\\\",\\\"marked\\\");\\n\\t\\t\\telse\\n\\t\\t\\t\\tapplyCssHelper(e,styles);\\n\\t\\t\\tw.subWikifyTerm(e.children,/(@@)/mg);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"{{\\\":\\n\\t\\t\\tvar lookaheadRegExp = /\\\\{\\\\{[\\\\s]*([\\\\-\\\\w]+[\\\\-\\\\s\\\\w]*)[\\\\s]*\\\\{(\\\\n?)/mg;\\n\\t\\t\\tlookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\t\\tvar lookaheadMatch = lookaheadRegExp.exec(w.source);\\n\\t\\t\\tif(lookaheadMatch) {\\n\\t\\t\\t\\tw.nextMatch = lookaheadRegExp.lastIndex;\\n\\t\\t\\t\\te = {type:\\\"element\\\",tag:lookaheadMatch[2] == \\\"\\\\n\\\" ? \\\"div\\\" : \\\"span\\\",\\n\\t\\t\\t\\t\\tattributes: {\\\"class\\\": {type: \\\"string\\\", value:lookaheadMatch[1]}},children: []};\\n\\t\\t\\t\\tw.output.push(e);\\n\\t\\t\\t\\tw.subWikifyTerm(e.children,/(\\\\}\\\\}\\\\})/mg);\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"mdash\\\",\\n\\tmatch: \\\"--\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tw.output.push({type: \\\"entity\\\", entity: \\\"—\\\"});\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"lineBreak\\\",\\n\\tmatch: \\\"\\\\\\\\n|<br ?/?>\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tw.output.push({type:\\\"element\\\",tag:\\\"br\\\"});\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"rawText\\\",\\n\\tmatch: \\\"\\\\\\\"{3}|<nowiki>\\\",\\n\\tlookaheadRegExp: /(?:\\\\\\\"{3}|<nowiki>)((?:.|\\\\n)*?)(?:\\\\\\\"{3}|<\\\\/nowiki>)/mg,\\n\\thandler: function(w)\\n\\t{\\n\\t\\tthis.lookaheadRegExp.lastIndex = w.matchStart;\\n\\t\\tvar lookaheadMatch = this.lookaheadRegExp.exec(w.source);\\n\\t\\tif(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\\n\\t\\t\\tw.output.push({type: \\\"text\\\",text: lookaheadMatch[1]\\n\\t\\t\\t});\\n\\t\\t\\tw.nextMatch = this.lookaheadRegExp.lastIndex;\\n\\t\\t}\\n\\t}\\n},\\n\\n{\\n\\tname: \\\"htmlEntitiesEncoding\\\",\\n\\tmatch: \\\"&#?[a-zA-Z0-9]{2,8};\\\",\\n\\thandler: function(w)\\n\\t{\\n\\t\\tw.output.push({type: \\\"entity\\\", entity: w.matchText});\\n\\t}\\n}\\n\\n];\\n\\nexports.rules = rules;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"module\"\n }\n }\n}"},"$:/plugins/tiddlywiki/tw5.com-docs":{"title":"$:/plugins/tiddlywiki/tw5.com-docs","name":"TW5.com Docs","description":"Documentation from tiddlywiki.com","list":"","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {}\n}"},"$:/plugins/tiddlywiki/twitter":{"title":"$:/plugins/tiddlywiki/twitter","name":"Twitter","description":"Twitter embedding tools","list":"readme usage","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/twitter/macros\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/macros\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define twitter-usage(text)\\nFor example:\\n\\n<$codeblock code=\\\"\\\"\\\"$text$\\\"\\\"\\\"/>\\n\\nRenders as:\\n\\n$text$\\n\\\\end\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/rawmarkup\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/rawmarkup\",\n \"tags\": \"$:/tags/RawMarkup\",\n \"text\": \"<script>window.twttr = (function(d, s, id) {\\n var js, fjs = d.getElementsByTagName(s)[0],\\n t = window.twttr || {};\\n if (d.getElementById(id)) return t;\\n js = d.createElement(s);\\n js.id = id;\\n js.src = \\\"https://platform.twitter.com/widgets.js\\\";\\n fjs.parentNode.insertBefore(js, fjs);\\n\\n t._e = [];\\n t.ready = function(f) {\\n t._e.push(f);\\n };\\n\\n return t;\\n}(document, \\\"script\\\", \\\"twitter-wjs\\\"));</script>\"\n },\n \"$:/plugins/tiddlywiki/twitter/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/readme\",\n \"text\": \"This plugin provides a `<$twitter>` widget that can embed various entities from Twitter's service:\\n\\n* Individual tweets and conversations\\n* Buttons for tweeting/mentioning, sharing, following\\n* Various types of timeline: profile, likes, list, collection, url and widget\\n\\nThe widget only works in the browser, and not in generated static HTML pages.\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/startup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/startup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/twitter/startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nTwitter initialisation\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"twitter\\\";\\nexports.before = [\\\"startup\\\"];\\nexports.synchronous = true;\\n\\nexports.startup = function() {\\n\\tvar logger = new $tw.utils.Logger(\\\"twitter-plugin\\\");\\n\\tif($tw.browser && !window.twttr) {\\n\\t\\tlogger.alert(\\\"The plugin 'tiddlywiki/twitter' is disabled until this wiki is saved and reloaded again\\\");\\n\\t}\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/twitter/widget.js\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/widget.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/twitter/widget.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nTwitter widget\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar Widget = require(\\\"$:/core/modules/widgets/widget.js\\\").widget;\\n\\nvar TwitterWidget = function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nTwitterWidget.prototype = new Widget();\\n\\nvar optionAttributes = \\\"align ariaPolite borderColor cards chrome conversation count dnt hashtags height height lang linkColor related size text theme tweetLimit via width\\\".split(\\\" \\\"),\\n\\totherAttributes = \\\"hashtag id ownerScreenName screenName slug tweetID type url userId widgetId\\\".split(\\\" \\\"),\\n\\tallAttributes = Array.prototype.slice.call(optionAttributes,0).concat(otherAttributes);\\n\\n/*\\nRender this widget into the DOM\\n*/\\nTwitterWidget.prototype.render = function(parent,nextSibling) {\\n\\tvar self = this;\\n\\t// Housekeeping\\n\\tthis.parentDomNode = parent;\\n\\tthis.computeAttributes();\\n\\t// Compose the arguments for the tweet call\\n\\tvar method,\\n\\t\\targ,\\n\\t\\toptions = {};\\n\\t\\t$tw.utils.each(optionAttributes,function(attr) {\\n\\t\\t\\toptions[attr] = self.getAttribute(attr);\\n\\t\\t});\\n\\tswitch(this.getAttribute(\\\"type\\\")) {\\n\\t\\tcase \\\"shareButton\\\":\\n\\t\\t\\tmethod = \\\"createShareButton\\\";\\n\\t\\t\\targ = this.getAttribute(\\\"url\\\");\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"followButton\\\":\\n\\t\\t\\tmethod = \\\"createFollowButton\\\";\\n\\t\\t\\targ = this.getAttribute(\\\"screenName\\\");\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"hashtagButton\\\":\\n\\t\\t\\tmethod = \\\"createHashtagButton\\\";\\n\\t\\t\\targ = this.getAttribute(\\\"hashtag\\\");\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"mentionButton\\\":\\n\\t\\t\\tmethod = \\\"createMentionButton\\\";\\n\\t\\t\\targ = this.getAttribute(\\\"screenName\\\");\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"tweet\\\":\\n\\t\\t\\tmethod = \\\"createTweet\\\";\\n\\t\\t\\targ = this.getAttribute(\\\"tweetID\\\");\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"timelineProfile\\\":\\n\\t\\t\\tmethod = \\\"createTimeline\\\";\\n\\t\\t\\targ = {\\n\\t\\t\\t\\tsourceType: \\\"profile\\\",\\n\\t\\t\\t\\tscreenName: this.getAttribute(\\\"screenName\\\"),\\n\\t\\t\\t\\tuserId: this.getAttribute(\\\"userId\\\")\\n\\t\\t\\t};\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"timelineLikes\\\":\\n\\t\\t\\tmethod = \\\"createTimeline\\\";\\n\\t\\t\\targ = {\\n\\t\\t\\t\\tsourceType: \\\"likes\\\",\\n\\t\\t\\t\\tscreenName: this.getAttribute(\\\"screenName\\\"),\\n\\t\\t\\t\\tuserId: this.getAttribute(\\\"userId\\\")\\n\\t\\t\\t};\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"timelineList\\\":\\n\\t\\t\\tmethod = \\\"createTimeline\\\";\\n\\t\\t\\targ = {\\n\\t\\t\\t\\tsourceType: \\\"list\\\",\\n\\t\\t\\t\\townerScreenName: this.getAttribute(\\\"ownerScreenName\\\"),\\n\\t\\t\\t\\tslug: this.getAttribute(\\\"slug\\\"),\\n\\t\\t\\t\\tid: this.getAttribute(\\\"id\\\")\\n\\t\\t\\t};\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"timelineCollection\\\":\\n\\t\\t\\tmethod = \\\"createTimeline\\\";\\n\\t\\t\\targ = {\\n\\t\\t\\t\\tsourceType: \\\"collection\\\",\\n\\t\\t\\t\\tid: this.getAttribute(\\\"id\\\")\\n\\t\\t\\t};\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"timelineUrl\\\":\\n\\t\\t\\tmethod = \\\"createTimeline\\\";\\n\\t\\t\\targ = {\\n\\t\\t\\t\\tsourceType: \\\"url\\\",\\n\\t\\t\\t\\turl: this.getAttribute(\\\"url\\\")\\n\\t\\t\\t};\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\"timelineWidget\\\":\\n\\t\\t\\tmethod = \\\"createTimeline\\\";\\n\\t\\t\\targ = {\\n\\t\\t\\t\\tsourceType: \\\"widget\\\",\\n\\t\\t\\t\\twidgetId: this.getAttribute(\\\"widgetId\\\")\\n\\t\\t\\t};\\n\\t\\t\\tbreak;\\n\\t}\\n\\t// Render the tweet into a div\\n\\tvar div = this.document.createElement(\\\"div\\\");\\n\\tif(!this.document.isTiddlyWikiFakeDom && window.twttr && method) {\\n\\t\\ttwttr.ready(function(twttr) {\\n\\t\\t\\twindow.twttr.widgets[method](arg,div,options);\\n\\t\\t});\\n\\t} else {\\n\\t\\tdiv.appendChild(this.document.createTextNode(\\\"Can't render tweet\\\"));\\n\\t}\\n\\t// Insert it into the DOM\\n\\tparent.insertBefore(div,nextSibling);\\n\\tthis.domNodes.push(div);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nTwitterWidget.prototype.refresh = function(changedTiddlers) {\\n\\tvar changedAttributes = this.computeAttributes();\\n\\tif(allAttributes.find(function(attr) {\\n\\t\\treturn $tw.utils.hop(changedAttributes,attr);\\n\\t})) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\t\\n\\t}\\n};\\n\\nexports.twitter = TwitterWidget;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"widget\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/collectiontimeline\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/collectiontimeline\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Collection Timeline\",\n \"text\": \"!! Embedding Collection Timelines\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"timelineCollection\\\" |none |\\\"timelineCollection\\\" |\\n|''id'' |ID of the collection |none | |\\n|''chrome'' |\\\"noheader\\\", \\\"nofooter\\\", \\\"noborders\\\", \\\"transparent\\\", \\\"noscrollbar\\\" |none |Toggle the display of design elements in the widget. This parameter is a space-separated list of values |\\n|''height'' |Positive integer |600 |Set a fixed height of the embedded widget |\\n|''tweetLimit'' |Range: 1-20 |none |Render a timeline statically, displaying only n number of Tweets |\\n|''borderColor'' |Hexadecimal color |Varies by theme |Adjust the color of borders inside the widget |\\n|''ariaPolite'' |\\\"polite\\\", \\\"assertive\\\", \\\"rude\\\" |\\\"polite\\\" |Apply the specified aria-polite behavior to the rendered timeline. New Tweets may be added to the top of a timeline, affecting screen readers |\\n|''conversation'' |\\\"none\\\", \\\"all\\\" |\\\"all\\\" |Tweets in response to another Tweet will display a compact version of the previous Tweet by default. Use \\\"none\\\" to hide the parent Tweet in the conversation |\\n|''cards'' |\\\"hidden\\\", \\\"visible\\\"|visible |Hide photos, videos, and link previews powered by Twitter Cards |\\n|''width'' |Positive integer |\\\"auto\\\", derived from container size |Set the maximum width of the embedded Tweet |\\n|''align''\\t|\\\"left\\\", \\\"right\\\", \\\"center\\\"\\t|none |Float the embedded Tweet to the left or right so that text wraps around it, or align center so it floats in the middle of a paragraph |\\n|''theme'' |\\\"dark\\\", \\\"light\\\" |\\\"light\\\"\\t|Toggle the default color scheme of the embedded Tweet |\\n|''linkColor'' |Hexadecimal color |\\\"#2b7bb9\\\" |Adjust the color of links, including hashtags and @mentions, inside the widget |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"timelineCollection\\\" id=\\\"393773266801659904\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/followbutton\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/followbutton\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Follow Button\",\n \"text\": \"!! Embedding Follow Buttons\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"followButton\\\" |none |\\\"followButton\\\" |\\n|''screenName'' |Screen name of the account to be followed |none | |\\n|''count'' |\\\"none\\\", \\\"horizontal\\\" |\\\"horizontal\\\" | |\\n|''text'' |Any string |none |The default, highlighted text a user sees in the Tweet web intent |\\n|''hashtags'' |A comma-separated list of hashtags |none |A list of hashtags to be appended to default Tweet text where appropriate |\\n|''align'' |\\\"left\\\", \\\"right\\\" |locale dependent (left or right, depending on the text direction of the language) |The alignment of the button within an iframe; use this to ensure flush layout when aligning buttons |\\n|''size'' |\\\"medium\\\", \\\"large\\\" |medium |Size of button |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"followButton\\\" screenName=\\\"TiddlyWiki\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/hashtagbutton\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/hashtagbutton\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Hashtag Button\",\n \"text\": \"!! Embedding Hashtag Buttons\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"hashtagButton\\\" |none |\\\"hashtagButton\\\" |\\n|''hashtag'' |Hashtag to be tweeted and displayed on the button |none | |\\n|''text'' |Any string |none |The default, highlighted text a user sees in the Tweet web intent |\\n|''align'' |\\\"left\\\", \\\"right\\\" |locale dependent (left or right, depending on the text direction of the language) |The alignment of the button within an iframe; use this to ensure flush layout when aligning buttons |\\n|''size'' |\\\"medium\\\", \\\"large\\\" |medium |Size of button |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"hashtagButton\\\" hashtag=\\\"TiddlyWiki\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/likestimeline\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/likestimeline\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Likes Timeline\",\n \"text\": \"!! Embedding Likes Timelines\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"timelineLikes\\\" |none |\\\"timelineLikes\\\" |\\n|''screenName'' |Screen name of the account |none |Either ''screenName'' or ''userId'' must be provided |\\n|''userId'' |User ID of the account |none |~|\\n|''chrome'' |\\\"noheader\\\", \\\"nofooter\\\", \\\"noborders\\\", \\\"transparent\\\", \\\"noscrollbar\\\" |none |Toggle the display of design elements in the widget. This parameter is a space-separated list of values |\\n|''height'' |Positive integer |600 |Set a fixed height of the embedded widget |\\n|''tweetLimit'' |Range: 1-20 |none |Render a timeline statically, displaying only n number of Tweets |\\n|''borderColor'' |Hexadecimal color |Varies by theme |Adjust the color of borders inside the widget |\\n|''ariaPolite'' |\\\"polite\\\", \\\"assertive\\\", \\\"rude\\\" |\\\"polite\\\" |Apply the specified aria-polite behavior to the rendered timeline. New Tweets may be added to the top of a timeline, affecting screen readers |\\n|''conversation'' |\\\"none\\\", \\\"all\\\" |\\\"all\\\" |Tweets in response to another Tweet will display a compact version of the previous Tweet by default. Use \\\"none\\\" to hide the parent Tweet in the conversation |\\n|''cards'' |\\\"hidden\\\", \\\"visible\\\"|visible |Hide photos, videos, and link previews powered by Twitter Cards |\\n|''width'' |Positive integer |\\\"auto\\\", derived from container size |Set the maximum width of the embedded Tweet |\\n|''align''\\t|\\\"left\\\", \\\"right\\\", \\\"center\\\"\\t|none |Float the embedded Tweet to the left or right so that text wraps around it, or align center so it floats in the middle of a paragraph |\\n|''theme'' |\\\"dark\\\", \\\"light\\\" |\\\"light\\\"\\t|Toggle the default color scheme of the embedded Tweet |\\n|''linkColor'' |Hexadecimal color |\\\"#2b7bb9\\\" |Adjust the color of links, including hashtags and @mentions, inside the widget |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"timelineLikes\\\" screenName=\\\"tiddlywiki\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/listtimeline\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/listtimeline\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"List Timeline\",\n \"text\": \"!! Embedding List Timelines\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"timelineList\\\" |none |\\\"timelineList\\\" |\\n|''ownerScreenName'' |Screen name of the account |none |Either both ''ownerScreenName'' and ''slug'' must be provided, or just ''id'' |\\n|''slug'' |The string identifier for a list |none |~|\\n|''id'' |ID of the list |none |~|\\n|''chrome'' |\\\"noheader\\\", \\\"nofooter\\\", \\\"noborders\\\", \\\"transparent\\\", \\\"noscrollbar\\\" |none |Toggle the display of design elements in the widget. This parameter is a space-separated list of values |\\n|''height'' |Positive integer |600 |Set a fixed height of the embedded widget |\\n|''tweetLimit'' |Range: 1-20 |none |Render a timeline statically, displaying only n number of Tweets |\\n|''borderColor'' |Hexadecimal color |Varies by theme |Adjust the color of borders inside the widget |\\n|''ariaPolite'' |\\\"polite\\\", \\\"assertive\\\", \\\"rude\\\" |\\\"polite\\\" |Apply the specified aria-polite behavior to the rendered timeline. New Tweets may be added to the top of a timeline, affecting screen readers |\\n|''conversation'' |\\\"none\\\", \\\"all\\\" |\\\"all\\\" |Tweets in response to another Tweet will display a compact version of the previous Tweet by default. Use \\\"none\\\" to hide the parent Tweet in the conversation |\\n|''cards'' |\\\"hidden\\\", \\\"visible\\\"|visible |Hide photos, videos, and link previews powered by Twitter Cards |\\n|''width'' |Positive integer |\\\"auto\\\", derived from container size |Set the maximum width of the embedded Tweet |\\n|''align''\\t|\\\"left\\\", \\\"right\\\", \\\"center\\\"\\t|none |Float the embedded Tweet to the left or right so that text wraps around it, or align center so it floats in the middle of a paragraph |\\n|''theme'' |\\\"dark\\\", \\\"light\\\" |\\\"light\\\"\\t|Toggle the default color scheme of the embedded Tweet |\\n|''linkColor'' |Hexadecimal color |\\\"#2b7bb9\\\" |Adjust the color of links, including hashtags and @mentions, inside the widget |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"timelineList\\\" ownerScreenName=\\\"isaach\\\" slug=\\\"home-timeline\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/mentionbutton\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/mentionbutton\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Mention Button\",\n \"text\": \"!! Embedding Mention Buttons\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"mentionButton\\\" |none |\\\"mentionButton\\\" |\\n|''screenName'' |Screen name of the account to be mentioned |none | |\\n|''text'' |Any string |none |The default, highlighted text a user sees in the Tweet web intent |\\n|''hashtags'' |A comma-separated list of hashtags |none |A list of hashtags to be appended to default Tweet text where appropriate |\\n|''align'' |\\\"left\\\", \\\"right\\\" |locale dependent (left or right, depending on the text direction of the language) |The alignment of the button within an iframe; use this to ensure flush layout when aligning buttons |\\n|''size'' |\\\"medium\\\", \\\"large\\\" |medium |Size of button |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"mentionButton\\\" screenName=\\\"TiddlyWiki\\\"/>\\n\\\"\\\"\\\">>\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/profiletimeline\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/profiletimeline\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Profile Timeline\",\n \"text\": \"!! Embedding Profile Timelines\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"timelineProfile\\\" |none |\\\"timelineProfile\\\" |\\n|''screenName'' |Screen name of the account |none |Either ''screenName'' or ''userId'' must be provided |\\n|''userId'' |User ID of the account |none |~|\\n|''chrome'' |\\\"noheader\\\", \\\"nofooter\\\", \\\"noborders\\\", \\\"transparent\\\", \\\"noscrollbar\\\" |none |Toggle the display of design elements in the widget. This parameter is a space-separated list of values |\\n|''height'' |Positive integer |600 |Set a fixed height of the embedded widget |\\n|''tweetLimit'' |Range: 1-20 |none |Render a timeline statically, displaying only n number of Tweets |\\n|''borderColor'' |Hexadecimal color |Varies by theme |Adjust the color of borders inside the widget |\\n|''ariaPolite'' |\\\"polite\\\", \\\"assertive\\\", \\\"rude\\\" |\\\"polite\\\" |Apply the specified aria-polite behavior to the rendered timeline. New Tweets may be added to the top of a timeline, affecting screen readers |\\n|''conversation'' |\\\"none\\\", \\\"all\\\" |\\\"all\\\" |Tweets in response to another Tweet will display a compact version of the previous Tweet by default. Use \\\"none\\\" to hide the parent Tweet in the conversation |\\n|''cards'' |\\\"hidden\\\", \\\"visible\\\"|visible |Hide photos, videos, and link previews powered by Twitter Cards |\\n|''width'' |Positive integer |\\\"auto\\\", derived from container size |Set the maximum width of the embedded Tweet |\\n|''align''\\t|\\\"left\\\", \\\"right\\\", \\\"center\\\"\\t|none |Float the embedded Tweet to the left or right so that text wraps around it, or align center so it floats in the middle of a paragraph |\\n|''theme'' |\\\"dark\\\", \\\"light\\\" |\\\"light\\\"\\t|Toggle the default color scheme of the embedded Tweet |\\n|''linkColor'' |Hexadecimal color |\\\"#2b7bb9\\\" |Adjust the color of links, including hashtags and @mentions, inside the widget |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"timelineProfile\\\" screenName=\\\"tiddlywiki\\\"/>\\n\\\"\\\"\\\">>\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/sharebutton\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/sharebutton\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Share Button\",\n \"text\": \"!! Embedding Share Buttons\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"shareButton\\\" |none |\\\"shareButton\\\" |\\n|''url'' |The URL to be shared |none | |\\n|''text'' |Any string |none |The default, highlighted text a user sees in the Tweet web intent |\\n|''hashtags'' |A comma-separated list of hashtags |none |A list of hashtags to be appended to default Tweet text where appropriate |\\n|''align'' |\\\"left\\\", \\\"right\\\" |locale dependent (left or right, depending on the text direction of the language) |The alignment of the button within an iframe; use this to ensure flush layout when aligning buttons |\\n|''size'' |\\\"medium\\\", \\\"large\\\" |medium |Size of button |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"shareButton\\\" url=\\\"https://tiddlywiki.com/\\\" text=\\\"Mind blown!\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/tweet\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/tweet\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Tweet\",\n \"text\": \"!! Embedding Tweets\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"tweet\\\" |none |\\\"tweet\\\" |\\n|''tweetID'' |ID of the tweet to render |none | |\\n|''conversation'' |\\\"none\\\", \\\"all\\\" |\\\"all\\\" |Tweets in response to another Tweet will display a compact version of the previous Tweet by default. Use \\\"none\\\" to hide the parent Tweet in the conversation |\\n|''cards'' |\\\"hidden\\\", \\\"visible\\\"|visible |Hide photos, videos, and link previews powered by Twitter Cards |\\n|''width'' |Positive integer |\\\"auto\\\", derived from container size |Set the maximum width of the embedded Tweet |\\n|''align''\\t|\\\"left\\\", \\\"right\\\", \\\"center\\\"\\t|none |Float the embedded Tweet to the left or right so that text wraps around it, or align center so it floats in the middle of a paragraph |\\n|''theme'' |\\\"dark\\\", \\\"light\\\" |\\\"light\\\"\\t|Toggle the default color scheme of the embedded Tweet |\\n|''linkColor'' |Hexadecimal color |\\\"#2b7bb9\\\" |Adjust the color of links, including hashtags and @mentions, inside the widget |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |true, false |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"tweet\\\" tweetID=\\\"750677030589587456\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/urltimeline\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/urltimeline\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Url Timeline\",\n \"text\": \"!! Embedding Profile Timelines\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"timelineUrl\\\" |none |\\\"timelineUrl\\\" |\\n|''url'' |Absolute URL of a Twitter profile, likes, list, or collection |none | |\\n|''chrome'' |\\\"noheader\\\", \\\"nofooter\\\", \\\"noborders\\\", \\\"transparent\\\", \\\"noscrollbar\\\" |none |Toggle the display of design elements in the widget. This parameter is a space-separated list of values |\\n|''height'' |Positive integer |600 |Set a fixed height of the embedded widget |\\n|''tweetLimit'' |Range: 1-20 |none |Render a timeline statically, displaying only n number of Tweets |\\n|''borderColor'' |Hexadecimal color |Varies by theme |Adjust the color of borders inside the widget |\\n|''ariaPolite'' |\\\"polite\\\", \\\"assertive\\\", \\\"rude\\\" |\\\"polite\\\" |Apply the specified aria-polite behavior to the rendered timeline. New Tweets may be added to the top of a timeline, affecting screen readers |\\n|''conversation'' |\\\"none\\\", \\\"all\\\" |\\\"all\\\" |Tweets in response to another Tweet will display a compact version of the previous Tweet by default. Use \\\"none\\\" to hide the parent Tweet in the conversation |\\n|''cards'' |\\\"hidden\\\", \\\"visible\\\"|visible |Hide photos, videos, and link previews powered by Twitter Cards |\\n|''width'' |Positive integer |\\\"auto\\\", derived from container size |Set the maximum width of the embedded Tweet |\\n|''align''\\t|\\\"left\\\", \\\"right\\\", \\\"center\\\"\\t|none |Float the embedded Tweet to the left or right so that text wraps around it, or align center so it floats in the middle of a paragraph |\\n|''theme'' |\\\"dark\\\", \\\"light\\\" |\\\"light\\\"\\t|Toggle the default color scheme of the embedded Tweet |\\n|''linkColor'' |Hexadecimal color |\\\"#2b7bb9\\\" |Adjust the color of links, including hashtags and @mentions, inside the widget |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"timelineUrl\\\" url=\\\"https://twitter.com/TiddlyWiki\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage/widgettimeline\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage/widgettimeline\",\n \"tags\": \"$:/tags/TwitterUsage\",\n \"caption\": \"Widget Timeline\",\n \"text\": \"!! Embedding Widget Timelines\\n\\nTo power an embedded timeline with a widget configuration generated at https://twitter.com/settings/widgets.\\n\\n|!Attribute |!Values |!Default |!Notes |\\n|''type'' |\\\"timelineWidget\\\" |none |\\\"timelineWidget\\\" |\\n|''widgetId'' |ID of the widget |none |~|\\n|''chrome'' |\\\"noheader\\\", \\\"nofooter\\\", \\\"noborders\\\", \\\"transparent\\\", \\\"noscrollbar\\\" |none |Toggle the display of design elements in the widget. This parameter is a space-separated list of values |\\n|''height'' |Positive integer |600 |Set a fixed height of the embedded widget |\\n|''tweetLimit'' |Range: 1-20 |none |Render a timeline statically, displaying only n number of Tweets |\\n|''borderColor'' |Hexadecimal color |Varies by theme |Adjust the color of borders inside the widget |\\n|''ariaPolite'' |\\\"polite\\\", \\\"assertive\\\", \\\"rude\\\" |\\\"polite\\\" |Apply the specified aria-polite behavior to the rendered timeline. New Tweets may be added to the top of a timeline, affecting screen readers |\\n|''conversation'' |\\\"none\\\", \\\"all\\\" |\\\"all\\\" |Tweets in response to another Tweet will display a compact version of the previous Tweet by default. Use \\\"none\\\" to hide the parent Tweet in the conversation |\\n|''cards'' |\\\"hidden\\\", \\\"visible\\\"|visible |Hide photos, videos, and link previews powered by Twitter Cards |\\n|''width'' |Positive integer |\\\"auto\\\", derived from container size |Set the maximum width of the embedded Tweet |\\n|''align''\\t|\\\"left\\\", \\\"right\\\", \\\"center\\\"\\t|none |Float the embedded Tweet to the left or right so that text wraps around it, or align center so it floats in the middle of a paragraph |\\n|''theme'' |\\\"dark\\\", \\\"light\\\" |\\\"light\\\"\\t|Toggle the default color scheme of the embedded Tweet |\\n|''linkColor'' |Hexadecimal color |\\\"#2b7bb9\\\" |Adjust the color of links, including hashtags and @mentions, inside the widget |\\n|''lang'' |An ISO 639-1 language code |en |The language in which to render a widget, if supported |\\n|''dnt'' |\\\"true\\\", \\\"false\\\" |false |Enable Do Not Track for this widget |\\n|''related'' |Any comma-separated list of valid Twitter screen names |none |A list of Twitter screen names to be suggested for following after a Tweet or Tweet action is posted |\\n|''via'' |Any valid Twitter screen name |none |A Twitter user mentioned in the default Tweet text as via @user where appropriate |\\n\\n<<twitter-usage \\\"\\\"\\\"<$twitter type=\\\"timelineWidget\\\" widgetId=\\\"570670821065379840\\\"/>\\n\\\"\\\"\\\">>\\n\"\n },\n \"$:/plugins/tiddlywiki/twitter/usage\": {\n \"title\": \"$:/plugins/tiddlywiki/twitter/usage\",\n \"text\": \"The `<$twitter>` widget can be used to embed several different entities:\\n\\n<$macrocall $name=\\\"tabs\\\" state=<<qualify \\\"$:/state/twitter/usage\\\">> tabsList=\\\"[all[tiddlers+shadows]tag[$:/tags/TwitterUsage]]\\\" default=\\\"$:/plugins/tiddlywiki/twitter/usage/tweet\\\" class=\\\"tc-vertical\\\"/>\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/upgrade":{"title":"$:/plugins/tiddlywiki/upgrade","name":"Upgrade","description":"Upgrade system for TiddlyWiki versions","list":"readme","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/DefaultTiddlers\": {\n \"title\": \"$:/DefaultTiddlers\"\n },\n \"$:/SiteSubtitle\": {\n \"title\": \"$:/SiteSubtitle\",\n \"text\": \"upgrade your files to the latest version\"\n },\n \"$:/SiteTitle\": {\n \"title\": \"$:/SiteTitle\",\n \"text\": \"~TiddlyWiki Upgrader\"\n },\n \"$:/config/Navigation/UpdateAddressBar\": {\n \"title\": \"$:/config/Navigation/UpdateAddressBar\",\n \"text\": \"no\"\n },\n \"$:/UpgradeWizard\": {\n \"title\": \"$:/UpgradeWizard\",\n \"created\": \"20150228154208000\",\n \"tags\": \"$:/tags/AboveStory\",\n \"text\": \"<div class=\\\"tc-upgrade-wizard-wrapper\\\">\\n\\n<div class=\\\"tc-upgrade-wizard\\\">\\n\\n! ~TiddlyWiki Upgrade Wizard\\n\\n<$list filter=\\\"[[$:/Import]is[missing]]\\\">\\n\\n{{$:/core/images/download-button}}\\n\\nDrag a ~TiddlyWiki file here to upgrade it\\n\\nor click to pick a file <$browse/>\\n\\n</$list>\\n\\n<$reveal state=\\\"$:/Import!!status\\\" type=\\\"match\\\" text=\\\"pending\\\">\\n\\nThe following tiddlers will be included in the upgrade <$button message=\\\"tm-perform-import\\\" param=\\\"$:/Import\\\">Upgrade</$button>\\n\\n{{$:/Import||$:/core/ui/ImportListing}}\\n\\n</$reveal>\\n\\n<$reveal state=\\\"$:/Import!!status\\\" type=\\\"match\\\" text=\\\"complete\\\">\\n\\nUpgrade completed. Click the button below to save your upgraded ~TiddlyWiki file\\n\\nMake sure that you keep a safe copy of your previous ~TiddlyWiki file.\\n\\n<$reveal type=\\\"match\\\" state=\\\"$:/isEncrypted\\\" text=\\\"yes\\\">\\n\\n''The file will be encrypted with your existing password.''\\n\\n</$reveal>\\n\\n{{$:/plugins/tiddlywiki/upgrade/save}}\\n\\nClose this browser window to prevent others from being able to access your data.\\n\\nFor help and support, visit [[the TiddlyWiki discussion forum|http://groups.google.com/group/TiddlyWiki]].\\n\\n</$reveal>\\n\\n</div>\\n\\nversion <<version>>\\n\\n//Your data will not leave your browser. <a href=\\\"#\\\" download=\\\"upgrade.html\\\">Download</a> this upgrader to use it offline//\\n\\n//If clicking the link doesn't work, right-click the link and save it that way.//\\n\\n//Your browser may ask you to accept the download before it begins.//\\n\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/upgrade/config.js\": {\n \"title\": \"$:/plugins/tiddlywiki/upgrade/config.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/upgrade/config.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nStartup module for configuring the upgrade plugin\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"upgrade-config\\\";\\nexports.before = [\\\"startup\\\"];\\nexports.synchronous = true;\\n\\nexports.startup = function() {\\n\\t// See $tw.utils.decryptStoreAreaInteractive() in $:/core/modules/utils/crypto.js\\n\\t$tw.config.usePasswordVault = true;\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/favicon.ico\": {\n \"title\": \"$:/favicon.ico\",\n \"text\": \"AAABAAIAICAAAAEAIAAoFAAAJgAAAEBAAAABACAAKFAAAE4UAAAoAAAAIAAAAEAAAAABACAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOi5ogvosJ165KCI0uCTee7diW352n1e/tp9Xv7diW354JN57uSgiNLosJ166LmiCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO67pC3joIfT2n5f/th4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//afl/+46CH0+67pC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOvEsQ3lpI/B2n1d/th4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2n1d/uWkj8HrxLENAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuu6Qt35B18th4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9+QdfLuu6QtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6bWjU9yFaPvYeFf/2HhX/9h4V//YeFf/2HhX/9yGaf/osJ3/89jO//nq5f/9+Pf//fj3//nq5f/z2M7/6LCd/9yGaf/YeFf/2HhX/9h4V//YeFf/2HhX/9yFaPvptKJSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO67pC3chWj72HhX/9h4V//YeFf/2HhX/9uFaP/vyr3//v39/////////////////////////////////////////////v39/+/Kvf/bhWj/2HhX/9h4V//YeFf/2HhX/9yFaPvuu6QtAAAAAAAAAAAAAAAAAAAAAAAAAADrxLEN35B18th4V//YeFf/2HhX/9h4V//joYr//fj2//////////////////////////////////////////////////////////////////349v/joYr/2HhX/9h4V//YeFf/2HhX/9+QdfLrxLENAAAAAAAAAAAAAAAAAAAAAOWkj8HYeFf/2HhX/9h4V//YeFf/6LKf//79/f////////////////////////////////////////////////////////////////////////////79/f/osZ7/2HhX/9h4V//YeFf/2HhX/+Wkj8EAAAAAAAAAAAAAAADuu6Qt2n1d/th4V//YeFf/2HhX/+Ohiv/+/f3//////////////////////////////////v7+/4qKiv9qamr/8PDw//////////////////////////////////79/f/joYr/2HhX/9h4V//YeFf/2n1d/u67pC0AAAAAAAAAAOOgh9PYeFf/2HhX/9h4V//bhWj//fj2//////////////////////////////////////9qamr/AAAA/wAAAP83Nzf/8fHx//////////////////////////////////349v/bhWj/2HhX/9h4V//YeFf/46CH0wAAAADouaIL2n5f/th4V//YeFf/2HhX/+/Kvf//////////////////////////////////////bW1t/wAAAP8AAAD/AAAA/wAAAP85OTn/8vLy/////////////////////////////////+/Kvf/YeFf/2HhX/9h4V//afl/+6LmiC+iwnXrYeFf/2HhX/9h4V//chmn//v39/////////////////////////////////29vb/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP87Ozv/8/Pz/////////////////////////////v39/9yGaf/YeFf/2HhX/9h4V//osJ165KCI0th4V//YeFf/2HhX/+iwnf////////////////////////////////9ycnL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP89PT3/9PT0////////////////////////////6LCd/9h4V//YeFf/2HhX/+SgiNLgk3nu2HhX/9h4V//YeFf/89jO////////////////////////////dXV1/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8/Pz//9fX1///////////////////////z2M7/2HhX/9h4V//YeFf/4JN57t2JbfnYeFf/2HhX/9h4V//56uX//////////////////////3h4eP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9BQUH/9vb2//////////////////nq5f/YeFf/2HhX/9h4V//diW352n1e/th4V//YeFf/2HhX//349/////////////////+Wlpb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9WVlb//////////////////fj3/9h4V//YeFf/2HhX/9p+Xv7afV7+2HhX/9h4V//YeFf//fj3/////////////////2JiYv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yIiIv/////////////////9+Pf/2HhX/9h4V//YeFf/2n1e/t2JbfnYeFf/2HhX/9h4V//56uX/////////////////8vLy/6ampv+enp7/kZGR/yEhIf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8KCgr/gYGB/56env+fn5//4eHh//////////////////nq5f/YeFf/2HhX/9h4V//diW354JN57th4V//YeFf/2HhX//PYzv//////////////////////////////////////m5ub/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1tbW///////////////////////////////////////89jO/9h4V//YeFf/2HhX/+CTee7koIjS2HhX/9h4V//YeFf/6LCd//////////////////////////////////////+rq6v/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/a2tr///////////////////////////////////////osJ3/2HhX/9h4V//YeFf/5KCI0uiwnXrYeFf/2HhX/9h4V//chmn//v39/////////////////////////////////6urq/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9ra2v//////////////////////////////////v39/9yGaf/YeFf/2HhX/9h4V//osJ166LmiC9p+X/7YeFf/2HhX/9h4V//vyr3/////////////////////////////////q6ur/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/2tra//////////////////////////////////vyr3/2HhX/9h4V//YeFf/2n5f/ui5ogsAAAAA46CH09h4V//YeFf/2HhX/9uFaP/9+Pb////////////////////////////CwsL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/goKC/////////////////////////////fj2/9uFaP/YeFf/2HhX/9h4V//joIfTAAAAAAAAAADuu6Qt2n1d/th4V//YeFf/2HhX/+Ohiv/+/f3///////////////////////7+/v+kpKT/f39//39/f/9/f3//f39//5GRkf/x8fH///////////////////////79/f/joYr/2HhX/9h4V//YeFf/2n1d/u67pC0AAAAAAAAAAAAAAADlpI/B2HhX/9h4V//YeFf/2HhX/+iyn//+/f3////////////////////////////////////////////////////////////////////////////+/f3/6LGe/9h4V//YeFf/2HhX/9h4V//lpI/BAAAAAAAAAAAAAAAAAAAAAOvEsQ3fkHXy2HhX/9h4V//YeFf/2HhX/+Ohiv/9+Pb//////////////////////////////////////////////////////////////////fj2/+Ohiv/YeFf/2HhX/9h4V//YeFf/35B18uvEsQ0AAAAAAAAAAAAAAAAAAAAAAAAAAO67pC3chWj72HhX/9h4V//YeFf/2HhX/9uFaP/vyr3//v39/////////////////////////////////////////////v39/+/Kvf/bhWj/2HhX/9h4V//YeFf/2HhX/9yFaPvuu6QtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOm1o1PchWj72HhX/9h4V//YeFf/2HhX/9h4V//chmn/6LCd//PYzv/56uX//fj3//34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V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9l7Wv7nq5aeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zJkF5aGLzNh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2Xxc/+Ohiv/tw7X/89jP//nr5//89PL//vv7//77+//89PL/+evn//PYz//tw7X/46GK/9l8XP/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+Whi8z/zJkFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zJkF4Zd+59h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9qBYv/mqpb/8tTK//35+P/////////////////////////////////////////////////////////////////9+fj/8tTK/+aqlv/agWL/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/4Zd+5//MmQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5aGLzNh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2X1d/+q5qP/9+Pb//////////////////////////////////////////////////////////////////////////////////////////////////fj2/+q5qP/ZfV3/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//loYvMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA56uWnth4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeVj/566a//vx7v//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/Hu/+eumv/YeVj/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+erlp4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6bOfaNl7Wv7YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//chmj/9+Pc////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9+Pc/9yGaP/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//Ze1r+6bOfaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LakONuCZP3YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//glXv/+/Hu///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////78e7/4JV7/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9uCZP3otqQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Ad+Rd/HYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//mqJP//fr5//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////36+f/mqJP/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/35F38f///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOerl53YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//mqJP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+aok//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//nq5edAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO67qh7bgmT92HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//glXv//fr5//////////////////////////////////////////////////////////////////////////////////////+urq7/j4+P/+Hh4f/////////////////////////////////////////////////////////////////////////////////9+vn/4JV7/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/24Jk/e67qh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmpI+/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//chmj/+/Hu//////////////////////////////////////////////////////////////////////////////////v7+/9VVVX/AAAA/wAAAP8NDQ3/wsLC//////////////////////////////////////////////////////////////////////////////////vx7v/chmj/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//mpI+/AAAAAAAAAAAAAAAAAAAAAAAAAADruKMZ24Bi/dh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeVj/9+Pc//////////////////////////////////////////////////////////////////////////////////v7+/9VVVX/AAAA/wAAAP8AAAD/AAAA/wwMDP/ExMT/////////////////////////////////////////////////////////////////////////////////9+Pc/9h5WP/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/24Bi/eu4oxkAAAAAAAAAAAAAAAAAAAAA5aiSsth4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/566a//////////////////////////////////////////////////////////////////////////////////z8/P9XV1f/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/DQ0N/8bGxv/////////////////////////////////////////////////////////////////////////////////nrpr/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//lqJKyAAAAAAAAAAAAAAAAAAAAAN2LbvjYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2X1d//vx7v////////////////////////////////////////////////////////////////////////////z8/P9aWlr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8ODg7/yMjI////////////////////////////////////////////////////////////////////////////+/Hu/9l9Xf/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/3Ytu+AAAAAAAAAAAAAAAAOuzo1vYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+q5qP////////////////////////////////////////////////////////////////////////////39/f9cXFz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w8PD//Kysr////////////////////////////////////////////////////////////////////////////quaj/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//rs6NbAAAAAAAAAADkoYvM2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9qBYv/9+Pb///////////////////////////////////////////////////////////////////////39/f9fX1//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/EBAQ/8zMzP///////////////////////////////////////////////////////////////////////fj2/9qBYv/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/5KGLzAAAAAAAAAAA3Ytv99h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//mqpb///////////////////////////////////////////////////////////////////////7+/v9hYWH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8RERH/zs7O///////////////////////////////////////////////////////////////////////mqpb/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/92Lb/cAAAAA7LmmKNl4V/7YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/8tTK//////////////////////////////////////////////////////////////////7+/v9kZGT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xISEv/Q0ND/////////////////////////////////////////////////////////////////8tTK/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//ZeFf+7LmmKOmwm4rYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2Xxc//35+P////////////////////////////////////////////////////////////7+/v9nZ2f/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ExMT/9LS0v////////////////////////////////////////////////////////////35+P/ZfFz/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+mwm4rlpo+92HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+Ohiv////////////////////////////////////////////////////////////////9paWn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8VFRX/09PT////////////////////////////////////////////////////////////46GK/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//lpo+94pqC39h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//tw7X///////////////////////////////////////////////////////////9sbGz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFv/V1dX//////////////////////////////////////////////////////+3Dtf/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/4pqC39+Oc/TYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/89jP//////////////////////////////////////////////////////9vb2//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FxcX/9fX1//////////////////////////////////////////////////z2M//2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9+Oc/Tch2r62HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX//nr5/////////////////////////////////////////////////9xcXH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8YGBj/2NjY////////////////////////////////////////////+evn/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//ch2r624Fj/dh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//89PL///////////////////////////////////////////92dnb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGv/c3Nz///////////////////////////////////////z08v/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/24Fj/dl7Wv7YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf//vv7//////////////////////////////////////+/v7//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/QEBA///////////////////////////////////////++/v/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9l7Wv7Ze1r+2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX//77+///////////////////////////////////////jIyM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wwMDP///////////////////////////////////////vv7/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//Ze1r+24Fj/dh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//89PL//////////////////////////////////////83Nzf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9QUFD///////////////////////////////////////z08v/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/24Fj/dyHavrYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/+evn////////////////////////////////////////////s7Oz/01NTf88PDz/PDw8/zw8PP88PDz/IyMj/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8LCwv/NjY2/zw8PP88PDz/PDw8/z4+Pv9wcHD/7+/v///////////////////////////////////////56+f/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9yHavrfjnP02HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX//PYz/////////////////////////////////////////////////////////////////////////////////+enp7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/6urq////////////////////////////////////////////////////////////////////////////89jP/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//fjnP04pqC39h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//tw7X//////////////////////////////////////////////////////////////////////////////////////zU1Nf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/tra2/////////////////////////////////////////////////////////////////////////////////+3Dtf/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/4pqC3+Wmj73YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/46GK//////////////////////////////////////////////////////////////////////////////////////9WVlb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9bW1v/////////////////////////////////////////////////////////////////////////////////joYr/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+Wmj73psJuK2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9l8XP/9+fj/////////////////////////////////////////////////////////////////////////////////VlZW/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/W1tb////////////////////////////////////////////////////////////////////////////9+fj/2Xxc/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//psJuK7LmmKNl4V/7YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/8tTK/////////////////////////////////////////////////////////////////////////////////1ZWVv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/1tbW////////////////////////////////////////////////////////////////////////////8tTK/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//ZeFf+7LmmKAAAAADdi2/32HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+aqlv////////////////////////////////////////////////////////////////////////////////9WVlb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9bW1v///////////////////////////////////////////////////////////////////////////+aqlv/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/3Ytv9wAAAAAAAAAA5KGLzNh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//agWL//fj2////////////////////////////////////////////////////////////////////////////VlZW/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/W1tb///////////////////////////////////////////////////////////////////////349v/agWL/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+Shi8wAAAAAAAAAAOuzo1vYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+q5qP///////////////////////////////////////////////////////////////////////////1ZWVv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/1tbW///////////////////////////////////////////////////////////////////////quaj/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//rs6NbAAAAAAAAAAAAAAAA3Ytu+Nh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//ZfV3/+/Hu//////////////////////////////////////////////////////////////////////9WVlb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9bW1v/////////////////////////////////////////////////////////////////78e7/2X1d/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//di274AAAAAAAAAAAAAAAAAAAAAOWokrLYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+eumv//////////////////////////////////////////////////////////////////////WVlZ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Z2dn/////////////////////////////////////////////////////////////////566a/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/5aiSsgAAAAAAAAAAAAAAAAAAAADruKMZ24Bi/dh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeVj/9+Pc/////////////////////////////////////////////////////////////////4uLi/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8RERH/+vr6////////////////////////////////////////////////////////////9+Pc/9h5WP/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/24Bi/eu4oxkAAAAAAAAAAAAAAAAAAAAAAAAAAOakj7/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9yGaP/78e7////////////////////////////////////////////////////////////4+Pj/XV1d/woKCv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8lJSX/u7u7////////////////////////////////////////////////////////////+/Hu/9yGaP/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+akj78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuu6oe24Jk/dh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/4JV7//36+f///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fr5/+CVe//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9uCZP3uu6oeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOerl53YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//mqJP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+aok//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//nq5edAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B35F38dh4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/+aok//9+vn//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fr5/+aok//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//fkXfx////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOi2pDjbgmT92HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/4JV7//vx7v//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+/Hu/+CVe//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//bgmT96LakOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6bOfaNl7Wv7YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//chmj/9+Pc////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9+Pc/9yGaP/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//Ze1r+6bOfaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADnq5ae2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h5WP/nrpr/+/Hu///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////78e7/566a/9h5WP/YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/56uWngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOWhi8zYeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9l9Xf/quaj//fj2//////////////////////////////////////////////////////////////////////////////////////////////////349v/quaj/2X1d/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/5aGLzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zJkF4Zd+59h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9qBYv/mqpb/8tTK//35+P/////////////////////////////////////////////////////////////////9+fj/8tTK/+aqlv/agWL/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/4Zd+5//MmQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/MmQXloYvM2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//ZfFz/46GK/+3Dtf/z2M//+evn//z08v/++/v//vv7//z08v/56+f/89jP/+3Dtf/joYr/2Xxc/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/5aGLzP/MmQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOerlp7Ze1r+2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//YeFf/2HhX/9h4V//Ze1r+56uWngAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\n \"type\": \"image/x-icon\"\n },\n \"$:/core/ui/PageTemplate/pluginreloadwarning\": {\n \"title\": \"$:/core/ui/PageTemplate/pluginreloadwarning\",\n \"text\": \"<!-- Disable plugin reload warnings -->\\n\"\n },\n \"$:/plugins/tiddlywiki/upgrade/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/upgrade/readme\",\n \"text\": \"This plugin contains the user interface components used to build the special [[upgrade edition|https://tiddlywiki.com/upgrade.html]].\\n\\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/upgrade]]\\n\"\n },\n \"$:/plugins/tiddlywiki/upgrade/save-tiddler-filter\": {\n \"title\": \"$:/plugins/tiddlywiki/upgrade/save-tiddler-filter\",\n \"text\": \"\\\\define saveTiddlerFilter()\\n[is[tiddler]] -[[$:/UpgradeLibrary]] -[[$:/plugins/tiddlywiki/upgrade]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\\n\\\\end\\n{{$:/core/templates/tiddlywiki5.html}}\\n\"\n },\n \"$:/plugins/tiddlywiki/upgrade/save\": {\n \"title\": \"$:/plugins/tiddlywiki/upgrade/save\",\n \"text\": \"<$button message=\\\"tm-download-file\\\" param=\\\"$:/plugins/tiddlywiki/upgrade/save-tiddler-filter\\\" class=\\\"tc-btn-big-green\\\">Save upgraded ~TiddlyWiki file {{$:/core/images/save-button}}</$button>\\n\"\n },\n \"$:/plugins/tiddlywiki/upgrade/set-auto-open-on-import\": {\n \"title\": \"$:/plugins/tiddlywiki/upgrade/set-auto-open-on-import\",\n \"tags\": \"$:/tags/Macro\",\n \"text\": \"\\\\define tv-auto-open-on-import()\\nno\\n\\\\end\\n\"\n },\n \"$:/state/sidebar\": {\n \"title\": \"$:/state/sidebar\",\n \"text\": \"no\"\n },\n \"$:/plugins/tiddlywiki/upgrade/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/upgrade/styles\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \".tc-upgrade-wizard-wrapper {\\n\\twidth: 100%;\\n\\ttext-align: center;\\n\\tmargin-bottom: 3em;\\n}\\n\\n.tc-upgrade-wizard {\\n\\tbackground: <<colour tiddler-background>>;\\n\\tpadding: 2em;\\n\\tdisplay: inline-block;\\n\\tposition: relative;\\n\\tborder: 1px solid #ddd;\\n\\t<<box-shadow \\\"inset 1px 2px 4px rgba(0, 0, 0, 0.15)\\\">>;\\n\\toverflow: hidden;\\n}\\n\\n.tc-upgrade-wizard svg.tc-image-download-button {\\n\\twidth: 14em;\\n\\theight: 14em;\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-upgrade-wizard:hover svg.tc-image-download-button {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-upgrade-wizard svg .tc-image-download-button-ring {\\n}\\n\\n.tc-upgrade-wizard:hover svg .tc-image-download-button-ring {\\n\\tfill: <<colour primary>>;\\n}\\n\\n.tc-upgrade-wizard em {\\n\\tcolor: <<colour tiddler-subtitle-foreground>>;\\n}\\n\\n.tc-upgrade-wizard table {\\n\\ttext-align: left;\\n}\\n\\n.tc-upgrade-wizard input[type=file] {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tfont-size: 999px;\\n\\tmax-width: 100%;\\n\\tmax-height: 100%;\\n\\tfilter: alpha(opacity=0);\\n\\topacity: 0;\\n\\toutline: none;\\n\\tbackground: white;\\n\\tcursor: pointer;\\n\\tdisplay: block;\\n}\\n\"\n }\n }\n}"},"$:/plugins/tiddlywiki/xlsx-utils":{"title":"$:/plugins/tiddlywiki/xlsx-utils","name":"XLSX Utils","description":"XLSX spreadsheet utilities","list":"readme controls license","dependents":"$:/plugins/tiddlywiki/jszip","version":"5.1.23-prerelease","plugin-type":"plugin","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/xlsx-utils/controls\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/controls\",\n \"caption\": \"XLSX Utilities\",\n \"tags\": \"$:/tags/ControlPanel\",\n \"text\": \"\\\\define help-button(state)\\n<$button popup=\\\"\\\"\\\"$:/state/expand-help/$state$\\\"\\\"\\\" class=\\\"tc-btn-invisible tc-popup-keep\\\">\\n{{$:/core/images/help}}\\n</$button>\\n\\\\end\\n\\n\\\\define help-content(type,state)\\n<$reveal tag=\\\"span\\\" state=\\\"\\\"\\\"$:/state/expand-help/$state$\\\"\\\"\\\" type=\\\"popup\\\" position=\\\"below\\\">\\n<div class=\\\"tc-drop-down tc-popup-keep\\\" style=\\\"padding: 0.5em; max-width: 30em; white-space: normal;\\\">\\n<$transclude tiddler=\\\"\\\"\\\"$:/plugins/tiddlywiki/xlsx-utils/docs/$type$\\\"\\\"\\\" mode=\\\"block\\\"/>\\n</div>\\n</$reveal>\\n\\\\end\\n\\n\\\\define renameProxyTitle()\\n$:/state/plugins/tiddlywiki/xlsx-utils/rename-$(currentTiddler)$\\n\\\\end\\n\\n\\\\define rename-current-tiddler()\\n<$edit-text tag=\\\"input\\\" tiddler=<<renameProxyTitle>> placeholder=\\\"Rename\\\" default=<<currentTiddler>> size=\\\"50\\\"/>\\n<$reveal type=\\\"nomatch\\\" state=\\\"\\\"\\\"$(renameProxyTitle)$\\\"\\\"\\\" text=<<currentTiddler>> default=<<currentTiddler>> tag=\\\"span\\\">\\n<$button>\\n<$action-deletetiddler $tiddler=<<renameProxyTitle>>/>\\ncancel\\n</$button>\\n<$button>\\n<$action-sendmessage $message=\\\"tm-rename-tiddler\\\" from=<<currentTiddler>> to={{$(renameProxyTitle)$}}/>\\n<$action-deletetiddler $tiddler=<<renameProxyTitle>>/>\\nrename\\n</$button>\\n<$set name=\\\"proxy-title\\\" value={{$(renameProxyTitle)$}}>\\n<$list filter=\\\"\\\"\\\"[<proxy-title>is[tiddler]]\\\"\\\"\\\">\\nWarning: tiddler already exists\\n</$list>\\n</$set>\\n</$reveal>\\n\\\\end\\n\\n\\\\define expand-collapse-button(state)\\n<$reveal state=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" $value=\\\"no\\\"/>\\n{{$:/core/images/down-arrow}}\\n</$button>\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" $value=\\\"yes\\\"/>\\n{{$:/core/images/right-arrow}}\\n</$button>\\n</$reveal>\\n\\\\end\\n\\n\\\\define expand-collapse-content(state,content,class)\\n<$reveal state=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"div\\\" class=\\\"\\\"\\\"$class$\\\"\\\"\\\" animate=\\\"yes\\\" retain=\\\"yes\\\">\\n$content$\\n</$reveal>\\n\\\\end\\n\\n\\\\define up-down-buttons(parent,child)\\n<$list filter=\\\"[list<$parent$>butfirst[]field:title<$child$>limit[1]]\\\" variable=\\\"listItem\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-listops $tiddler=<<$parent$>> $subfilter=\\\"+[move:-1<$child$>]\\\"/>\\n{{$:/core/images/chevron-up}}\\n</$button>\\n</$list>\\n<$list filter=\\\"[list<$parent$>butlast[]field:title<$child$>limit[1]]\\\" variable=\\\"listItem\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-listops $tiddler=<<$parent$>> $subfilter=\\\"+[move:1<$child$>]\\\"/>\\n{{$:/core/images/chevron-down}}\\n</$button>\\n</$list>\\n\\\\end\\n\\n\\\\define edit-button(state)\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$state$\\\"\\\"\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/edit/$state$\\\"\\\"\\\" $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/expand/$state$\\\"\\\"\\\" $value=\\\"yes\\\"/>\\n{{$:/core/images/edit-button}}\\n</$button>\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$state$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-setfield $tiddler=\\\"\\\"\\\"$:/state/edit/$state$\\\"\\\"\\\" $value=\\\"no\\\"/>\\n{{$:/core/images/done-button}} Finish editing\\n</$button>\\n</$reveal>\\n\\\\end\\n\\n\\\\define delete-item-button(filter,parent,title,prompt)\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-deletetiddler $filter=\\\"\\\"\\\"$filter$\\\"\\\"\\\"/>\\n<$action-listops $tiddler=\\\"\\\"\\\"$parent$\\\"\\\"\\\" $subfilter=\\\"-[[$title$]]\\\"/>\\n{{$:/core/images/delete-button}}$prompt$\\n</$button>\\n\\\\end\\n\\n\\\\define edit-field()\\n<$select tiddler=<<field>> field=\\\"import-field-list-op\\\" default=\\\"none\\\">\\n<option value=\\\"none\\\">Set field</option>\\n<option value=\\\"append\\\">Append to list field</option>\\n</$select>\\n<$edit-text tiddler=<<field>> field=\\\"import-field-name\\\" size=\\\"10\\\" tag=\\\"input\\\" placeholder=\\\"field name\\\"default=\\\"\\\"/>\\n<$reveal state=\\\"\\\"\\\"$(field)$!!import-field-list-op\\\"\\\"\\\" type=\\\"match\\\" text=\\\"none\\\" default=\\\"none\\\" tag=\\\"span\\\">\\nto\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$(field)$!!import-field-list-op\\\"\\\"\\\" type=\\\"match\\\" text=\\\"append\\\" default=\\\"none\\\" tag=\\\"span\\\">\\nthe\\n</$reveal>\\n<$select tiddler=<<field>> field=\\\"import-field-type\\\" default=\\\"string\\\">\\n<option value=\\\"date\\\">date</option>\\n<option value=\\\"string\\\">string</option>\\n</$select>\\n<$select tiddler=<<field>> field=\\\"import-field-source\\\" default=\\\"column\\\">\\n<option value=\\\"column\\\">from column</option>\\n<option value=\\\"constant\\\">constant</option>\\n</$select>\\n<$reveal state=\\\"\\\"\\\"$(field)$!!import-field-source\\\"\\\"\\\" type=\\\"match\\\" text=\\\"column\\\" default=\\\"column\\\" tag=\\\"span\\\">\\n<$edit-text tiddler=<<field>> field=\\\"import-field-column\\\" tag=\\\"input\\\" placeholder=\\\"column\\\" default=\\\"\\\"/>\\nprefixed\\n<$edit-text tiddler=<<field>> field=\\\"import-field-prefix\\\" tag=\\\"input\\\" placeholder=\\\"prefix\\\" default=\\\"\\\"/>,\\nsuffixed\\n<$edit-text tiddler=<<field>> field=\\\"import-field-suffix\\\" tag=\\\"input\\\" placeholder=\\\"suffix\\\" default=\\\"\\\"/>\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$(field)$!!import-field-source\\\"\\\"\\\" type=\\\"match\\\" text=\\\"constant\\\" default=\\\"column\\\" tag=\\\"span\\\">\\n<$edit-text tiddler=<<field>> field=\\\"import-field-value\\\" tag=\\\"input\\\" placeholder=\\\"constant\\\" default=\\\"\\\"/>\\n</$reveal>\\n<$checkbox tiddler=<<field>> field=\\\"import-field-skip-tiddler-if-blank\\\" checked=\\\"yes\\\" unchecked=\\\"no\\\" default=\\\"no\\\">\\nSkip this tiddler when field blank\\n<br/>\\nTitle:\\n<$tiddler tiddler=<<field>>>\\n<<rename-current-tiddler>>\\n</$tiddler>\\n\\\\end\\n\\n\\\\define view-field()\\n<$link to=<<field>>>\\n<$list filter=\\\"[<field>!has[import-field-list-op]]\\\" variable=\\\"listItem\\\">\\nSet field ''<$view tiddler=<<field>> field=\\\"import-field-name\\\"/>'' to\\n</$list>\\n<$list filter=\\\"[<field>get[import-field-list-op]prefix[append]]\\\" variable=\\\"listItem\\\">\\nAppend to list field ''<$view tiddler=<<field>> field=\\\"import-field-name\\\"/>''\\n</$list>\\n<$list filter=\\\"[<field>has[import-field-prefix]]\\\" variable=\\\"listItem\\\">\\n''<code><$view tiddler=<<field>> field=\\\"import-field-prefix\\\"/></code>'' +\\n</$list>\\n<$list filter=\\\"[<field>get[import-field-type]prefix[date]]\\\" variable=\\\"listItem\\\">\\ndate\\n</$list>\\n<$list filter=\\\"[<field>get[import-field-source]prefix[column]]\\\" variable=\\\"listItem\\\">\\nvalue from column ''<$view tiddler=<<field>> field=\\\"import-field-column\\\"/>''\\n</$list>\\n<$list filter=\\\"[<field>get[import-field-source]prefix[constant]]\\\" variable=\\\"listItem\\\">\\nconstant ''<code><$view tiddler=<<field>> field=\\\"import-field-value\\\"/></code>''\\n</$list>\\n<$list filter=\\\"[<field>has[import-field-suffix]]\\\" variable=\\\"listItem\\\">\\n+ ''<code><$view tiddler=<<field>> field=\\\"import-field-suffix\\\"/></code>''\\n</$list>\\n</$link>\\n\\\\end\\n\\n\\\\define list-fields()\\n<ul class=\\\"tc-import-spec-row-list\\\">\\n<$list filter=\\\"[list<row>]\\\" variable=\\\"field\\\" emptyMessage=\\\"<div>(No field import specifiers)</div>\\\">\\n<li class=\\\"tc-import-spec-field-wrapper\\\">\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(row)$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<<edit-field>>\\n<<up-down-buttons parent:\\\"row\\\" child:\\\"field\\\">>\\n<$macrocall $name=\\\"delete-item-button\\\" filter=\\\"[<field>]\\\" parent=<<row>> title=<<field>>/>\\n</$reveal>\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(row)$\\\"\\\"\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"span\\\">\\n<<view-field>>\\n</$reveal>\\n</li>\\n</$list>\\n</ul>\\n\\\\end\\n\\n\\\\define view-row-content()\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(row)$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"ul\\\" class=\\\"tc-import-spec-row-controls\\\" animate=\\\"yes\\\" retain=\\\"yes\\\">\\n<li>\\n<$macrocall $name=\\\"delete-item-button\\\" filter=\\\"[<row>] [<row>getlist[]]\\\" parent=<<sheet>> title=<<row>> prompt=\\\" Delete this row\\\"/>\\n</li>\\n<li>\\nTitle:\\n<$tiddler tiddler=<<row>>>\\n<<rename-current-tiddler>>\\n</$tiddler>\\n</li>\\n<li>\\nRow type:\\n<$select tiddler=<<row>> field=\\\"import-row-type\\\" default=\\\"by-field\\\">\\n<option value=\\\"by-field\\\">By field</option>\\n<option value=\\\"by-column\\\">By column</option>\\n</$select>\\n</li>\\n<li>\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-createtiddler $basetitle=\\\"$:/_ExcelImporter/ImportSpecifiers/Field\\\" $savetitle=\\\"$:/temp/newtiddler\\\" import-spec-role=\\\"field\\\" import-field-name=\\\"fieldname\\\" import-field-type=\\\"string\\\" import-field-source=\\\"column\\\" import-field-column=\\\"Column Name\\\" />\\n<$action-listops $tiddler=<<row>> $subfilter=\\\"[{$:/temp/newtiddler}] +[putfirst[]]\\\"/>\\n{{$:/core/images/new-button}} Add new field\\n</$button>\\n</li>\\n</$reveal>\\n<<list-fields>>\\n\\\\end\\n\\n\\\\define view-row()\\n<div class=\\\"tc-import-spec-row-wrapper\\\">\\n<h5>\\n<$macrocall $name=\\\"expand-collapse-button\\\" state=<<row>>/>\\nEach row: <$list filter=\\\"[list<row>import-field-name[title]]\\\" variable=\\\"field\\\" emptyMessage=\\\"\\n<$link to=<<field>>>(title field not set)</$link>\\\"><<view-field>></$list>\\n<$macrocall $name=\\\"edit-button\\\" state=<<row>>/>\\n<<up-down-buttons parent:\\\"sheet\\\" child:\\\"row\\\">>\\n<$macrocall $name=\\\"help-button\\\" state=<<row>>/>\\n</h5>\\n<$macrocall $name=\\\"help-content\\\" type=\\\"row\\\" state=<<row>>/>\\n<$macrocall $name=\\\"expand-collapse-content\\\" state=<<row>> content=<<view-row-content>> class=\\\"tc-import-spec-row\\\"/>\\n</div>\\n\\\\end\\n\\n\\\\define list-rows()\\n<div class=\\\"tc-import-spec-sheet-list\\\">\\n<$list filter=\\\"[list<sheet>]\\\" variable=\\\"row\\\" emptyMessage=\\\"<div>(No row import specifiers)</div>\\\">\\n<<view-row>>\\n</$list>\\n\\\\end\\n\\n\\\\define view-sheet-content()\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(sheet)$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"ul\\\" class=\\\"tc-import-spec-sheet-controls\\\" animate=\\\"yes\\\" retain=\\\"yes\\\">\\n<li>\\n<$macrocall $name=\\\"delete-item-button\\\" filter=\\\"[<sheet>] [<sheet>getlist[]] [<sheet>getlist[]getlist[]]\\\" parent=<<workbook>> title=<<sheet>> prompt=\\\" Delete this sheet\\\"/>\\n</li>\\n<li>\\nTitle:\\n<$tiddler tiddler=<<sheet>>>\\n<<rename-current-tiddler>>\\n</$tiddler>\\n</li>\\n<li>\\nImport sheet name:\\n<$edit-text tiddler=<<sheet>> field=\\\"import-sheet-name\\\" size=\\\"50\\\"/>\\n</li>\\n<li>\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-createtiddler $basetitle=\\\"$:/_ExcelImporter/ImportSpecifiers/Row\\\" $savetitle=\\\"$:/temp/newtiddler\\\" import-spec-role=\\\"row\\\"/>\\n<$action-listops $tiddler=<<sheet>> $subfilter=\\\"[{$:/temp/newtiddler}] +[putfirst[]]\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\\\"yes\\\"/>\\n{{$:/core/images/new-button}} Add new row\\n</$button>\\n</li>\\n</$reveal>\\n<<list-rows>>\\n\\\\end\\n\\n\\\\define view-sheet()\\n<div class=\\\"tc-import-spec-sheet-wrapper\\\">\\n<h4>\\n<$macrocall $name=\\\"expand-collapse-button\\\" state=<<sheet>>/>\\nSheet: <$link to=<<sheet>>><$view tiddler=<<sheet>> field=\\\"import-sheet-name\\\"/></$link>\\n<$macrocall $name=\\\"edit-button\\\" state=<<sheet>>/>\\n<<up-down-buttons parent:\\\"workbook\\\" child:\\\"sheet\\\">>\\n<$macrocall $name=\\\"help-button\\\" state=<<sheet>>/>\\n</h4>\\n<$macrocall $name=\\\"help-content\\\" type=\\\"sheet\\\" state=<<sheet>>/>\\n<$macrocall $name=\\\"expand-collapse-content\\\" state=<<sheet>> content=<<view-sheet-content>> class=\\\"tc-import-spec-sheet\\\"/>\\n</div>\\n\\\\end\\n\\n\\\\define list-sheets()\\n<div class=\\\"tc-import-spec-workbook-list\\\">\\n<$list filter=\\\"[list<workbook>]\\\" variable=\\\"sheet\\\" emptyMessage=\\\"<div>(No sheet import specifiers)</div>\\\">\\n<<view-sheet>>\\n</$list>\\n</div>\\n\\\\end\\n\\n\\\\define view-workbook-content()\\n<$reveal state=\\\"\\\"\\\"$:/state/edit/$(workbook)$\\\"\\\"\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" tag=\\\"ul\\\" class=\\\"tc-import-spec-workbook-controls\\\" animate=\\\"yes\\\" retain=\\\"yes\\\">\\n<li>\\n<$macrocall $name=\\\"delete-item-button\\\" filter=\\\"[<workbook>] [<workbook>getlist[]] [<workbook>getlist[]getlist[]] [<workbook>getlist[]getlist[]getlist[]]\\\" prompt=\\\" Delete this workbook\\\"/>\\n</li>\\n<li>\\nTitle:\\n<$tiddler tiddler=<<workbook>>>\\n<<rename-current-tiddler>>\\n</$tiddler>\\n</li>\\n<li>\\nCaption:\\n<$edit-text tiddler=<<workbook>> field=\\\"caption\\\" size=\\\"50\\\"/>\\n</li>\\n<li>\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-createtiddler $basetitle=\\\"$:/_ExcelImporter/ImportSpecifiers/Sheet\\\" $savetitle=\\\"$:/temp/newtiddler\\\" import-spec-role=\\\"sheet\\\" import-sheet-name=\\\"Sheet name\\\"/>\\n<$action-listops $tiddler=<<workbook>> $subfilter=\\\"[{$:/temp/newtiddler}] +[putfirst[]]\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\\\"yes\\\"/>\\n{{$:/core/images/new-button}} Add new sheet\\n</$button>\\n</li>\\n</$reveal>\\n<<list-sheets>>\\n\\\\end\\n\\n\\\\define view-workbook()\\n<div class=\\\"tc-import-spec-workbook-wrapper\\\">\\n<h3>\\n<$macrocall $name=\\\"expand-collapse-button\\\" state=<<workbook>>/>\\nWorkbook: <$link to=<<workbook>>><$view tiddler=<<workbook>> field=\\\"caption\\\"/></$link>\\n<$macrocall $name=\\\"edit-button\\\" state=<<workbook>>/>\\n<$macrocall $name=\\\"help-button\\\" state=<<workbook>>/>\\n</h3>\\n<$macrocall $name=\\\"help-content\\\" type=\\\"workbook\\\" state=<<workbook>>/>\\n<$macrocall $name=\\\"expand-collapse-content\\\" state=<<workbook>> content=<<view-workbook-content>> class=\\\"tc-import-spec-workbook\\\"/>\\n</div>\\n\\\\end\\n\\n\\\\define list-workbooks()\\n<ul class=\\\"tc-import-spec-editor-controls\\\">\\n<li>\\n<$button class=\\\"tc-btn-invisible\\\">\\n<$action-createtiddler $basetitle=\\\"$:/_ExcelImporter/ImportSpecifiers/Workbook\\\" $savetitle=\\\"$:/temp/newtiddler\\\" import-spec-role=\\\"workbook\\\" caption=\\\"New workbook\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/edit/]] }}} $value=\\\"yes\\\"/>\\n<$action-setfield $tiddler={{{ [{$:/temp/newtiddler}addprefix[$:/state/expand/]] }}} $value=\\\"yes\\\"/>\\n{{$:/core/images/new-button}} Add new workbook\\n</$button>\\n</li>\\n</ul>\\n<div class=\\\"tc-import-spec-editor-list\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]import-spec-role[workbook]sort[caption]]\\\" variable=\\\"workbook\\\">\\n<<view-workbook>>\\n</$list>\\n</div>\\n\\\\end\\n\\n<h1>\\nControls for XLSX Spreadsheet Utilities\\n</h1>\\n\\n<div class=\\\"tc-import-spec-selector\\\">\\n<h2>\\nCurrent Import Specification\\n</h2>\\n<$list filter=\\\"[all[shadows+tiddlers]import-spec-role[workbook]limit[1]]\\\" emptyMessage=\\\"\\\"\\\"\\nThere are no import specifications available. Use the controls below to create one\\n\\\"\\\"\\\">\\nThis is the import specification that will be used for the next import of an `.XLSX` file\\n<$select tiddler=\\\"$:/config/plugins/tiddlywiki/xlsx-utils/default-import-spec\\\">\\n<$list filter=\\\"[all[shadows+tiddlers]import-spec-role[workbook]sort[caption]]\\\">\\n<option value=<<currentTiddler>>><$text text={{!!caption}}/></option>\\n</$list>\\n</$select>\\n</$list>\\n</div>\\n\\n<div class=\\\"tc-import-spec-editor-wrapper\\\">\\n<h2>\\n Import Specifications\\n<$macrocall $name=\\\"help-button\\\" state=\\\"\\\"/>\\n</h2>\\n<$macrocall $name=\\\"help-content\\\" type=\\\"editor\\\" state=\\\"\\\"/>\\n<div class=\\\"tc-import-spec-editor\\\">\\n<<list-workbooks>>\\n</div>\\n</div>\\n\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/deserializer.js\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/deserializer.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/xlsx-utils/deserializer.js\\ntype: application/javascript\\nmodule-type: tiddlerdeserializer\\n\\nXLSX file deserializer\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n/*\\nParse an XLSX file into tiddlers\\n*/\\nexports[\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\\\"] = function(text,fields) {\\n\\t// Collect output tiddlers in an array\\n\\tvar results = [],\\n\\t\\tXLSXImporter = require(\\\"$:/plugins/tiddlywiki/xlsx-utils/importer.js\\\").XLSXImporter,\\n\\t\\timporter = new XLSXImporter({\\n\\t\\t\\ttext: text\\n\\t\\t});\\n\\t// Return the output tiddlers\\n\\treturn importer.getResults();\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"tiddlerdeserializer\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/docs/editor\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/docs/editor\",\n \"text\": \"!!! Import Specifications\\n\\nImport specifications govern how spreadsheets are converted into individual tiddlers.\\n\\nEach \\\"workbook\\\" describes how spreadsheets of a particular format should be converted.\\n\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/docs/row\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/docs/row\",\n \"text\": \"!!! Row Import Specifications\\n\\nEach row import specification describes how one tiddler should be extracted from each row of the current sheet.\\n\\nNote that using multiple row import specifications within a sheet enables multiple tiddlers to be created from each row of the sheet.\\n\\nRows contain a list of field import specifications that describe how each field of the tiddler should be created.\\n\\n!!! Field Import Specifications\\n\\nField import specifications describe the value given to a particular field of a tiddler.\\n\\nThey follow a rich syntax for describing how each field of the tiddler is created. For example:\\n\\n* Set field `title` to string from column `Organization`\\n* Set field `role` to string constant `organization`\\n* Append to list field `list` the string from column `Country` prefixed with `Map:`\\n\\n\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/docs/sheet\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/docs/sheet\",\n \"text\": \"!!! Sheet Import Specifications\\n\\nEach sheet import specification describes how a named sheet within a workbook should be converted into individual tiddlers.\\n\\nSheets contain a list of row import specifications that describe how individual rows of the sheet should be handled.\\n\\nEach sheet has the name of the sheet that it handles.\\n\\nNote that the first row of each sheet is interpreted as the title of each column.\\n\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/docs/workbook\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/docs/workbook\",\n \"text\": \"!!! Workbook Import Specifications\\n\\nEach workbook import specification describes how spreadsheets of a particular format should be converted into individual tiddlers.\\n\\nCreate a new workbook for each type of spreadsheet that you will be working with.\\n\\nWorkbooks contain a list of sheet import specifications that describe how individual sheets of the workbook should be handled.\\n\\nEach workbook has a caption that you can use to describe its purpose.\\n\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/xlsx.js\": {\n \"text\": \"var old_exports = exports,JSZip = require(\\\"$:/plugins/tiddlywiki/jszip/jszip.js\\\");exports = {};if($tw.browser){module.exports=undefined;};/* xlsx.js (C) 2013-2015 SheetJS -- http://sheetjs.com */\\n/* vim: set ts=2: */\\n/*jshint -W041 */\\n/*jshint funcscope:true, eqnull:true */\\nvar XLSX = {};\\n(function make_xlsx(XLSX){\\nXLSX.version = '0.8.0';\\nvar current_codepage = 1200, current_cptable;\\nif(typeof module !== \\\"undefined\\\" && typeof require !== 'undefined') {\\n\\tif(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');\\n\\tcurrent_cptable = cptable[current_codepage];\\n}\\nfunction reset_cp() { set_cp(1200); }\\nvar set_cp = function(cp) { current_codepage = cp; };\\n\\nfunction char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\\nvar debom_xml = function(data) { return data; };\\n\\nvar _getchar = function _gc1(x) { return String.fromCharCode(x); };\\nif(typeof cptable !== 'undefined') {\\n\\tset_cp = function(cp) { current_codepage = cp; current_cptable = cptable[cp]; };\\n\\tdebom_xml = function(data) {\\n\\t\\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); }\\n\\t\\treturn data;\\n\\t};\\n\\t_getchar = function _gc2(x) {\\n\\t\\tif(current_codepage === 1200) return String.fromCharCode(x);\\n\\t\\treturn cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\\n\\t};\\n}\\nvar Base64 = (function make_b64(){\\n\\tvar map = \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\\";\\n\\treturn {\\n\\t\\tencode: function(input, utf8) {\\n\\t\\t\\tvar o = \\\"\\\";\\n\\t\\t\\tvar c1, c2, c3, e1, e2, e3, e4;\\n\\t\\t\\tfor(var i = 0; i < input.length; ) {\\n\\t\\t\\t\\tc1 = input.charCodeAt(i++);\\n\\t\\t\\t\\tc2 = input.charCodeAt(i++);\\n\\t\\t\\t\\tc3 = input.charCodeAt(i++);\\n\\t\\t\\t\\te1 = c1 >> 2;\\n\\t\\t\\t\\te2 = (c1 & 3) << 4 | c2 >> 4;\\n\\t\\t\\t\\te3 = (c2 & 15) << 2 | c3 >> 6;\\n\\t\\t\\t\\te4 = c3 & 63;\\n\\t\\t\\t\\tif (isNaN(c2)) { e3 = e4 = 64; }\\n\\t\\t\\t\\telse if (isNaN(c3)) { e4 = 64; }\\n\\t\\t\\t\\to += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\\n\\t\\t\\t}\\n\\t\\t\\treturn o;\\n\\t\\t},\\n\\t\\tdecode: function b64_decode(input, utf8) {\\n\\t\\t\\tvar o = \\\"\\\";\\n\\t\\t\\tvar c1, c2, c3;\\n\\t\\t\\tvar e1, e2, e3, e4;\\n\\t\\t\\tinput = input.replace(/[^A-Za-z0-9\\\\+\\\\/\\\\=]/g, \\\"\\\");\\n\\t\\t\\tfor(var i = 0; i < input.length;) {\\n\\t\\t\\t\\te1 = map.indexOf(input.charAt(i++));\\n\\t\\t\\t\\te2 = map.indexOf(input.charAt(i++));\\n\\t\\t\\t\\te3 = map.indexOf(input.charAt(i++));\\n\\t\\t\\t\\te4 = map.indexOf(input.charAt(i++));\\n\\t\\t\\t\\tc1 = e1 << 2 | e2 >> 4;\\n\\t\\t\\t\\tc2 = (e2 & 15) << 4 | e3 >> 2;\\n\\t\\t\\t\\tc3 = (e3 & 3) << 6 | e4;\\n\\t\\t\\t\\to += String.fromCharCode(c1);\\n\\t\\t\\t\\tif (e3 != 64) { o += String.fromCharCode(c2); }\\n\\t\\t\\t\\tif (e4 != 64) { o += String.fromCharCode(c3); }\\n\\t\\t\\t}\\n\\t\\t\\treturn o;\\n\\t\\t}\\n\\t};\\n})();\\nvar has_buf = (typeof Buffer !== 'undefined');\\n\\nfunction new_raw_buf(len) {\\n\\t/* jshint -W056 */\\n\\treturn new (has_buf ? Buffer : Array)(len);\\n\\t/* jshint +W056 */\\n}\\n\\nfunction s2a(s) {\\n\\tif(has_buf) return new Buffer(s, \\\"binary\\\");\\n\\treturn s.split(\\\"\\\").map(function(x){ return x.charCodeAt(0) & 0xff; });\\n}\\n\\nvar bconcat = function(bufs) { return [].concat.apply([], bufs); };\\n\\nvar chr0 = /\\\\u0000/g, chr1 = /[\\\\u0001-\\\\u0006]/;\\n/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */\\n/*jshint -W041 */\\nvar SSF = {};\\nvar make_ssf = function make_ssf(SSF){\\nSSF.version = '0.8.1';\\nfunction _strrev(x) { var o = \\\"\\\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\\nfunction fill(c,l) { var o = \\\"\\\"; while(o.length < l) o+=c; return o; }\\nfunction pad0(v,d){var t=\\\"\\\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\\nfunction pad_(v,d){var t=\\\"\\\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\\nfunction rpad_(v,d){var t=\\\"\\\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\\nfunction pad0r1(v,d){var t=\\\"\\\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\\nfunction pad0r2(v,d){var t=\\\"\\\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\\nvar p2_32 = Math.pow(2,32);\\nfunction pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\\nfunction isgeneral(s, i) { return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\\n/* Options */\\nvar opts_fmt = [\\n\\t[\\\"date1904\\\", 0],\\n\\t[\\\"output\\\", \\\"\\\"],\\n\\t[\\\"WTF\\\", false]\\n];\\nfunction fixopts(o){\\n\\tfor(var y = 0; y != opts_fmt.length; ++y) if(o[opts_fmt[y][0]]===undefined) o[opts_fmt[y][0]]=opts_fmt[y][1];\\n}\\nSSF.opts = opts_fmt;\\nvar table_fmt = {\\n\\t0: 'General',\\n\\t1: '0',\\n\\t2: '0.00',\\n\\t3: '#,##0',\\n\\t4: '#,##0.00',\\n\\t9: '0%',\\n\\t10: '0.00%',\\n\\t11: '0.00E+00',\\n\\t12: '# ?/?',\\n\\t13: '# ??/??',\\n\\t14: 'm/d/yy',\\n\\t15: 'd-mmm-yy',\\n\\t16: 'd-mmm',\\n\\t17: 'mmm-yy',\\n\\t18: 'h:mm AM/PM',\\n\\t19: 'h:mm:ss AM/PM',\\n\\t20: 'h:mm',\\n\\t21: 'h:mm:ss',\\n\\t22: 'm/d/yy h:mm',\\n\\t37: '#,##0 ;(#,##0)',\\n\\t38: '#,##0 ;[Red](#,##0)',\\n\\t39: '#,##0.00;(#,##0.00)',\\n\\t40: '#,##0.00;[Red](#,##0.00)',\\n\\t45: 'mm:ss',\\n\\t46: '[h]:mm:ss',\\n\\t47: 'mmss.0',\\n\\t48: '##0.0E+0',\\n\\t49: '@',\\n\\t56: '\\\"上午/下午 \\\"hh\\\"時\\\"mm\\\"分\\\"ss\\\"秒 \\\"',\\n\\t65535: 'General'\\n};\\nvar days = [\\n\\t['Sun', 'Sunday'],\\n\\t['Mon', 'Monday'],\\n\\t['Tue', 'Tuesday'],\\n\\t['Wed', 'Wednesday'],\\n\\t['Thu', 'Thursday'],\\n\\t['Fri', 'Friday'],\\n\\t['Sat', 'Saturday']\\n];\\nvar months = [\\n\\t['J', 'Jan', 'January'],\\n\\t['F', 'Feb', 'February'],\\n\\t['M', 'Mar', 'March'],\\n\\t['A', 'Apr', 'April'],\\n\\t['M', 'May', 'May'],\\n\\t['J', 'Jun', 'June'],\\n\\t['J', 'Jul', 'July'],\\n\\t['A', 'Aug', 'August'],\\n\\t['S', 'Sep', 'September'],\\n\\t['O', 'Oct', 'October'],\\n\\t['N', 'Nov', 'November'],\\n\\t['D', 'Dec', 'December']\\n];\\nfunction frac(x, D, mixed) {\\n\\tvar sgn = x < 0 ? -1 : 1;\\n\\tvar B = x * sgn;\\n\\tvar P_2 = 0, P_1 = 1, P = 0;\\n\\tvar Q_2 = 1, Q_1 = 0, Q = 0;\\n\\tvar A = Math.floor(B);\\n\\twhile(Q_1 < D) {\\n\\t\\tA = Math.floor(B);\\n\\t\\tP = A * P_1 + P_2;\\n\\t\\tQ = A * Q_1 + Q_2;\\n\\t\\tif((B - A) < 0.0000000005) break;\\n\\t\\tB = 1 / (B - A);\\n\\t\\tP_2 = P_1; P_1 = P;\\n\\t\\tQ_2 = Q_1; Q_1 = Q;\\n\\t}\\n\\tif(Q > D) { Q = Q_1; P = P_1; }\\n\\tif(Q > D) { Q = Q_2; P = P_2; }\\n\\tif(!mixed) return [0, sgn * P, Q];\\n\\tif(Q===0) throw \\\"Unexpected state: \\\"+P+\\\" \\\"+P_1+\\\" \\\"+P_2+\\\" \\\"+Q+\\\" \\\"+Q_1+\\\" \\\"+Q_2;\\n\\tvar q = Math.floor(sgn * P/Q);\\n\\treturn [q, sgn*P - q*Q, Q];\\n}\\nfunction general_fmt_int(v, opts) { return \\\"\\\"+v; }\\nSSF._general_int = general_fmt_int;\\nvar general_fmt_num = (function make_general_fmt_num() {\\nvar gnr1 = /\\\\.(\\\\d*[1-9])0+$/, gnr2 = /\\\\.0*$/, gnr4 = /\\\\.(\\\\d*[1-9])0+/, gnr5 = /\\\\.0*[Ee]/, gnr6 = /(E[+-])(\\\\d)$/;\\nfunction gfn2(v) {\\n\\tvar w = (v<0?12:11);\\n\\tvar o = gfn5(v.toFixed(12)); if(o.length <= w) return o;\\n\\to = v.toPrecision(10); if(o.length <= w) return o;\\n\\treturn v.toExponential(5);\\n}\\nfunction gfn3(v) {\\n\\tvar o = v.toFixed(11).replace(gnr1,\\\".$1\\\");\\n\\tif(o.length > (v<0?12:11)) o = v.toPrecision(6);\\n\\treturn o;\\n}\\nfunction gfn4(o) {\\n\\tfor(var i = 0; i != o.length; ++i) if((o.charCodeAt(i) | 0x20) === 101) return o.replace(gnr4,\\\".$1\\\").replace(gnr5,\\\"E\\\").replace(\\\"e\\\",\\\"E\\\").replace(gnr6,\\\"$10$2\\\");\\n\\treturn o;\\n}\\nfunction gfn5(o) {\\n\\t//for(var i = 0; i != o.length; ++i) if(o.charCodeAt(i) === 46) return o.replace(gnr2,\\\"\\\").replace(gnr1,\\\".$1\\\");\\n\\t//return o;\\n\\treturn o.indexOf(\\\".\\\") > -1 ? o.replace(gnr2,\\\"\\\").replace(gnr1,\\\".$1\\\") : o;\\n}\\nreturn function general_fmt_num(v, opts) {\\n\\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\\n\\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\\n\\telse if(Math.abs(V) <= 9) o = gfn2(v);\\n\\telse if(V === 10) o = v.toFixed(10).substr(0,12);\\n\\telse o = gfn3(v);\\n\\treturn gfn5(gfn4(o));\\n};})();\\nSSF._general_num = general_fmt_num;\\nfunction general_fmt(v, opts) {\\n\\tswitch(typeof v) {\\n\\t\\tcase 'string': return v;\\n\\t\\tcase 'boolean': return v ? \\\"TRUE\\\" : \\\"FALSE\\\";\\n\\t\\tcase 'number': return (v|0) === v ? general_fmt_int(v, opts) : general_fmt_num(v, opts);\\n\\t}\\n\\tthrow new Error(\\\"unsupported value in General format: \\\" + v);\\n}\\nSSF._general = general_fmt;\\nfunction fix_hijri(date, o) { return 0; }\\nfunction parse_date_code(v,opts,b2) {\\n\\tif(v > 2958465 || v < 0) return null;\\n\\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\\n\\tvar dout=[];\\n\\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\\n\\tif(Math.abs(out.u) < 1e-6) out.u = 0;\\n\\tfixopts(opts != null ? opts : (opts=[]));\\n\\tif(opts.date1904) date += 1462;\\n\\tif(out.u > 0.999) {\\n\\t\\tout.u = 0;\\n\\t\\tif(++time == 86400) { time = 0; ++date; }\\n\\t}\\n\\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\\n\\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\\n\\telse {\\n\\t\\tif(date > 60) --date;\\n\\t\\t/* 1 = Jan 1 1900 */\\n\\t\\tvar d = new Date(1900,0,1);\\n\\t\\td.setDate(d.getDate() + date - 1);\\n\\t\\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\\n\\t\\tdow = d.getDay();\\n\\t\\tif(date < 60) dow = (dow + 6) % 7;\\n\\t\\tif(b2) dow = fix_hijri(d, dout);\\n\\t}\\n\\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\\n\\tout.S = time % 60; time = Math.floor(time / 60);\\n\\tout.M = time % 60; time = Math.floor(time / 60);\\n\\tout.H = time;\\n\\tout.q = dow;\\n\\treturn out;\\n}\\nSSF.parse_date_code = parse_date_code;\\n/*jshint -W086 */\\nfunction write_date(type, fmt, val, ss0) {\\n\\tvar o=\\\"\\\", ss=0, tt=0, y = val.y, out, outl = 0;\\n\\tswitch(type) {\\n\\t\\tcase 98: /* 'b' buddhist year */\\n\\t\\t\\ty = val.y + 543;\\n\\t\\t\\t/* falls through */\\n\\t\\tcase 121: /* 'y' year */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = y % 100; outl = 2; break;\\n\\t\\t\\tdefault: out = y % 10000; outl = 4; break;\\n\\t\\t} break;\\n\\t\\tcase 109: /* 'm' month */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = val.m; outl = fmt.length; break;\\n\\t\\t\\tcase 3: return months[val.m-1][1];\\n\\t\\t\\tcase 5: return months[val.m-1][0];\\n\\t\\t\\tdefault: return months[val.m-1][2];\\n\\t\\t} break;\\n\\t\\tcase 100: /* 'd' day */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = val.d; outl = fmt.length; break;\\n\\t\\t\\tcase 3: return days[val.q][0];\\n\\t\\t\\tdefault: return days[val.q][1];\\n\\t\\t} break;\\n\\t\\tcase 104: /* 'h' 12-hour */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\\n\\t\\t\\tdefault: throw 'bad hour format: ' + fmt;\\n\\t\\t} break;\\n\\t\\tcase 72: /* 'H' 24-hour */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = val.H; outl = fmt.length; break;\\n\\t\\t\\tdefault: throw 'bad hour format: ' + fmt;\\n\\t\\t} break;\\n\\t\\tcase 77: /* 'M' minutes */\\n\\t\\tswitch(fmt.length) {\\n\\t\\t\\tcase 1: case 2: out = val.M; outl = fmt.length; break;\\n\\t\\t\\tdefault: throw 'bad minute format: ' + fmt;\\n\\t\\t} break;\\n\\t\\tcase 115: /* 's' seconds */\\n\\t\\tif(val.u === 0) switch(fmt) {\\n\\t\\t\\tcase 's': case 'ss': return pad0(val.S, fmt.length);\\n\\t\\t\\tcase '.0': case '.00': case '.000':\\n\\t\\t}\\n\\t\\tswitch(fmt) {\\n\\t\\t\\tcase 's': case 'ss': case '.0': case '.00': case '.000':\\n\\t\\t\\t\\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\\n\\t\\t\\t\\telse tt = ss0 === 1 ? 10 : 1;\\n\\t\\t\\t\\tss = Math.round((tt)*(val.S + val.u));\\n\\t\\t\\t\\tif(ss >= 60*tt) ss = 0;\\n\\t\\t\\t\\tif(fmt === 's') return ss === 0 ? \\\"0\\\" : \\\"\\\"+ss/tt;\\n\\t\\t\\t\\to = pad0(ss,2 + ss0);\\n\\t\\t\\t\\tif(fmt === 'ss') return o.substr(0,2);\\n\\t\\t\\t\\treturn \\\".\\\" + o.substr(2,fmt.length-1);\\n\\t\\t\\tdefault: throw 'bad second format: ' + fmt;\\n\\t\\t}\\n\\t\\tcase 90: /* 'Z' absolute time */\\n\\t\\tswitch(fmt) {\\n\\t\\t\\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\\n\\t\\t\\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\\n\\t\\t\\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\\n\\t\\t\\tdefault: throw 'bad abstime format: ' + fmt;\\n\\t\\t} outl = fmt.length === 3 ? 1 : 2; break;\\n\\t\\tcase 101: /* 'e' era */\\n\\t\\t\\tout = y; outl = 1;\\n\\t}\\n\\tif(outl > 0) return pad0(out, outl); else return \\\"\\\";\\n}\\n/*jshint +W086 */\\nfunction commaify(s) {\\n\\tif(s.length <= 3) return s;\\n\\tvar j = (s.length % 3), o = s.substr(0,j);\\n\\tfor(; j!=s.length; j+=3) o+=(o.length > 0 ? \\\",\\\" : \\\"\\\") + s.substr(j,3);\\n\\treturn o;\\n}\\nvar write_num = (function make_write_num(){\\nvar pct1 = /%/g;\\nfunction write_num_pct(type, fmt, val){\\n\\tvar sfmt = fmt.replace(pct1,\\\"\\\"), mul = fmt.length - sfmt.length;\\n\\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\\\"%\\\",mul);\\n}\\nfunction write_num_cm(type, fmt, val){\\n\\tvar idx = fmt.length - 1;\\n\\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\\n\\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\\n}\\nfunction write_num_exp(fmt, val){\\n\\tvar o;\\n\\tvar idx = fmt.indexOf(\\\"E\\\") - fmt.indexOf(\\\".\\\") - 1;\\n\\tif(fmt.match(/^#+0.0E\\\\+0$/)) {\\n\\t\\tvar period = fmt.indexOf(\\\".\\\"); if(period === -1) period=fmt.indexOf('E');\\n\\t\\tvar ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;\\n\\t\\tif(ee < 0) ee += period;\\n\\t\\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\\n\\t\\tif(o.indexOf(\\\"e\\\") === -1) {\\n\\t\\t\\tvar fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);\\n\\t\\t\\tif(o.indexOf(\\\".\\\") === -1) o = o[0] + \\\".\\\" + o.substr(1) + \\\"E+\\\" + (fakee - o.length+ee);\\n\\t\\t\\telse o += \\\"E+\\\" + (fakee - ee);\\n\\t\\t\\twhile(o.substr(0,2) === \\\"0.\\\") {\\n\\t\\t\\t\\to = o[0] + o.substr(2,period) + \\\".\\\" + o.substr(2+period);\\n\\t\\t\\t\\to = o.replace(/^0+([1-9])/,\\\"$1\\\").replace(/^0+\\\\./,\\\"0.\\\");\\n\\t\\t\\t}\\n\\t\\t\\to = o.replace(/\\\\+-/,\\\"-\\\");\\n\\t\\t}\\n\\t\\to = o.replace(/^([+-]?)(\\\\d*)\\\\.(\\\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \\\".\\\" + $3.substr(ee) + \\\"E\\\"; });\\n\\t} else o = val.toExponential(idx);\\n\\tif(fmt.match(/E\\\\+00$/) && o.match(/e[+-]\\\\d$/)) o = o.substr(0,o.length-1) + \\\"0\\\" + o[o.length-1];\\n\\tif(fmt.match(/E\\\\-/) && o.match(/e\\\\+/)) o = o.replace(/e\\\\+/,\\\"e\\\");\\n\\treturn o.replace(\\\"e\\\",\\\"E\\\");\\n}\\nvar frac1 = /# (\\\\?+)( ?)\\\\/( ?)(\\\\d+)/;\\nfunction write_num_f1(r, aval, sign) {\\n\\tvar den = parseInt(r[4]), rr = Math.round(aval * den), base = Math.floor(rr/den);\\n\\tvar myn = (rr - base*den), myd = den;\\n\\treturn sign + (base === 0 ? \\\"\\\" : \\\"\\\"+base) + \\\" \\\" + (myn === 0 ? fill(\\\" \\\", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \\\"/\\\" + r[3] + pad0(myd,r[4].length));\\n}\\nfunction write_num_f2(r, aval, sign) {\\n\\treturn sign + (aval === 0 ? \\\"\\\" : \\\"\\\"+aval) + fill(\\\" \\\", r[1].length + 2 + r[4].length);\\n}\\nvar dec1 = /^#*0*\\\\.(0+)/;\\nvar closeparen = /\\\\).*[0#]/;\\nvar phone = /\\\\(###\\\\) ###\\\\\\\\?-####/;\\nfunction hashq(str) {\\n\\tvar o = \\\"\\\", cc;\\n\\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\\n\\t\\tcase 35: break;\\n\\t\\tcase 63: o+= \\\" \\\"; break;\\n\\t\\tcase 48: o+= \\\"0\\\"; break;\\n\\t\\tdefault: o+= String.fromCharCode(cc);\\n\\t}\\n\\treturn o;\\n}\\nfunction rnd(val, d) { var dd = Math.pow(10,d); return \\\"\\\"+(Math.round(val * dd)/dd); }\\nfunction dec(val, d) { return Math.round((val-Math.floor(val))*Math.pow(10,d)); }\\nfunction flr(val) { if(val < 2147483647 && val > -2147483648) return \\\"\\\"+(val >= 0 ? (val|0) : (val-1|0)); return \\\"\\\"+Math.floor(val); }\\nfunction write_num_flt(type, fmt, val) {\\n\\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\\n\\t\\tvar ffmt = fmt.replace(/\\\\( */,\\\"\\\").replace(/ \\\\)/,\\\"\\\").replace(/\\\\)/,\\\"\\\");\\n\\t\\tif(val >= 0) return write_num_flt('n', ffmt, val);\\n\\t\\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\\n\\t}\\n\\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\\n\\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\\n\\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\\n\\tif(fmt.charCodeAt(0) === 36) return \\\"$\\\"+write_num_flt(type,fmt.substr(fmt[1]==' '?2:1),val);\\n\\tvar o, oo;\\n\\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \\\"-\\\" : \\\"\\\";\\n\\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\\n\\tif(fmt.match(/^[#?]+$/)) {\\n\\t\\to = pad0r(val,0); if(o === \\\"0\\\") o = \\\"\\\";\\n\\t\\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\\n\\t}\\n\\tif((r = fmt.match(frac1)) !== null) return write_num_f1(r, aval, sign);\\n\\tif(fmt.match(/^#+0+$/) !== null) return sign + pad0r(aval,fmt.length - fmt.indexOf(\\\"0\\\"));\\n\\tif((r = fmt.match(dec1)) !== null) {\\n\\t\\to = rnd(val, r[1].length).replace(/^([^\\\\.]+)$/,\\\"$1.\\\"+r[1]).replace(/\\\\.$/,\\\".\\\"+r[1]).replace(/\\\\.(\\\\d*)$/,function($$, $1) { return \\\".\\\" + $1 + fill(\\\"0\\\", r[1].length-$1.length); });\\n\\t\\treturn fmt.indexOf(\\\"0.\\\") !== -1 ? o : o.replace(/^0\\\\./,\\\".\\\");\\n\\t}\\n\\tfmt = fmt.replace(/^#+([0.])/, \\\"$1\\\");\\n\\tif((r = fmt.match(/^(0*)\\\\.(#*)$/)) !== null) {\\n\\t\\treturn sign + rnd(aval, r[2].length).replace(/\\\\.(\\\\d*[1-9])0*$/,\\\".$1\\\").replace(/^(-?\\\\d*)$/,\\\"$1.\\\").replace(/^0\\\\./,r[1].length?\\\"0.\\\":\\\".\\\");\\n\\t}\\n\\tif((r = fmt.match(/^#,##0(\\\\.?)$/)) !== null) return sign + commaify(pad0r(aval,0));\\n\\tif((r = fmt.match(/^#,##0\\\\.([#0]*0)$/)) !== null) {\\n\\t\\treturn val < 0 ? \\\"-\\\" + write_num_flt(type, fmt, -val) : commaify(\\\"\\\"+(Math.floor(val))) + \\\".\\\" + pad0(dec(val, r[1].length),r[1].length);\\n\\t}\\n\\tif((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_flt(type,fmt.replace(/^#,#*,/,\\\"\\\"),val);\\n\\tif((r = fmt.match(/^([0#]+)(\\\\\\\\?-([0#]+))+$/)) !== null) {\\n\\t\\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\\\\\-]/g,\\\"\\\"), val));\\n\\t\\tri = 0;\\n\\t\\treturn _strrev(_strrev(fmt.replace(/\\\\\\\\/g,\\\"\\\")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':\\\"\\\";}));\\n\\t}\\n\\tif(fmt.match(phone) !== null) {\\n\\t\\to = write_num_flt(type, \\\"##########\\\", val);\\n\\t\\treturn \\\"(\\\" + o.substr(0,3) + \\\") \\\" + o.substr(3, 3) + \\\"-\\\" + o.substr(6);\\n\\t}\\n\\tvar oa = \\\"\\\";\\n\\tif((r = fmt.match(/^([#0?]+)( ?)\\\\/( ?)([#0?]+)/)) !== null) {\\n\\t\\tri = Math.min(r[4].length,7);\\n\\t\\tff = frac(aval, Math.pow(10,ri)-1, false);\\n\\t\\to = \\\"\\\" + sign;\\n\\t\\toa = write_num(\\\"n\\\", r[1], ff[1]);\\n\\t\\tif(oa[oa.length-1] == \\\" \\\") oa = oa.substr(0,oa.length-1) + \\\"0\\\";\\n\\t\\to += oa + r[2] + \\\"/\\\" + r[3];\\n\\t\\toa = rpad_(ff[2],ri);\\n\\t\\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\\n\\t\\to += oa;\\n\\t\\treturn o;\\n\\t}\\n\\tif((r = fmt.match(/^# ([#0?]+)( ?)\\\\/( ?)([#0?]+)/)) !== null) {\\n\\t\\tri = Math.min(Math.max(r[1].length, r[4].length),7);\\n\\t\\tff = frac(aval, Math.pow(10,ri)-1, true);\\n\\t\\treturn sign + (ff[0]||(ff[1] ? \\\"\\\" : \\\"0\\\")) + \\\" \\\" + (ff[1] ? pad_(ff[1],ri) + r[2] + \\\"/\\\" + r[3] + rpad_(ff[2],ri): fill(\\\" \\\", 2*ri+1 + r[2].length + r[3].length));\\n\\t}\\n\\tif((r = fmt.match(/^[#0?]+$/)) !== null) {\\n\\t\\to = pad0r(val, 0);\\n\\t\\tif(fmt.length <= o.length) return o;\\n\\t\\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\\n\\t}\\n if((r = fmt.match(/^([#0?]+)\\\\.([#0]+)$/)) !== null) {\\n\\t\\to = \\\"\\\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\\\"$1\\\");\\n\\t\\tri = o.indexOf(\\\".\\\");\\n\\t\\tvar lres = fmt.indexOf(\\\".\\\") - ri, rres = fmt.length - o.length - lres;\\n\\t\\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\\n\\t}\\n\\tif((r = fmt.match(/^00,000\\\\.([#0]*0)$/)) !== null) {\\n\\t\\tri = dec(val, r[1].length);\\n\\t\\treturn val < 0 ? \\\"-\\\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\\\d,\\\\d{3}$/,\\\"0$&\\\").replace(/^\\\\d*$/,function($$) { return \\\"00,\\\" + ($$.length < 3 ? pad0(0,3-$$.length) : \\\"\\\") + $$; }) + \\\".\\\" + pad0(ri,r[1].length);\\n\\t}\\n\\tswitch(fmt) {\\n\\t\\tcase \\\"#,###\\\": var x = commaify(pad0r(aval,0)); return x !== \\\"0\\\" ? sign + x : \\\"\\\";\\n\\t\\tdefault:\\n\\t}\\n\\tthrow new Error(\\\"unsupported format |\\\" + fmt + \\\"|\\\");\\n}\\nfunction write_num_cm2(type, fmt, val){\\n\\tvar idx = fmt.length - 1;\\n\\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\\n\\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\\n}\\nfunction write_num_pct2(type, fmt, val){\\n\\tvar sfmt = fmt.replace(pct1,\\\"\\\"), mul = fmt.length - sfmt.length;\\n\\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\\\"%\\\",mul);\\n}\\nfunction write_num_exp2(fmt, val){\\n\\tvar o;\\n\\tvar idx = fmt.indexOf(\\\"E\\\") - fmt.indexOf(\\\".\\\") - 1;\\n\\tif(fmt.match(/^#+0.0E\\\\+0$/)) {\\n\\t\\tvar period = fmt.indexOf(\\\".\\\"); if(period === -1) period=fmt.indexOf('E');\\n\\t\\tvar ee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E)%period;\\n\\t\\tif(ee < 0) ee += period;\\n\\t\\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\\n\\t\\tif(!o.match(/[Ee]/)) {\\n\\t\\t\\tvar fakee = Math.floor(Math.log(Math.abs(val))*Math.LOG10E);\\n\\t\\t\\tif(o.indexOf(\\\".\\\") === -1) o = o[0] + \\\".\\\" + o.substr(1) + \\\"E+\\\" + (fakee - o.length+ee);\\n\\t\\t\\telse o += \\\"E+\\\" + (fakee - ee);\\n\\t\\t\\to = o.replace(/\\\\+-/,\\\"-\\\");\\n\\t\\t}\\n\\t\\to = o.replace(/^([+-]?)(\\\\d*)\\\\.(\\\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \\\".\\\" + $3.substr(ee) + \\\"E\\\"; });\\n\\t} else o = val.toExponential(idx);\\n\\tif(fmt.match(/E\\\\+00$/) && o.match(/e[+-]\\\\d$/)) o = o.substr(0,o.length-1) + \\\"0\\\" + o[o.length-1];\\n\\tif(fmt.match(/E\\\\-/) && o.match(/e\\\\+/)) o = o.replace(/e\\\\+/,\\\"e\\\");\\n\\treturn o.replace(\\\"e\\\",\\\"E\\\");\\n}\\nfunction write_num_int(type, fmt, val) {\\n\\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\\n\\t\\tvar ffmt = fmt.replace(/\\\\( */,\\\"\\\").replace(/ \\\\)/,\\\"\\\").replace(/\\\\)/,\\\"\\\");\\n\\t\\tif(val >= 0) return write_num_int('n', ffmt, val);\\n\\t\\treturn '(' + write_num_int('n', ffmt, -val) + ')';\\n\\t}\\n\\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\\n\\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\\n\\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\\n\\tif(fmt.charCodeAt(0) === 36) return \\\"$\\\"+write_num_int(type,fmt.substr(fmt[1]==' '?2:1),val);\\n\\tvar o;\\n\\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \\\"-\\\" : \\\"\\\";\\n\\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\\n\\tif(fmt.match(/^[#?]+$/)) {\\n\\t\\to = (\\\"\\\"+val); if(val === 0) o = \\\"\\\";\\n\\t\\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\\n\\t}\\n\\tif((r = fmt.match(frac1)) !== null) return write_num_f2(r, aval, sign);\\n\\tif(fmt.match(/^#+0+$/) !== null) return sign + pad0(aval,fmt.length - fmt.indexOf(\\\"0\\\"));\\n\\tif((r = fmt.match(dec1)) !== null) {\\n\\t\\to = (\\\"\\\"+val).replace(/^([^\\\\.]+)$/,\\\"$1.\\\"+r[1]).replace(/\\\\.$/,\\\".\\\"+r[1]).replace(/\\\\.(\\\\d*)$/,function($$, $1) { return \\\".\\\" + $1 + fill(\\\"0\\\", r[1].length-$1.length); });\\n\\t\\treturn fmt.indexOf(\\\"0.\\\") !== -1 ? o : o.replace(/^0\\\\./,\\\".\\\");\\n\\t}\\n\\tfmt = fmt.replace(/^#+([0.])/, \\\"$1\\\");\\n\\tif((r = fmt.match(/^(0*)\\\\.(#*)$/)) !== null) {\\n\\t\\treturn sign + (\\\"\\\"+aval).replace(/\\\\.(\\\\d*[1-9])0*$/,\\\".$1\\\").replace(/^(-?\\\\d*)$/,\\\"$1.\\\").replace(/^0\\\\./,r[1].length?\\\"0.\\\":\\\".\\\");\\n\\t}\\n\\tif((r = fmt.match(/^#,##0(\\\\.?)$/)) !== null) return sign + commaify((\\\"\\\"+aval));\\n\\tif((r = fmt.match(/^#,##0\\\\.([#0]*0)$/)) !== null) {\\n\\t\\treturn val < 0 ? \\\"-\\\" + write_num_int(type, fmt, -val) : commaify((\\\"\\\"+val)) + \\\".\\\" + fill('0',r[1].length);\\n\\t}\\n\\tif((r = fmt.match(/^#,#*,#0/)) !== null) return write_num_int(type,fmt.replace(/^#,#*,/,\\\"\\\"),val);\\n\\tif((r = fmt.match(/^([0#]+)(\\\\\\\\?-([0#]+))+$/)) !== null) {\\n\\t\\to = _strrev(write_num_int(type, fmt.replace(/[\\\\\\\\-]/g,\\\"\\\"), val));\\n\\t\\tri = 0;\\n\\t\\treturn _strrev(_strrev(fmt.replace(/\\\\\\\\/g,\\\"\\\")).replace(/[0#]/g,function(x){return ri<o.length?o[ri++]:x==='0'?'0':\\\"\\\";}));\\n\\t}\\n\\tif(fmt.match(phone) !== null) {\\n\\t\\to = write_num_int(type, \\\"##########\\\", val);\\n\\t\\treturn \\\"(\\\" + o.substr(0,3) + \\\") \\\" + o.substr(3, 3) + \\\"-\\\" + o.substr(6);\\n\\t}\\n\\tvar oa = \\\"\\\";\\n\\tif((r = fmt.match(/^([#0?]+)( ?)\\\\/( ?)([#0?]+)/)) !== null) {\\n\\t\\tri = Math.min(r[4].length,7);\\n\\t\\tff = frac(aval, Math.pow(10,ri)-1, false);\\n\\t\\to = \\\"\\\" + sign;\\n\\t\\toa = write_num(\\\"n\\\", r[1], ff[1]);\\n\\t\\tif(oa[oa.length-1] == \\\" \\\") oa = oa.substr(0,oa.length-1) + \\\"0\\\";\\n\\t\\to += oa + r[2] + \\\"/\\\" + r[3];\\n\\t\\toa = rpad_(ff[2],ri);\\n\\t\\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\\n\\t\\to += oa;\\n\\t\\treturn o;\\n\\t}\\n\\tif((r = fmt.match(/^# ([#0?]+)( ?)\\\\/( ?)([#0?]+)/)) !== null) {\\n\\t\\tri = Math.min(Math.max(r[1].length, r[4].length),7);\\n\\t\\tff = frac(aval, Math.pow(10,ri)-1, true);\\n\\t\\treturn sign + (ff[0]||(ff[1] ? \\\"\\\" : \\\"0\\\")) + \\\" \\\" + (ff[1] ? pad_(ff[1],ri) + r[2] + \\\"/\\\" + r[3] + rpad_(ff[2],ri): fill(\\\" \\\", 2*ri+1 + r[2].length + r[3].length));\\n\\t}\\n\\tif((r = fmt.match(/^[#0?]+$/)) !== null) {\\n\\t\\to = \\\"\\\" + val;\\n\\t\\tif(fmt.length <= o.length) return o;\\n\\t\\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\\n\\t}\\n\\tif((r = fmt.match(/^([#0]+)\\\\.([#0]+)$/)) !== null) {\\n\\t\\to = \\\"\\\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\\\"$1\\\");\\n\\t\\tri = o.indexOf(\\\".\\\");\\n\\t\\tvar lres = fmt.indexOf(\\\".\\\") - ri, rres = fmt.length - o.length - lres;\\n\\t\\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\\n\\t}\\n\\tif((r = fmt.match(/^00,000\\\\.([#0]*0)$/)) !== null) {\\n\\t\\treturn val < 0 ? \\\"-\\\" + write_num_int(type, fmt, -val) : commaify(\\\"\\\"+val).replace(/^\\\\d,\\\\d{3}$/,\\\"0$&\\\").replace(/^\\\\d*$/,function($$) { return \\\"00,\\\" + ($$.length < 3 ? pad0(0,3-$$.length) : \\\"\\\") + $$; }) + \\\".\\\" + pad0(0,r[1].length);\\n\\t}\\n\\tswitch(fmt) {\\n\\t\\tcase \\\"#,###\\\": var x = commaify(\\\"\\\"+aval); return x !== \\\"0\\\" ? sign + x : \\\"\\\";\\n\\t\\tdefault:\\n\\t}\\n\\tthrow new Error(\\\"unsupported format |\\\" + fmt + \\\"|\\\");\\n}\\nreturn function write_num(type, fmt, val) {\\n\\treturn (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\\n};})();\\nfunction split_fmt(fmt) {\\n\\tvar out = [];\\n\\tvar in_str = false, cc;\\n\\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((cc=fmt.charCodeAt(i))) {\\n\\t\\tcase 34: /* '\\\"' */\\n\\t\\t\\tin_str = !in_str; break;\\n\\t\\tcase 95: case 42: case 92: /* '_' '*' '\\\\\\\\' */\\n\\t\\t\\t++i; break;\\n\\t\\tcase 59: /* ';' */\\n\\t\\t\\tout[out.length] = fmt.substr(j,i-j);\\n\\t\\t\\tj = i+1;\\n\\t}\\n\\tout[out.length] = fmt.substr(j);\\n\\tif(in_str === true) throw new Error(\\\"Format |\\\" + fmt + \\\"| unterminated string \\\");\\n\\treturn out;\\n}\\nSSF._split = split_fmt;\\nvar abstime = /\\\\[[HhMmSs]*\\\\]/;\\nfunction eval_fmt(fmt, v, opts, flen) {\\n\\tvar out = [], o = \\\"\\\", i = 0, c = \\\"\\\", lst='t', q, dt, j, cc;\\n\\tvar hr='H';\\n\\t/* Tokenize */\\n\\twhile(i < fmt.length) {\\n\\t\\tswitch((c = fmt[i])) {\\n\\t\\t\\tcase 'G': /* General */\\n\\t\\t\\t\\tif(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\\n\\t\\t\\t\\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\\n\\t\\t\\tcase '\\\"': /* Literal text */\\n\\t\\t\\t\\tfor(o=\\\"\\\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\\n\\t\\t\\t\\tout[out.length] = {t:'t', v:o}; ++i; break;\\n\\t\\t\\tcase '\\\\\\\\': var w = fmt[++i], t = (w === \\\"(\\\" || w === \\\")\\\") ? w : 't';\\n\\t\\t\\t\\tout[out.length] = {t:t, v:w}; ++i; break;\\n\\t\\t\\tcase '_': out[out.length] = {t:'t', v:\\\" \\\"}; i+=2; break;\\n\\t\\t\\tcase '@': /* Text Placeholder */\\n\\t\\t\\t\\tout[out.length] = {t:'T', v:v}; ++i; break;\\n\\t\\t\\tcase 'B': case 'b':\\n\\t\\t\\t\\tif(fmt[i+1] === \\\"1\\\" || fmt[i+1] === \\\"2\\\") {\\n if(dt==null) { dt=parse_date_code(v, opts, fmt[i+1] === \\\"2\\\"); if(dt==null) return \\\"\\\"; }\\n\\t\\t\\t\\t\\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t/* falls through */\\n\\t\\t\\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\\n\\t\\t\\t\\tc = c.toLowerCase();\\n\\t\\t\\t\\t/* falls through */\\n\\t\\t\\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\\n\\t\\t\\t\\tif(v < 0) return \\\"\\\";\\n\\t\\t\\t\\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \\\"\\\"; }\\n\\t\\t\\t\\to = c; while(++i<fmt.length && fmt[i].toLowerCase() === c) o+=c;\\n\\t\\t\\t\\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M'; /* m = minute */\\n\\t\\t\\t\\tif(c === 'h') c = hr;\\n\\t\\t\\t\\tout[out.length] = {t:c, v:o}; lst = c; break;\\n\\t\\t\\tcase 'A':\\n\\t\\t\\t\\tq={t:c, v:\\\"A\\\"};\\n\\t\\t\\t\\tif(dt==null) dt=parse_date_code(v, opts);\\n if(fmt.substr(i, 3) === \\\"A/P\\\") { if(dt!=null) q.v = dt.H >= 12 ? \\\"P\\\" : \\\"A\\\"; q.t = 'T'; hr='h';i+=3;}\\n else if(fmt.substr(i,5) === \\\"AM/PM\\\") { if(dt!=null) q.v = dt.H >= 12 ? \\\"PM\\\" : \\\"AM\\\"; q.t = 'T'; i+=5; hr='h'; }\\n\\t\\t\\t\\telse { q.t = \\\"t\\\"; ++i; }\\n\\t\\t\\t\\tif(dt==null && q.t === 'T') return \\\"\\\";\\n\\t\\t\\t\\tout[out.length] = q; lst = c; break;\\n\\t\\t\\tcase '[':\\n\\t\\t\\t\\to = c;\\n\\t\\t\\t\\twhile(fmt[i++] !== ']' && i < fmt.length) o += fmt[i];\\n\\t\\t\\t\\tif(o.substr(-1) !== ']') throw 'unterminated \\\"[\\\" block: |' + o + '|';\\n\\t\\t\\t\\tif(o.match(abstime)) {\\n\\t\\t\\t\\t\\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \\\"\\\"; }\\n\\t\\t\\t\\t\\tout[out.length] = {t:'Z', v:o.toLowerCase()};\\n\\t\\t\\t\\t} else { o=\\\"\\\"; }\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* Numbers */\\n\\t\\t\\tcase '.':\\n\\t\\t\\t\\tif(dt != null) {\\n\\t\\t\\t\\t\\to = c; while((c=fmt[++i]) === \\\"0\\\") o += c;\\n\\t\\t\\t\\t\\tout[out.length] = {t:'s', v:o}; break;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t/* falls through */\\n\\t\\t\\tcase '0': case '#':\\n\\t\\t\\t\\to = c; while(\\\"0#?.,E+-%\\\".indexOf(c=fmt[++i]) > -1 || c=='\\\\\\\\' && fmt[i+1] == \\\"-\\\" && \\\"0#\\\".indexOf(fmt[i+2])>-1) o += c;\\n\\t\\t\\t\\tout[out.length] = {t:'n', v:o}; break;\\n\\t\\t\\tcase '?':\\n\\t\\t\\t\\to = c; while(fmt[++i] === c) o+=c;\\n\\t\\t\\t\\tq={t:c, v:o}; out[out.length] = q; lst = c; break;\\n\\t\\t\\tcase '*': ++i; if(fmt[i] == ' ' || fmt[i] == '*') ++i; break; // **\\n\\t\\t\\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\\n\\t\\t\\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\\n\\t\\t\\t\\to = c; while(\\\"0123456789\\\".indexOf(fmt[++i]) > -1) o+=fmt[i];\\n\\t\\t\\t\\tout[out.length] = {t:'D', v:o}; break;\\n\\t\\t\\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\\n\\t\\t\\tdefault:\\n\\t\\t\\t\\tif(\\\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxz\\\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\\n\\t\\t\\t\\tout[out.length] = {t:'t', v:c}; ++i; break;\\n\\t\\t}\\n\\t}\\n\\tvar bt = 0, ss0 = 0, ssm;\\n\\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\\n\\t\\tswitch(out[i].t) {\\n\\t\\t\\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\\n\\t\\t\\tcase 's':\\n\\t\\t\\t\\tif((ssm=out[i].v.match(/\\\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\\n\\t\\t\\t\\tif(bt < 3) bt = 3;\\n\\t\\t\\t/* falls through */\\n\\t\\t\\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\\n\\t\\t\\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\\n\\t\\t\\tcase 'X': if(out[i].v === \\\"B2\\\");\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase 'Z':\\n\\t\\t\\t\\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\\n\\t\\t\\t\\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\\n\\t\\t\\t\\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\\n\\t\\t}\\n\\t}\\n\\tswitch(bt) {\\n\\t\\tcase 0: break;\\n\\t\\tcase 1:\\n\\t\\t\\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\\n\\t\\t\\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\\n\\t\\t\\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\\n\\t\\t\\tbreak;\\n\\t\\tcase 2:\\n\\t\\t\\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\\n\\t\\t\\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\\n\\t\\t\\tbreak;\\n\\t}\\n\\t/* replace fields */\\n\\tvar nstr = \\\"\\\", jj;\\n\\tfor(i=0; i < out.length; ++i) {\\n\\t\\tswitch(out[i].t) {\\n\\t\\t\\tcase 't': case 'T': case ' ': case 'D': break;\\n\\t\\t\\tcase 'X': out[i] = undefined; break;\\n\\t\\t\\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\\n\\t\\t\\t\\tout[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\\n\\t\\t\\t\\tout[i].t = 't'; break;\\n\\t\\t\\tcase 'n': case '(': case '?':\\n\\t\\t\\t\\tjj = i+1;\\n\\t\\t\\t\\twhile(out[jj] != null && (\\n\\t\\t\\t\\t\\t(c=out[jj].t) === \\\"?\\\" || c === \\\"D\\\" ||\\n\\t\\t\\t\\t\\t(c === \\\" \\\" || c === \\\"t\\\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \\\"t\\\" && out[jj+1].v === '/') ||\\n\\t\\t\\t\\t\\tout[i].t === '(' && (c === ' ' || c === 'n' || c === ')') ||\\n\\t\\t\\t\\t\\tc === 't' && (out[jj].v === '/' || '$€'.indexOf(out[jj].v) > -1 || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?')\\n\\t\\t\\t\\t)) {\\n\\t\\t\\t\\t\\tout[i].v += out[jj].v;\\n\\t\\t\\t\\t\\tout[jj] = undefined; ++jj;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tnstr += out[i].v;\\n\\t\\t\\t\\ti = jj-1; break;\\n\\t\\t\\tcase 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;\\n\\t\\t}\\n\\t}\\n\\tvar vv = \\\"\\\", myv, ostr;\\n\\tif(nstr.length > 0) {\\n\\t\\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v); /* '-' */\\n\\t\\tostr = write_num(nstr.charCodeAt(0) === 40 ? '(' : 'n', nstr, myv); /* '(' */\\n\\t\\tjj=ostr.length-1;\\n\\t\\tvar decpt = out.length;\\n\\t\\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].v.indexOf(\\\".\\\") > -1) { decpt = i; break; }\\n\\t\\tvar lasti=out.length;\\n\\t\\tif(decpt === out.length && ostr.indexOf(\\\"E\\\") === -1) {\\n\\t\\t\\tfor(i=out.length-1; i>= 0;--i) {\\n\\t\\t\\t\\tif(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;\\n\\t\\t\\t\\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\\n\\t\\t\\t\\telse if(jj < 0) out[i].v = \\\"\\\";\\n\\t\\t\\t\\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\\n\\t\\t\\t\\tout[i].t = 't';\\n\\t\\t\\t\\tlasti = i;\\n\\t\\t\\t}\\n\\t\\t\\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\\n\\t\\t}\\n\\t\\telse if(decpt !== out.length && ostr.indexOf(\\\"E\\\") === -1) {\\n\\t\\t\\tjj = ostr.indexOf(\\\".\\\")-1;\\n\\t\\t\\tfor(i=decpt; i>= 0; --i) {\\n\\t\\t\\t\\tif(out[i] == null || 'n?('.indexOf(out[i].t) === -1) continue;\\n\\t\\t\\t\\tj=out[i].v.indexOf(\\\".\\\")>-1&&i===decpt?out[i].v.indexOf(\\\".\\\")-1:out[i].v.length-1;\\n\\t\\t\\t\\tvv = out[i].v.substr(j+1);\\n\\t\\t\\t\\tfor(; j>=0; --j) {\\n\\t\\t\\t\\t\\tif(jj>=0 && (out[i].v[j] === \\\"0\\\" || out[i].v[j] === \\\"#\\\")) vv = ostr[jj--] + vv;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tout[i].v = vv;\\n\\t\\t\\t\\tout[i].t = 't';\\n\\t\\t\\t\\tlasti = i;\\n\\t\\t\\t}\\n\\t\\t\\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\\n\\t\\t\\tjj = ostr.indexOf(\\\".\\\")+1;\\n\\t\\t\\tfor(i=decpt; i<out.length; ++i) {\\n\\t\\t\\t\\tif(out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt ) continue;\\n\\t\\t\\t\\tj=out[i].v.indexOf(\\\".\\\")>-1&&i===decpt?out[i].v.indexOf(\\\".\\\")+1:0;\\n\\t\\t\\t\\tvv = out[i].v.substr(0,j);\\n\\t\\t\\t\\tfor(; j<out[i].v.length; ++j) {\\n\\t\\t\\t\\t\\tif(jj<ostr.length) vv += ostr[jj++];\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tout[i].v = vv;\\n\\t\\t\\t\\tout[i].t = 't';\\n\\t\\t\\t\\tlasti = i;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tfor(i=0; i<out.length; ++i) if(out[i] != null && 'n(?'.indexOf(out[i].t)>-1) {\\n\\t\\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \\\"-\\\" ? -v:v);\\n\\t\\tout[i].v = write_num(out[i].t, out[i].v, myv);\\n\\t\\tout[i].t = 't';\\n\\t}\\n\\tvar retval = \\\"\\\";\\n\\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\\n\\treturn retval;\\n}\\nSSF._eval = eval_fmt;\\nvar cfregex = /\\\\[[=<>]/;\\nvar cfregex2 = /\\\\[([=<>]*)(-?\\\\d+\\\\.?\\\\d*)\\\\]/;\\nfunction chkcond(v, rr) {\\n\\tif(rr == null) return false;\\n\\tvar thresh = parseFloat(rr[2]);\\n\\tswitch(rr[1]) {\\n\\t\\tcase \\\"=\\\": if(v == thresh) return true; break;\\n\\t\\tcase \\\">\\\": if(v > thresh) return true; break;\\n\\t\\tcase \\\"<\\\": if(v < thresh) return true; break;\\n\\t\\tcase \\\"<>\\\": if(v != thresh) return true; break;\\n\\t\\tcase \\\">=\\\": if(v >= thresh) return true; break;\\n\\t\\tcase \\\"<=\\\": if(v <= thresh) return true; break;\\n\\t}\\n\\treturn false;\\n}\\nfunction choose_fmt(f, v) {\\n\\tvar fmt = split_fmt(f);\\n\\tvar l = fmt.length, lat = fmt[l-1].indexOf(\\\"@\\\");\\n\\tif(l<4 && lat>-1) --l;\\n\\tif(fmt.length > 4) throw \\\"cannot find right format for |\\\" + fmt + \\\"|\\\";\\n\\tif(typeof v !== \\\"number\\\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\\\"@\\\"];\\n\\tswitch(fmt.length) {\\n\\t\\tcase 1: fmt = lat>-1 ? [\\\"General\\\", \\\"General\\\", \\\"General\\\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \\\"@\\\"]; break;\\n\\t\\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \\\"@\\\"]; break;\\n\\t\\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \\\"@\\\"]; break;\\n\\t\\tcase 4: break;\\n\\t}\\n\\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\\n\\tif(fmt[0].indexOf(\\\"[\\\") === -1 && fmt[1].indexOf(\\\"[\\\") === -1) return [l, ff];\\n\\tif(fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\\n\\t\\tvar m1 = fmt[0].match(cfregex2);\\n\\t\\tvar m2 = fmt[1].match(cfregex2);\\n\\t\\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\\n\\t}\\n\\treturn [l, ff];\\n}\\nfunction format(fmt,v,o) {\\n\\tfixopts(o != null ? o : (o=[]));\\n\\tvar sfmt = \\\"\\\";\\n\\tswitch(typeof fmt) {\\n\\t\\tcase \\\"string\\\": sfmt = fmt; break;\\n\\t\\tcase \\\"number\\\": sfmt = (o.table != null ? o.table : table_fmt)[fmt]; break;\\n\\t}\\n\\tif(isgeneral(sfmt,0)) return general_fmt(v, o);\\n\\tvar f = choose_fmt(sfmt, v);\\n\\tif(isgeneral(f[1])) return general_fmt(v, o);\\n\\tif(v === true) v = \\\"TRUE\\\"; else if(v === false) v = \\\"FALSE\\\";\\n\\telse if(v === \\\"\\\" || v == null) return \\\"\\\";\\n\\treturn eval_fmt(f[1], v, o, f[0]);\\n}\\nSSF._table = table_fmt;\\nSSF.load = function load_entry(fmt, idx) { table_fmt[idx] = fmt; };\\nSSF.format = format;\\nSSF.get_table = function get_table() { return table_fmt; };\\nSSF.load_table = function load_table(tbl) { for(var i=0; i!=0x0188; ++i) if(tbl[i] !== undefined) SSF.load(tbl[i], i); };\\n};\\nmake_ssf(SSF);\\n/* map from xlml named formats to SSF TODO: localize */\\nvar XLMLFormatMap = {\\n\\t\\\"General Number\\\": \\\"General\\\",\\n\\t\\\"General Date\\\": SSF._table[22],\\n\\t\\\"Long Date\\\": \\\"dddd, mmmm dd, yyyy\\\",\\n\\t\\\"Medium Date\\\": SSF._table[15],\\n\\t\\\"Short Date\\\": SSF._table[14],\\n\\t\\\"Long Time\\\": SSF._table[19],\\n\\t\\\"Medium Time\\\": SSF._table[18],\\n\\t\\\"Short Time\\\": SSF._table[20],\\n\\t\\\"Currency\\\": '\\\"$\\\"#,##0.00_);[Red]\\\\\\\\(\\\"$\\\"#,##0.00\\\\\\\\)',\\n\\t\\\"Fixed\\\": SSF._table[2],\\n\\t\\\"Standard\\\": SSF._table[4],\\n\\t\\\"Percent\\\": SSF._table[10],\\n\\t\\\"Scientific\\\": SSF._table[11],\\n\\t\\\"Yes/No\\\": '\\\"Yes\\\";\\\"Yes\\\";\\\"No\\\";@',\\n\\t\\\"True/False\\\": '\\\"True\\\";\\\"True\\\";\\\"False\\\";@',\\n\\t\\\"On/Off\\\": '\\\"Yes\\\";\\\"Yes\\\";\\\"No\\\";@'\\n};\\n\\nvar DO_NOT_EXPORT_CFB = true;\\n/* cfb.js (C) 2013-2014 SheetJS -- http://sheetjs.com */\\n/* vim: set ts=2: */\\n/*jshint eqnull:true */\\n\\n/* [MS-CFB] v20130118 */\\nvar CFB = (function _CFB(){\\nvar exports = {};\\nexports.version = '0.10.2';\\nfunction parse(file) {\\nvar mver = 3; // major version\\nvar ssz = 512; // sector size\\nvar nmfs = 0; // number of mini FAT sectors\\nvar ndfs = 0; // number of DIFAT sectors\\nvar dir_start = 0; // first directory sector location\\nvar minifat_start = 0; // first mini FAT sector location\\nvar difat_start = 0; // first mini FAT sector location\\n\\nvar fat_addrs = []; // locations of FAT sectors\\n\\n/* [MS-CFB] 2.2 Compound File Header */\\nvar blob = file.slice(0,512);\\nprep_blob(blob, 0);\\n\\n/* major version */\\nvar mv = check_get_mver(blob);\\nmver = mv[0];\\nswitch(mver) {\\n\\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\\n\\tdefault: throw \\\"Major Version: Expected 3 or 4 saw \\\" + mver;\\n}\\n\\n/* reprocess header */\\nif(ssz !== 512) { blob = file.slice(0,ssz); prep_blob(blob, 28 /* blob.l */); }\\n/* Save header for final object */\\nvar header = file.slice(0,ssz);\\n\\ncheck_shifts(blob, mver);\\n\\n// Number of Directory Sectors\\nvar nds = blob.read_shift(4, 'i');\\nif(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds;\\n\\n// Number of FAT Sectors\\n//var nfs = blob.read_shift(4, 'i');\\nblob.l += 4;\\n\\n// First Directory Sector Location\\ndir_start = blob.read_shift(4, 'i');\\n\\n// Transaction Signature\\nblob.l += 4;\\n\\n// Mini Stream Cutoff Size\\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\\n\\n// First Mini FAT Sector Location\\nminifat_start = blob.read_shift(4, 'i');\\n\\n// Number of Mini FAT Sectors\\nnmfs = blob.read_shift(4, 'i');\\n\\n// First DIFAT sector location\\ndifat_start = blob.read_shift(4, 'i');\\n\\n// Number of DIFAT Sectors\\nndfs = blob.read_shift(4, 'i');\\n\\n// Grab FAT Sector Locations\\nfor(var q, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\\n\\tq = blob.read_shift(4, 'i');\\n\\tif(q<0) break;\\n\\tfat_addrs[j] = q;\\n}\\n\\n/** Break the file up into sectors */\\nvar sectors = sectorify(file, ssz);\\n\\nsleuth_fat(difat_start, ndfs, sectors, ssz, fat_addrs);\\n\\n/** Chains */\\nvar sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);\\n\\nsector_list[dir_start].name = \\\"!Directory\\\";\\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \\\"!MiniFAT\\\";\\nsector_list[fat_addrs[0]].name = \\\"!FAT\\\";\\nsector_list.fat_addrs = fat_addrs;\\nsector_list.ssz = ssz;\\n\\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\\nvar files = {}, Paths = [], FileIndex = [], FullPaths = [], FullPathDir = {};\\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex);\\n\\nbuild_full_paths(FileIndex, FullPathDir, FullPaths, Paths);\\n\\nvar root_name = Paths.shift();\\nPaths.root = root_name;\\n\\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\\nvar find_path = make_find_path(FullPaths, Paths, FileIndex, files, root_name);\\n\\nreturn {\\n\\traw: {header: header, sectors: sectors},\\n\\tFileIndex: FileIndex,\\n\\tFullPaths: FullPaths,\\n\\tFullPathDir: FullPathDir,\\n\\tfind: find_path\\n};\\n} // parse\\n\\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\\nfunction check_get_mver(blob) {\\n\\t// header signature 8\\n\\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\\n\\n\\t// clsid 16\\n\\tblob.chk(HEADER_CLSID, 'CLSID: ');\\n\\n\\t// minor version 2\\n\\tvar mver = blob.read_shift(2, 'u');\\n\\n\\treturn [blob.read_shift(2,'u'), mver];\\n}\\nfunction check_shifts(blob, mver) {\\n\\tvar shift = 0x09;\\n\\n\\t// Byte Order\\n\\tblob.chk('feff', 'Byte Order: ');\\n\\n\\t// Sector Shift\\n\\tswitch((shift = blob.read_shift(2))) {\\n\\t\\tcase 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break;\\n\\t\\tcase 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break;\\n\\t\\tdefault: throw 'Sector Shift: Expected 9 or 12 saw ' + shift;\\n\\t}\\n\\n\\t// Mini Sector Shift\\n\\tblob.chk('0600', 'Mini Sector Shift: ');\\n\\n\\t// Reserved\\n\\tblob.chk('000000000000', 'Reserved: ');\\n}\\n\\n/** Break the file up into sectors */\\nfunction sectorify(file, ssz) {\\n\\tvar nsectors = Math.ceil(file.length/ssz)-1;\\n\\tvar sectors = new Array(nsectors);\\n\\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\\n\\tsectors[nsectors-1] = file.slice(nsectors*ssz);\\n\\treturn sectors;\\n}\\n\\n/* [MS-CFB] 2.6.4 Red-Black Tree */\\nfunction build_full_paths(FI, FPD, FP, Paths) {\\n\\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\\n\\tvar dad = new Array(pl), q = new Array(pl);\\n\\n\\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\\n\\n\\tfor(; j < q.length; ++j) {\\n\\t\\ti = q[j];\\n\\t\\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\\n\\t\\tif(dad[i] === i) {\\n\\t\\t\\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\\n\\t\\t\\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\\n\\t\\t}\\n\\t\\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\\n\\t\\tif(L !== -1) { dad[L] = dad[i]; q.push(L); }\\n\\t\\tif(R !== -1) { dad[R] = dad[i]; q.push(R); }\\n\\t}\\n\\tfor(i=1; i !== pl; ++i) if(dad[i] === i) {\\n\\t\\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\\n\\t\\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\\n\\t}\\n\\n\\tfor(i=1; i < pl; ++i) {\\n\\t\\tif(FI[i].type === 0 /* unknown */) continue;\\n\\t\\tj = dad[i];\\n\\t\\tif(j === 0) FP[i] = FP[0] + \\\"/\\\" + FP[i];\\n\\t\\telse while(j !== 0) {\\n\\t\\t\\tFP[i] = FP[j] + \\\"/\\\" + FP[i];\\n\\t\\t\\tj = dad[j];\\n\\t\\t}\\n\\t\\tdad[i] = 0;\\n\\t}\\n\\n\\tFP[0] += \\\"/\\\";\\n\\tfor(i=1; i < pl; ++i) {\\n\\t\\tif(FI[i].type !== 2 /* stream */) FP[i] += \\\"/\\\";\\n\\t\\tFPD[FP[i]] = FI[i];\\n\\t}\\n}\\n\\n/* [MS-CFB] 2.6.4 */\\nfunction make_find_path(FullPaths, Paths, FileIndex, files, root_name) {\\n\\tvar UCFullPaths = new Array(FullPaths.length);\\n\\tvar UCPaths = new Array(Paths.length), i;\\n\\tfor(i = 0; i < FullPaths.length; ++i) UCFullPaths[i] = FullPaths[i].toUpperCase().replace(chr0,'').replace(chr1,'!');\\n\\tfor(i = 0; i < Paths.length; ++i) UCPaths[i] = Paths[i].toUpperCase().replace(chr0,'').replace(chr1,'!');\\n\\treturn function find_path(path) {\\n\\t\\tvar k;\\n\\t\\tif(path.charCodeAt(0) === 47 /* \\\"/\\\" */) { k=true; path = root_name + path; }\\n\\t\\telse k = path.indexOf(\\\"/\\\") !== -1;\\n\\t\\tvar UCPath = path.toUpperCase().replace(chr0,'').replace(chr1,'!');\\n\\t\\tvar w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\\n\\t\\tif(w === -1) return null;\\n\\t\\treturn k === true ? FileIndex[w] : files[Paths[w]];\\n\\t};\\n}\\n\\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\\n DIFAT chains by storing the next sector number as the last 32 bytes */\\nfunction sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {\\n\\tvar q;\\n\\tif(idx === ENDOFCHAIN) {\\n\\t\\tif(cnt !== 0) throw \\\"DIFAT chain shorter than expected\\\";\\n\\t} else if(idx !== -1 /*FREESECT*/) {\\n\\t\\tvar sector = sectors[idx], m = (ssz>>>2)-1;\\n\\t\\tfor(var i = 0; i < m; ++i) {\\n\\t\\t\\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\\n\\t\\t\\tfat_addrs.push(q);\\n\\t\\t}\\n\\t\\tsleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\\n\\t}\\n}\\n\\n/** Follow the linked list of sectors for a given starting point */\\nfunction get_sector_list(sectors, start, fat_addrs, ssz, chkd) {\\n\\tvar sl = sectors.length;\\n\\tvar buf, buf_chain;\\n\\tif(!chkd) chkd = new Array(sl);\\n\\tvar modulus = ssz - 1, j, jj;\\n\\tbuf = [];\\n\\tbuf_chain = [];\\n\\tfor(j=start; j>=0;) {\\n\\t\\tchkd[j] = true;\\n\\t\\tbuf[buf.length] = j;\\n\\t\\tbuf_chain.push(sectors[j]);\\n\\t\\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\\n\\t\\tjj = ((j*4) & modulus);\\n\\t\\tif(ssz < 4 + jj) throw \\\"FAT boundary crossed: \\\" + j + \\\" 4 \\\"+ssz;\\n\\t\\tj = __readInt32LE(sectors[addr], jj);\\n\\t}\\n\\treturn {nodes: buf, data:__toBuffer([buf_chain])};\\n}\\n\\n/** Chase down the sector linked lists */\\nfunction make_sector_list(sectors, dir_start, fat_addrs, ssz) {\\n\\tvar sl = sectors.length, sector_list = new Array(sl);\\n\\tvar chkd = new Array(sl), buf, buf_chain;\\n\\tvar modulus = ssz - 1, i, j, k, jj;\\n\\tfor(i=0; i < sl; ++i) {\\n\\t\\tbuf = [];\\n\\t\\tk = (i + dir_start); if(k >= sl) k-=sl;\\n\\t\\tif(chkd[k] === true) continue;\\n\\t\\tbuf_chain = [];\\n\\t\\tfor(j=k; j>=0;) {\\n\\t\\t\\tchkd[j] = true;\\n\\t\\t\\tbuf[buf.length] = j;\\n\\t\\t\\tbuf_chain.push(sectors[j]);\\n\\t\\t\\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\\n\\t\\t\\tjj = ((j*4) & modulus);\\n\\t\\t\\tif(ssz < 4 + jj) throw \\\"FAT boundary crossed: \\\" + j + \\\" 4 \\\"+ssz;\\n\\t\\t\\tj = __readInt32LE(sectors[addr], jj);\\n\\t\\t}\\n\\t\\tsector_list[k] = {nodes: buf, data:__toBuffer([buf_chain])};\\n\\t}\\n\\treturn sector_list;\\n}\\n\\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\\nfunction read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex) {\\n\\tvar blob;\\n\\tvar minifat_store = 0, pl = (Paths.length?2:0);\\n\\tvar sector = sector_list[dir_start].data;\\n\\tvar i = 0, namelen = 0, name, o, ctime, mtime;\\n\\tfor(; i < sector.length; i+= 128) {\\n\\t\\tblob = sector.slice(i, i+128);\\n\\t\\tprep_blob(blob, 64);\\n\\t\\tnamelen = blob.read_shift(2);\\n\\t\\tif(namelen === 0) continue;\\n\\t\\tname = __utf16le(blob,0,namelen-pl);\\n\\t\\tPaths.push(name);\\n\\t\\to = {\\n\\t\\t\\tname: name,\\n\\t\\t\\ttype: blob.read_shift(1),\\n\\t\\t\\tcolor: blob.read_shift(1),\\n\\t\\t\\tL: blob.read_shift(4, 'i'),\\n\\t\\t\\tR: blob.read_shift(4, 'i'),\\n\\t\\t\\tC: blob.read_shift(4, 'i'),\\n\\t\\t\\tclsid: blob.read_shift(16),\\n\\t\\t\\tstate: blob.read_shift(4, 'i')\\n\\t\\t};\\n\\t\\tctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\\n\\t\\tif(ctime !== 0) {\\n\\t\\t\\to.ctime = ctime; o.ct = read_date(blob, blob.l-8);\\n\\t\\t}\\n\\t\\tmtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\\n\\t\\tif(mtime !== 0) {\\n\\t\\t\\to.mtime = mtime; o.mt = read_date(blob, blob.l-8);\\n\\t\\t}\\n\\t\\to.start = blob.read_shift(4, 'i');\\n\\t\\to.size = blob.read_shift(4, 'i');\\n\\t\\tif(o.type === 5) { /* root */\\n\\t\\t\\tminifat_store = o.start;\\n\\t\\t\\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \\\"!StreamData\\\";\\n\\t\\t\\t/*minifat_size = o.size;*/\\n\\t\\t} else if(o.size >= 4096 /* MSCSZ */) {\\n\\t\\t\\to.storage = 'fat';\\n\\t\\t\\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\\n\\t\\t\\tsector_list[o.start].name = o.name;\\n\\t\\t\\to.content = sector_list[o.start].data.slice(0,o.size);\\n\\t\\t\\tprep_blob(o.content, 0);\\n\\t\\t} else {\\n\\t\\t\\to.storage = 'minifat';\\n\\t\\t\\tif(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN) {\\n\\t\\t\\t\\to.content = sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);\\n\\t\\t\\t\\tprep_blob(o.content, 0);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfiles[name] = o;\\n\\t\\tFileIndex.push(o);\\n\\t}\\n}\\n\\nfunction read_date(blob, offset) {\\n\\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\\n}\\n\\nvar fs;\\nfunction readFileSync(filename, options) {\\n\\tif(fs === undefined) fs = require('fs');\\n\\treturn parse(fs.readFileSync(filename), options);\\n}\\n\\nfunction readSync(blob, options) {\\n\\tswitch(options !== undefined && options.type !== undefined ? options.type : \\\"base64\\\") {\\n\\t\\tcase \\\"file\\\": return readFileSync(blob, options);\\n\\t\\tcase \\\"base64\\\": return parse(s2a(Base64.decode(blob)), options);\\n\\t\\tcase \\\"binary\\\": return parse(s2a(blob), options);\\n\\t}\\n\\treturn parse(blob);\\n}\\n\\n/** CFB Constants */\\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\\n/* 2.1 Compound File Sector Numbers and Types */\\nvar ENDOFCHAIN = -2;\\n/* 2.2 Compound File Header */\\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\\nvar HEADER_CLSID = '00000000000000000000000000000000';\\nvar consts = {\\n\\t/* 2.1 Compund File Sector Numbers and Types */\\n\\tMAXREGSECT: -6,\\n\\tDIFSECT: -4,\\n\\tFATSECT: -3,\\n\\tENDOFCHAIN: ENDOFCHAIN,\\n\\tFREESECT: -1,\\n\\t/* 2.2 Compound File Header */\\n\\tHEADER_SIGNATURE: HEADER_SIGNATURE,\\n\\tHEADER_MINOR_VERSION: '3e00',\\n\\tMAXREGSID: -6,\\n\\tNOSTREAM: -1,\\n\\tHEADER_CLSID: HEADER_CLSID,\\n\\t/* 2.6.1 Compound File Directory Entry */\\n\\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\\n};\\n\\nexports.read = readSync;\\nexports.parse = parse;\\nexports.utils = {\\n\\tReadShift: ReadShift,\\n\\tCheckField: CheckField,\\n\\tprep_blob: prep_blob,\\n\\tbconcat: bconcat,\\n\\tconsts: consts\\n};\\n\\nreturn exports;\\n})();\\n\\nif(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }\\nfunction isval(x) { return x !== undefined && x !== null; }\\n\\nfunction keys(o) { return Object.keys(o); }\\n\\nfunction evert_key(obj, key) {\\n\\tvar o = [], K = keys(obj);\\n\\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]][key]] = K[i];\\n\\treturn o;\\n}\\n\\nfunction evert(obj) {\\n\\tvar o = [], K = keys(obj);\\n\\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\\n\\treturn o;\\n}\\n\\nfunction evert_num(obj) {\\n\\tvar o = [], K = keys(obj);\\n\\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\\n\\treturn o;\\n}\\n\\nfunction evert_arr(obj) {\\n\\tvar o = [], K = keys(obj);\\n\\tfor(var i = 0; i !== K.length; ++i) {\\n\\t\\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\\n\\t\\to[obj[K[i]]].push(K[i]);\\n\\t}\\n\\treturn o;\\n}\\n\\n/* TODO: date1904 logic */\\nfunction datenum(v, date1904) {\\n\\tif(date1904) v+=1462;\\n\\tvar epoch = Date.parse(v);\\n\\treturn (epoch + 2209161600000) / (24 * 60 * 60 * 1000);\\n}\\n\\nfunction cc2str(arr) {\\n\\tvar o = \\\"\\\";\\n\\tfor(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);\\n\\treturn o;\\n}\\n\\nfunction getdata(data) {\\n\\tif(!data) return null;\\n\\tif(data.name.substr(-4) === \\\".bin\\\") {\\n\\t\\tif(data.data) return char_codes(data.data);\\n\\t\\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\\n\\t\\tif(data._data && data._data.getContent) return Array.prototype.slice.call(data._data.getContent());\\n\\t} else {\\n\\t\\tif(data.data) return data.name.substr(-4) !== \\\".bin\\\" ? debom_xml(data.data) : char_codes(data.data);\\n\\t\\tif(data.asNodeBuffer && has_buf) return debom_xml(data.asNodeBuffer().toString('binary'));\\n\\t\\tif(data.asBinary) return debom_xml(data.asBinary());\\n\\t\\tif(data._data && data._data.getContent) return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\\n\\t}\\n\\treturn null;\\n}\\n\\nfunction safegetzipfile(zip, file) {\\n\\tvar f = file; if(zip.files[f]) return zip.files[f];\\n\\tf = file.toLowerCase(); if(zip.files[f]) return zip.files[f];\\n\\tf = f.replace(/\\\\//g,'\\\\\\\\'); if(zip.files[f]) return zip.files[f];\\n\\treturn null;\\n}\\n\\nfunction getzipfile(zip, file) {\\n\\tvar o = safegetzipfile(zip, file);\\n\\tif(o == null) throw new Error(\\\"Cannot find file \\\" + file + \\\" in zip\\\");\\n\\treturn o;\\n}\\n\\nfunction getzipdata(zip, file, safe) {\\n\\tif(!safe) return getdata(getzipfile(zip, file));\\n\\tif(!file) return null;\\n\\ttry { return getzipdata(zip, file); } catch(e) { return null; }\\n}\\n\\nvar _fs, jszip;\\nif(typeof JSZip !== 'undefined') jszip = JSZip;\\nif (typeof exports !== 'undefined') {\\n\\tif (typeof module !== 'undefined' && module.exports) {\\n\\t\\tif(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');\\n\\t\\tif(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;\\n\\t\\t_fs = require('f'+'s');\\n\\t}\\n}\\nvar attregexg=/([\\\\w:]+)=((?:\\\")([^\\\"]*)(?:\\\")|(?:')([^']*)(?:'))/g;\\nvar tagregex=/<[^>]*>/g;\\nvar nsregex=/<\\\\w*:/, nsregex2 = /<(\\\\/?)\\\\w+:/;\\nfunction parsexmltag(tag, skip_root) {\\n\\tvar z = [];\\n\\tvar eq = 0, c = 0;\\n\\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\\n\\tif(!skip_root) z[0] = tag.substr(0, eq);\\n\\tif(eq === tag.length) return z;\\n\\tvar m = tag.match(attregexg), j=0, w=\\\"\\\", v=\\\"\\\", i=0, q=\\\"\\\", cc=\\\"\\\";\\n\\tif(m) for(i = 0; i != m.length; ++i) {\\n\\t\\tcc = m[i];\\n\\t\\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\\n\\t\\tq = cc.substr(0,c); v = cc.substring(c+2, cc.length-1);\\n\\t\\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\\n\\t\\tif(j===q.length) z[q] = v;\\n\\t\\telse z[(j===5 && q.substr(0,5)===\\\"xmlns\\\"?\\\"xmlns\\\":\\\"\\\")+q.substr(j+1)] = v;\\n\\t}\\n\\treturn z;\\n}\\nfunction strip_ns(x) { return x.replace(nsregex2, \\\"<$1\\\"); }\\n\\nvar encodings = {\\n\\t'"': '\\\"',\\n\\t''': \\\"'\\\",\\n\\t'>': '>',\\n\\t'<': '<',\\n\\t'&': '&'\\n};\\nvar rencoding = evert(encodings);\\nvar rencstr = \\\"&<>'\\\\\\\"\\\".split(\\\"\\\");\\n\\n// TODO: CP remap (need to read file version to determine OS)\\nvar unescapexml = (function() {\\n\\tvar encregex = /&[a-z]*;/g, coderegex = /_x([\\\\da-fA-F]+)_/g;\\n\\treturn function unescapexml(text){\\n\\t\\tvar s = text + '';\\n\\t\\treturn s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\\n\\t};\\n})();\\n\\nvar decregex=/[&<>'\\\"]/g, charegex = /[\\\\u0000-\\\\u0008\\\\u000b-\\\\u001f]/g;\\nfunction escapexml(text){\\n\\tvar s = text + '';\\n\\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \\\"_x\\\" + (\\\"000\\\"+s.charCodeAt(0).toString(16)).substr(-4) + \\\"_\\\";});\\n}\\n\\n/* TODO: handle codepages */\\nvar xlml_fixstr = (function() {\\n\\tvar entregex = /&#(\\\\d+);/g;\\n\\tfunction entrepl($$,$1) { return String.fromCharCode(parseInt($1,10)); }\\n\\treturn function xlml_fixstr(str) { return str.replace(entregex,entrepl); };\\n})();\\n\\nfunction parsexmlbool(value, tag) {\\n\\tswitch(value) {\\n\\t\\tcase '1': case 'true': case 'TRUE': return true;\\n\\t\\t/* case '0': case 'false': case 'FALSE':*/\\n\\t\\tdefault: return false;\\n\\t}\\n}\\n\\nvar utf8read = function utf8reada(orig) {\\n\\tvar out = \\\"\\\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\\n\\twhile (i < orig.length) {\\n\\t\\tc = orig.charCodeAt(i++);\\n\\t\\tif (c < 128) { out += String.fromCharCode(c); continue; }\\n\\t\\td = orig.charCodeAt(i++);\\n\\t\\tif (c>191 && c<224) { out += String.fromCharCode(((c & 31) << 6) | (d & 63)); continue; }\\n\\t\\te = orig.charCodeAt(i++);\\n\\t\\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\\n\\t\\tf = orig.charCodeAt(i++);\\n\\t\\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\\n\\t\\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\\n\\t\\tout += String.fromCharCode(0xDC00 + (w&1023));\\n\\t}\\n\\treturn out;\\n};\\n\\n\\nif(has_buf) {\\n\\tvar utf8readb = function utf8readb(data) {\\n\\t\\tvar out = new Buffer(2*data.length), w, i, j = 1, k = 0, ww=0, c;\\n\\t\\tfor(i = 0; i < data.length; i+=j) {\\n\\t\\t\\tj = 1;\\n\\t\\t\\tif((c=data.charCodeAt(i)) < 128) w = c;\\n\\t\\t\\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\\n\\t\\t\\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\\n\\t\\t\\telse { j = 4;\\n\\t\\t\\t\\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\\n\\t\\t\\t\\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\\n\\t\\t\\t}\\n\\t\\t\\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\\n\\t\\t\\tout[k++] = w%256; out[k++] = w>>>8;\\n\\t\\t}\\n\\t\\tout.length = k;\\n\\t\\treturn out.toString('ucs2');\\n\\t};\\n\\tvar corpus = \\\"foo bar baz\\\\u00e2\\\\u0098\\\\u0083\\\\u00f0\\\\u009f\\\\u008d\\\\u00a3\\\";\\n\\tif(utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;\\n\\tvar utf8readc = function utf8readc(data) { return Buffer(data, 'binary').toString('utf8'); };\\n\\tif(utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;\\n}\\n\\n// matches <foo>...</foo> extracts content\\nvar matchtag = (function() {\\n\\tvar mtcache = {};\\n\\treturn function matchtag(f,g) {\\n\\t\\tvar t = f+\\\"|\\\"+g;\\n\\t\\tif(mtcache[t] !== undefined) return mtcache[t];\\n\\t\\treturn (mtcache[t] = new RegExp('<(?:\\\\\\\\w+:)?'+f+'(?: xml:space=\\\"preserve\\\")?(?:[^>]*)>([^\\\\u2603]*)</(?:\\\\\\\\w+:)?'+f+'>',(g||\\\"\\\")));\\n\\t};\\n})();\\n\\nvar vtregex = (function(){ var vt_cache = {};\\n\\treturn function vt_regex(bt) {\\n\\t\\tif(vt_cache[bt] !== undefined) return vt_cache[bt];\\n\\t\\treturn (vt_cache[bt] = new RegExp(\\\"<vt:\\\" + bt + \\\">(.*?)</vt:\\\" + bt + \\\">\\\", 'g') );\\n};})();\\nvar vtvregex = /<\\\\/?vt:variant>/g, vtmregex = /<vt:([^>]*)>(.*)</;\\nfunction parseVector(data) {\\n\\tvar h = parsexmltag(data);\\n\\n\\tvar matches = data.match(vtregex(h.baseType))||[];\\n\\tif(matches.length != h.size) throw \\\"unexpected vector length \\\" + matches.length + \\\" != \\\" + h.size;\\n\\tvar res = [];\\n\\tmatches.forEach(function(x) {\\n\\t\\tvar v = x.replace(vtvregex,\\\"\\\").match(vtmregex);\\n\\t\\tres.push({v:v[2], t:v[1]});\\n\\t});\\n\\treturn res;\\n}\\n\\nvar wtregex = /(^\\\\s|\\\\s$|\\\\n)/;\\nfunction writetag(f,g) {return '<' + f + (g.match(wtregex)?' xml:space=\\\"preserve\\\"' : \\\"\\\") + '>' + g + '</' + f + '>';}\\n\\nfunction wxt_helper(h) { return keys(h).map(function(k) { return \\\" \\\" + k + '=\\\"' + h[k] + '\\\"';}).join(\\\"\\\"); }\\nfunction writextag(f,g,h) { return '<' + f + (isval(h) ? wxt_helper(h) : \\\"\\\") + (isval(g) ? (g.match(wtregex)?' xml:space=\\\"preserve\\\"' : \\\"\\\") + '>' + g + '</' + f : \\\"/\\\") + '>';}\\n\\nfunction write_w3cdtf(d, t) { try { return d.toISOString().replace(/\\\\.\\\\d*/,\\\"\\\"); } catch(e) { if(t) throw e; } }\\n\\nfunction write_vt(s) {\\n\\tswitch(typeof s) {\\n\\t\\tcase 'string': return writextag('vt:lpwstr', s);\\n\\t\\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', String(s));\\n\\t\\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\\n\\t}\\n\\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\\n\\tthrow new Error(\\\"Unable to serialize \\\" + s);\\n}\\n\\nvar XML_HEADER = '<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"yes\\\"?>\\\\r\\\\n';\\nvar XMLNS = {\\n\\t'dc': 'http://purl.org/dc/elements/1.1/',\\n\\t'dcterms': 'http://purl.org/dc/terms/',\\n\\t'dcmitype': 'http://purl.org/dc/dcmitype/',\\n\\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\\n\\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\\n\\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\\n\\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\\n\\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\\n\\t'xsd': 'http://www.w3.org/2001/XMLSchema'\\n};\\n\\nXMLNS.main = [\\n\\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\\n\\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\\n\\t'http://schemas.microsoft.com/office/excel/2006/main',\\n\\t'http://schemas.microsoft.com/office/excel/2006/2'\\n];\\n\\nfunction readIEEE754(buf, idx, isLE, nl, ml) {\\n\\tif(isLE === undefined) isLE = true;\\n\\tif(!nl) nl = 8;\\n\\tif(!ml && nl === 8) ml = 52;\\n\\tvar e, m, el = nl * 8 - ml - 1, eMax = (1 << el) - 1, eBias = eMax >> 1;\\n\\tvar bits = -7, d = isLE ? -1 : 1, i = isLE ? (nl - 1) : 0, s = buf[idx + i];\\n\\n\\ti += d;\\n\\te = s & ((1 << (-bits)) - 1); s >>>= (-bits); bits += el;\\n\\tfor (; bits > 0; e = e * 256 + buf[idx + i], i += d, bits -= 8);\\n\\tm = e & ((1 << (-bits)) - 1); e >>>= (-bits); bits += ml;\\n\\tfor (; bits > 0; m = m * 256 + buf[idx + i], i += d, bits -= 8);\\n\\tif (e === eMax) return m ? NaN : ((s ? -1 : 1) * Infinity);\\n\\telse if (e === 0) e = 1 - eBias;\\n\\telse { m = m + Math.pow(2, ml); e = e - eBias; }\\n\\treturn (s ? -1 : 1) * m * Math.pow(2, e - ml);\\n}\\n\\nvar __toBuffer, ___toBuffer;\\n__toBuffer = ___toBuffer = function toBuffer_(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; };\\nvar __utf16le, ___utf16le;\\n__utf16le = ___utf16le = function utf16le_(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join(\\\"\\\"); };\\nvar __hexlify, ___hexlify;\\n__hexlify = ___hexlify = function hexlify_(b,s,l) { return b.slice(s,(s+l)).map(function(x){return (x<16?\\\"0\\\":\\\"\\\") + x.toString(16);}).join(\\\"\\\"); };\\nvar __utf8, ___utf8;\\n__utf8 = ___utf8 = function(b,s,e) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(\\\"\\\"); };\\nvar __lpstr, ___lpstr;\\n__lpstr = ___lpstr = function lpstr_(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \\\"\\\";};\\nvar __lpwstr, ___lpwstr;\\n__lpwstr = ___lpwstr = function lpwstr_(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \\\"\\\";};\\nvar __double, ___double;\\n__double = ___double = function(b, idx) { return readIEEE754(b, idx);};\\n\\nvar is_buf = function is_buf_a(a) { return Array.isArray(a); };\\nif(has_buf) {\\n\\t__utf16le = function utf16le_b(b,s,e) { if(!Buffer.isBuffer(b)) return ___utf16le(b,s,e); return b.toString('utf16le',s,e); };\\n\\t__hexlify = function(b,s,l) { return Buffer.isBuffer(b) ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };\\n\\t__lpstr = function lpstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \\\"\\\";};\\n\\t__lpwstr = function lpwstr_b(b,i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\\n\\t__utf8 = function utf8_b(s,e) { return this.toString('utf8',s,e); };\\n\\t__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};\\n\\tbconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };\\n\\t__double = function double_(b,i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };\\n\\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); };\\n}\\n\\n/* from js-xls */\\nif(typeof cptable !== 'undefined') {\\n\\t__utf16le = function(b,s,e) { return cptable.utils.decode(1200, b.slice(s,e)); };\\n\\t__utf8 = function(b,s,e) { return cptable.utils.decode(65001, b.slice(s,e)); };\\n\\t__lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \\\"\\\";};\\n\\t__lpwstr = function(b,i) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \\\"\\\";};\\n}\\n\\nvar __readUInt8 = function(b, idx) { return b[idx]; };\\nvar __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; };\\nvar __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u < 0x8000) ? u : (0xffff - u + 1) * -1; };\\nvar __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\\nvar __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\\n\\nvar ___unhexlify = function(s) { return s.match(/../g).map(function(x) { return parseInt(x,16);}); };\\nvar __unhexlify = typeof Buffer !== \\\"undefined\\\" ? function(s) { return Buffer.isBuffer(s) ? new Buffer(s, 'hex') : ___unhexlify(s); } : ___unhexlify;\\n\\nfunction ReadShift(size, t) {\\n\\tvar o=\\\"\\\", oI, oR, oo=[], w, vv, i, loc;\\n\\tswitch(t) {\\n\\t\\tcase 'dbcs':\\n\\t\\t\\tloc = this.l;\\n\\t\\t\\tif(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString(\\\"utf16le\\\");\\n\\t\\t\\telse for(i = 0; i != size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\\n\\t\\t\\tsize *= 2;\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\\n\\t\\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\\n\\n\\t\\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\\n\\t\\tcase 'lpstr': o = __lpstr(this, this.l); size = 5 + o.length; break;\\n\\t\\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\\n\\t\\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 5 + o.length; if(o[o.length-1] == '\\\\u0000') size += 2; break;\\n\\n\\t\\tcase 'cstr': size = 0; o = \\\"\\\";\\n\\t\\t\\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\\n\\t\\t\\to = oo.join(\\\"\\\"); break;\\n\\t\\tcase 'wstr': size = 0; o = \\\"\\\";\\n\\t\\t\\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\\n\\t\\t\\tsize+=2; o = oo.join(\\\"\\\"); break;\\n\\n\\t\\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\\n\\t\\tcase 'dbcs-cont': o = \\\"\\\"; loc = this.l;\\n\\t\\t\\tfor(i = 0; i != size; ++i) {\\n\\t\\t\\t\\tif(this.lens && this.lens.indexOf(loc) !== -1) {\\n\\t\\t\\t\\t\\tw = __readUInt8(this, loc);\\n\\t\\t\\t\\t\\tthis.l = loc + 1;\\n\\t\\t\\t\\t\\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\\n\\t\\t\\t\\t\\treturn oo.join(\\\"\\\") + vv;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\too.push(_getchar(__readUInt16LE(this, loc)));\\n\\t\\t\\t\\tloc+=2;\\n\\t\\t\\t} o = oo.join(\\\"\\\"); size *= 2; break;\\n\\n\\t\\tcase 'sbcs-cont': o = \\\"\\\"; loc = this.l;\\n\\t\\t\\tfor(i = 0; i != size; ++i) {\\n\\t\\t\\t\\tif(this.lens && this.lens.indexOf(loc) !== -1) {\\n\\t\\t\\t\\t\\tw = __readUInt8(this, loc);\\n\\t\\t\\t\\t\\tthis.l = loc + 1;\\n\\t\\t\\t\\t\\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\\n\\t\\t\\t\\t\\treturn oo.join(\\\"\\\") + vv;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\too.push(_getchar(__readUInt8(this, loc)));\\n\\t\\t\\t\\tloc+=1;\\n\\t\\t\\t} o = oo.join(\\\"\\\"); break;\\n\\n\\t\\tdefault:\\n\\tswitch(size) {\\n\\t\\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\\n\\t\\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\\n\\t\\tcase 4:\\n\\t\\t\\tif(t === 'i' || (this[this.l+3] & 0x80)===0) { oI = __readInt32LE(this, this.l); this.l += 4; return oI; }\\n\\t\\t\\telse { oR = __readUInt32LE(this, this.l); this.l += 4; return oR; } break;\\n\\t\\tcase 8: if(t === 'f') { oR = __double(this, this.l); this.l += 8; return oR; }\\n\\t\\t/* falls through */\\n\\t\\tcase 16: o = __hexlify(this, this.l, size); break;\\n\\t}}\\n\\tthis.l+=size; return o;\\n}\\n\\nfunction WriteShift(t, val, f) {\\n\\tvar size, i;\\n\\tif(f === 'dbcs') {\\n\\t\\tfor(i = 0; i != val.length; ++i) this.writeUInt16LE(val.charCodeAt(i), this.l + 2 * i);\\n\\t\\tsize = 2 * val.length;\\n\\t} else switch(t) {\\n\\t\\tcase 1: size = 1; this[this.l] = val&255; break;\\n\\t\\tcase 3: size = 3; this[this.l+2] = val & 255; val >>>= 8; this[this.l+1] = val&255; val >>>= 8; this[this.l] = val&255; break;\\n\\t\\tcase 4: size = 4; this.writeUInt32LE(val, this.l); break;\\n\\t\\tcase 8: size = 8; if(f === 'f') { this.writeDoubleLE(val, this.l); break; }\\n\\t\\t/* falls through */\\n\\t\\tcase 16: break;\\n\\t\\tcase -4: size = 4; this.writeInt32LE(val, this.l); break;\\n\\t}\\n\\tthis.l += size; return this;\\n}\\n\\nfunction CheckField(hexstr, fld) {\\n\\tvar m = __hexlify(this,this.l,hexstr.length>>1);\\n\\tif(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m;\\n\\tthis.l += hexstr.length>>1;\\n}\\n\\nfunction prep_blob(blob, pos) {\\n\\tblob.l = pos;\\n\\tblob.read_shift = ReadShift;\\n\\tblob.chk = CheckField;\\n\\tblob.write_shift = WriteShift;\\n}\\n\\nfunction parsenoop(blob, length) { blob.l += length; }\\n\\nfunction writenoop(blob, length) { blob.l += length; }\\n\\nfunction new_buf(sz) {\\n\\tvar o = new_raw_buf(sz);\\n\\tprep_blob(o, 0);\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.1.4 Record */\\nfunction recordhopper(data, cb, opts) {\\n\\tvar tmpbyte, cntbyte, length;\\n\\tprep_blob(data, data.l || 0);\\n\\twhile(data.l < data.length) {\\n\\t\\tvar RT = data.read_shift(1);\\n\\t\\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\\n\\t\\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\\n\\t\\ttmpbyte = data.read_shift(1);\\n\\t\\tlength = tmpbyte & 0x7F;\\n\\t\\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\\n\\t\\tvar d = R.f(data, length, opts);\\n\\t\\tif(cb(d, R, RT)) return;\\n\\t}\\n}\\n\\n/* control buffer usage for fixed-length buffers */\\nfunction buf_array() {\\n\\tvar bufs = [], blksz = 2048;\\n\\tvar newblk = function ba_newblk(sz) {\\n\\t\\tvar o = new_buf(sz);\\n\\t\\tprep_blob(o, 0);\\n\\t\\treturn o;\\n\\t};\\n\\n\\tvar curbuf = newblk(blksz);\\n\\n\\tvar endbuf = function ba_endbuf() {\\n\\t\\tcurbuf.length = curbuf.l;\\n\\t\\tif(curbuf.length > 0) bufs.push(curbuf);\\n\\t\\tcurbuf = null;\\n\\t};\\n\\n\\tvar next = function ba_next(sz) {\\n\\t\\tif(sz < curbuf.length - curbuf.l) return curbuf;\\n\\t\\tendbuf();\\n\\t\\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\\n\\t};\\n\\n\\tvar end = function ba_end() {\\n\\t\\tendbuf();\\n\\t\\treturn __toBuffer([bufs]);\\n\\t};\\n\\n\\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; next(blksz); };\\n\\n\\treturn { next:next, push:push, end:end, _bufs:bufs };\\n}\\n\\nfunction write_record(ba, type, payload, length) {\\n\\tvar t = evert_RE[type], l;\\n\\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\\n\\tl = 1 + (t >= 0x80 ? 1 : 0) + 1 + length;\\n\\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\\n\\tvar o = ba.next(l);\\n\\tif(t <= 0x7F) o.write_shift(1, t);\\n\\telse {\\n\\t\\to.write_shift(1, (t & 0x7F) + 0x80);\\n\\t\\to.write_shift(1, (t >> 7));\\n\\t}\\n\\tfor(var i = 0; i != 4; ++i) {\\n\\t\\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\\n\\t\\telse { o.write_shift(1, length); break; }\\n\\t}\\n\\tif(length > 0 && is_buf(payload)) ba.push(payload);\\n}\\n/* XLS ranges enforced */\\nfunction shift_cell_xls(cell, tgt) {\\n\\tif(tgt.s) {\\n\\t\\tif(cell.cRel) cell.c += tgt.s.c;\\n\\t\\tif(cell.rRel) cell.r += tgt.s.r;\\n\\t} else {\\n\\t\\tcell.c += tgt.c;\\n\\t\\tcell.r += tgt.r;\\n\\t}\\n\\tcell.cRel = cell.rRel = 0;\\n\\twhile(cell.c >= 0x100) cell.c -= 0x100;\\n\\twhile(cell.r >= 0x10000) cell.r -= 0x10000;\\n\\treturn cell;\\n}\\n\\nfunction shift_range_xls(cell, range) {\\n\\tcell.s = shift_cell_xls(cell.s, range.s);\\n\\tcell.e = shift_cell_xls(cell.e, range.s);\\n\\treturn cell;\\n}\\n\\nvar OFFCRYPTO = {};\\nvar make_offcrypto = function(O, _crypto) {\\n\\tvar crypto;\\n\\tif(typeof _crypto !== 'undefined') crypto = _crypto;\\n\\telse if(typeof require !== 'undefined') {\\n\\t\\ttry { crypto = require('cry'+'pto'); }\\n\\t\\tcatch(e) { crypto = null; }\\n\\t}\\n\\n\\tO.rc4 = function(key, data) {\\n\\t\\tvar S = new Array(256);\\n\\t\\tvar c = 0, i = 0, j = 0, t = 0;\\n\\t\\tfor(i = 0; i != 256; ++i) S[i] = i;\\n\\t\\tfor(i = 0; i != 256; ++i) {\\n\\t\\t\\tj = (j + S[i] + (key[i%key.length]).charCodeAt(0))&255;\\n\\t\\t\\tt = S[i]; S[i] = S[j]; S[j] = t;\\n\\t\\t}\\n\\t\\ti = j = 0; out = Buffer(data.length);\\n\\t\\tfor(c = 0; c != data.length; ++c) {\\n\\t\\t\\ti = (i + 1)&255;\\n\\t\\t\\tj = (j + S[i])%256;\\n\\t\\t\\tt = S[i]; S[i] = S[j]; S[j] = t;\\n\\t\\t\\tout[c] = (data[c] ^ S[(S[i]+S[j])&255]);\\n\\t\\t}\\n\\t\\treturn out;\\n\\t};\\n\\n\\tif(crypto) {\\n\\t\\tO.md5 = function(hex) { return crypto.createHash('md5').update(hex).digest('hex'); };\\n\\t} else {\\n\\t\\tO.md5 = function(hex) { throw \\\"unimplemented\\\"; };\\n\\t}\\n};\\nmake_offcrypto(OFFCRYPTO, typeof crypto !== \\\"undefined\\\" ? crypto : undefined);\\n\\n\\n/* [MS-XLSB] 2.5.143 */\\nfunction parse_StrRun(data, length) {\\n\\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\\n}\\n\\n/* [MS-XLSB] 2.1.7.121 */\\nfunction parse_RichStr(data, length) {\\n\\tvar start = data.l;\\n\\tvar flags = data.read_shift(1);\\n\\tvar str = parse_XLWideString(data);\\n\\tvar rgsStrRun = [];\\n\\tvar z = { t: str, h: str };\\n\\tif((flags & 1) !== 0) { /* fRichStr */\\n\\t\\t/* TODO: formatted string */\\n\\t\\tvar dwSizeStrRun = data.read_shift(4);\\n\\t\\tfor(var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\\n\\t\\tz.r = rgsStrRun;\\n\\t}\\n\\telse z.r = \\\"<t>\\\" + escapexml(str) + \\\"</t>\\\";\\n\\tif((flags & 2) !== 0) { /* fExtStr */\\n\\t\\t/* TODO: phonetic string */\\n\\t}\\n\\tdata.l = start + length;\\n\\treturn z;\\n}\\nfunction write_RichStr(str, o) {\\n\\t/* TODO: formatted string */\\n\\tif(o == null) o = new_buf(5+2*str.t.length);\\n\\to.write_shift(1,0);\\n\\twrite_XLWideString(str.t, o);\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.5.9 */\\nfunction parse_XLSBCell(data) {\\n\\tvar col = data.read_shift(4);\\n\\tvar iStyleRef = data.read_shift(2);\\n\\tiStyleRef += data.read_shift(1) <<16;\\n\\tvar fPhShow = data.read_shift(1);\\n\\treturn { c:col, iStyleRef: iStyleRef };\\n}\\nfunction write_XLSBCell(cell, o) {\\n\\tif(o == null) o = new_buf(8);\\n\\to.write_shift(-4, cell.c);\\n\\to.write_shift(3, cell.iStyleRef === undefined ? cell.iStyleRef : cell.s);\\n\\to.write_shift(1, 0); /* fPhShow */\\n\\treturn o;\\n}\\n\\n\\n/* [MS-XLSB] 2.5.21 */\\nfunction parse_XLSBCodeName (data, length) { return parse_XLWideString(data, length); }\\n\\n/* [MS-XLSB] 2.5.166 */\\nfunction parse_XLNullableWideString(data) {\\n\\tvar cchCharacters = data.read_shift(4);\\n\\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \\\"\\\" : data.read_shift(cchCharacters, 'dbcs');\\n}\\nfunction write_XLNullableWideString(data, o) {\\n\\tif(!o) o = new_buf(127);\\n\\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\\n\\tif(data.length > 0) o.write_shift(0, data, 'dbcs');\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.5.168 */\\nfunction parse_XLWideString(data) {\\n\\tvar cchCharacters = data.read_shift(4);\\n\\treturn cchCharacters === 0 ? \\\"\\\" : data.read_shift(cchCharacters, 'dbcs');\\n}\\nfunction write_XLWideString(data, o) {\\n\\tif(o == null) o = new_buf(4+2*data.length);\\n\\to.write_shift(4, data.length);\\n\\tif(data.length > 0) o.write_shift(0, data, 'dbcs');\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.5.114 */\\nvar parse_RelID = parse_XLNullableWideString;\\nvar write_RelID = write_XLNullableWideString;\\n\\n\\n/* [MS-XLSB] 2.5.122 */\\n/* [MS-XLS] 2.5.217 */\\nfunction parse_RkNumber(data) {\\n\\tvar b = data.slice(data.l, data.l+4);\\n\\tvar fX100 = b[0] & 1, fInt = b[0] & 2;\\n\\tdata.l+=4;\\n\\tb[0] &= 0xFC; // b[0] &= ~3;\\n\\tvar RK = fInt === 0 ? __double([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2;\\n\\treturn fX100 ? RK/100 : RK;\\n}\\n\\n/* [MS-XLSB] 2.5.153 */\\nfunction parse_UncheckedRfX(data) {\\n\\tvar cell = {s: {}, e: {}};\\n\\tcell.s.r = data.read_shift(4);\\n\\tcell.e.r = data.read_shift(4);\\n\\tcell.s.c = data.read_shift(4);\\n\\tcell.e.c = data.read_shift(4);\\n\\treturn cell;\\n}\\n\\nfunction write_UncheckedRfX(r, o) {\\n\\tif(!o) o = new_buf(16);\\n\\to.write_shift(4, r.s.r);\\n\\to.write_shift(4, r.e.r);\\n\\to.write_shift(4, r.s.c);\\n\\to.write_shift(4, r.e.c);\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.5.171 */\\n/* [MS-XLS] 2.5.342 */\\nfunction parse_Xnum(data, length) { return data.read_shift(8, 'f'); }\\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, 'f', data); }\\n\\n/* [MS-XLSB] 2.5.198.2 */\\nvar BErr = {\\n\\t0x00: \\\"#NULL!\\\",\\n\\t0x07: \\\"#DIV/0!\\\",\\n\\t0x0F: \\\"#VALUE!\\\",\\n\\t0x17: \\\"#REF!\\\",\\n\\t0x1D: \\\"#NAME?\\\",\\n\\t0x24: \\\"#NUM!\\\",\\n\\t0x2A: \\\"#N/A\\\",\\n\\t0x2B: \\\"#GETTING_DATA\\\",\\n\\t0xFF: \\\"#WTF?\\\"\\n};\\nvar RBErr = evert_num(BErr);\\n\\n/* [MS-XLSB] 2.4.321 BrtColor */\\nfunction parse_BrtColor(data, length) {\\n\\tvar out = {};\\n\\tvar d = data.read_shift(1);\\n\\tout.fValidRGB = d & 1;\\n\\tout.xColorType = d >>> 1;\\n\\tout.index = data.read_shift(1);\\n\\tout.nTintAndShade = data.read_shift(2, 'i');\\n\\tout.bRed = data.read_shift(1);\\n\\tout.bGreen = data.read_shift(1);\\n\\tout.bBlue = data.read_shift(1);\\n\\tout.bAlpha = data.read_shift(1);\\n}\\n\\n/* [MS-XLSB] 2.5.52 */\\nfunction parse_FontFlags(data, length) {\\n\\tvar d = data.read_shift(1);\\n\\tdata.l++;\\n\\tvar out = {\\n\\t\\tfItalic: d & 0x2,\\n\\t\\tfStrikeout: d & 0x8,\\n\\t\\tfOutline: d & 0x10,\\n\\t\\tfShadow: d & 0x20,\\n\\t\\tfCondense: d & 0x40,\\n\\t\\tfExtend: d & 0x80\\n\\t};\\n\\treturn out;\\n}\\n/* [MS-OLEPS] 2.2 PropertyType */\\n{\\n\\tvar VT_EMPTY = 0x0000;\\n\\tvar VT_NULL = 0x0001;\\n\\tvar VT_I2 = 0x0002;\\n\\tvar VT_I4 = 0x0003;\\n\\tvar VT_R4 = 0x0004;\\n\\tvar VT_R8 = 0x0005;\\n\\tvar VT_CY = 0x0006;\\n\\tvar VT_DATE = 0x0007;\\n\\tvar VT_BSTR = 0x0008;\\n\\tvar VT_ERROR = 0x000A;\\n\\tvar VT_BOOL = 0x000B;\\n\\tvar VT_VARIANT = 0x000C;\\n\\tvar VT_DECIMAL = 0x000E;\\n\\tvar VT_I1 = 0x0010;\\n\\tvar VT_UI1 = 0x0011;\\n\\tvar VT_UI2 = 0x0012;\\n\\tvar VT_UI4 = 0x0013;\\n\\tvar VT_I8 = 0x0014;\\n\\tvar VT_UI8 = 0x0015;\\n\\tvar VT_INT = 0x0016;\\n\\tvar VT_UINT = 0x0017;\\n\\tvar VT_LPSTR = 0x001E;\\n\\tvar VT_LPWSTR = 0x001F;\\n\\tvar VT_FILETIME = 0x0040;\\n\\tvar VT_BLOB = 0x0041;\\n\\tvar VT_STREAM = 0x0042;\\n\\tvar VT_STORAGE = 0x0043;\\n\\tvar VT_STREAMED_Object = 0x0044;\\n\\tvar VT_STORED_Object = 0x0045;\\n\\tvar VT_BLOB_Object = 0x0046;\\n\\tvar VT_CF = 0x0047;\\n\\tvar VT_CLSID = 0x0048;\\n\\tvar VT_VERSIONED_STREAM = 0x0049;\\n\\tvar VT_VECTOR = 0x1000;\\n\\tvar VT_ARRAY = 0x2000;\\n\\n\\tvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\\n\\tvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\\n\\tvar VT_CUSTOM = [VT_STRING, VT_USTR];\\n}\\n\\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\\nvar DocSummaryPIDDSI = {\\n\\t0x01: { n: 'CodePage', t: VT_I2 },\\n\\t0x02: { n: 'Category', t: VT_STRING },\\n\\t0x03: { n: 'PresentationFormat', t: VT_STRING },\\n\\t0x04: { n: 'ByteCount', t: VT_I4 },\\n\\t0x05: { n: 'LineCount', t: VT_I4 },\\n\\t0x06: { n: 'ParagraphCount', t: VT_I4 },\\n\\t0x07: { n: 'SlideCount', t: VT_I4 },\\n\\t0x08: { n: 'NoteCount', t: VT_I4 },\\n\\t0x09: { n: 'HiddenCount', t: VT_I4 },\\n\\t0x0a: { n: 'MultimediaClipCount', t: VT_I4 },\\n\\t0x0b: { n: 'Scale', t: VT_BOOL },\\n\\t0x0c: { n: 'HeadingPair', t: VT_VECTOR | VT_VARIANT },\\n\\t0x0d: { n: 'DocParts', t: VT_VECTOR | VT_LPSTR },\\n\\t0x0e: { n: 'Manager', t: VT_STRING },\\n\\t0x0f: { n: 'Company', t: VT_STRING },\\n\\t0x10: { n: 'LinksDirty', t: VT_BOOL },\\n\\t0x11: { n: 'CharacterCount', t: VT_I4 },\\n\\t0x13: { n: 'SharedDoc', t: VT_BOOL },\\n\\t0x16: { n: 'HLinksChanged', t: VT_BOOL },\\n\\t0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },\\n\\t0x1A: { n: 'ContentType', t: VT_STRING },\\n\\t0x1B: { n: 'ContentStatus', t: VT_STRING },\\n\\t0x1C: { n: 'Language', t: VT_STRING },\\n\\t0x1D: { n: 'Version', t: VT_STRING },\\n\\t0xFF: {}\\n};\\n\\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\\nvar SummaryPIDSI = {\\n\\t0x01: { n: 'CodePage', t: VT_I2 },\\n\\t0x02: { n: 'Title', t: VT_STRING },\\n\\t0x03: { n: 'Subject', t: VT_STRING },\\n\\t0x04: { n: 'Author', t: VT_STRING },\\n\\t0x05: { n: 'Keywords', t: VT_STRING },\\n\\t0x06: { n: 'Comments', t: VT_STRING },\\n\\t0x07: { n: 'Template', t: VT_STRING },\\n\\t0x08: { n: 'LastAuthor', t: VT_STRING },\\n\\t0x09: { n: 'RevNumber', t: VT_STRING },\\n\\t0x0A: { n: 'EditTime', t: VT_FILETIME },\\n\\t0x0B: { n: 'LastPrinted', t: VT_FILETIME },\\n\\t0x0C: { n: 'CreatedDate', t: VT_FILETIME },\\n\\t0x0D: { n: 'ModifiedDate', t: VT_FILETIME },\\n\\t0x0E: { n: 'PageCount', t: VT_I4 },\\n\\t0x0F: { n: 'WordCount', t: VT_I4 },\\n\\t0x10: { n: 'CharCount', t: VT_I4 },\\n\\t0x11: { n: 'Thumbnail', t: VT_CF },\\n\\t0x12: { n: 'ApplicationName', t: VT_LPSTR },\\n\\t0x13: { n: 'DocumentSecurity', t: VT_I4 },\\n\\t0xFF: {}\\n};\\n\\n/* [MS-OLEPS] 2.18 */\\nvar SpecialProperties = {\\n\\t0x80000000: { n: 'Locale', t: VT_UI4 },\\n\\t0x80000003: { n: 'Behavior', t: VT_UI4 },\\n\\t0x72627262: {}\\n};\\n\\n(function() {\\n\\tfor(var y in SpecialProperties) if(SpecialProperties.hasOwnProperty(y))\\n\\tDocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];\\n})();\\n\\n/* [MS-XLS] 2.4.63 Country/Region codes */\\nvar CountryEnum = {\\n\\t0x0001: \\\"US\\\", // United States\\n\\t0x0002: \\\"CA\\\", // Canada\\n\\t0x0003: \\\"\\\", // Latin America (except Brazil)\\n\\t0x0007: \\\"RU\\\", // Russia\\n\\t0x0014: \\\"EG\\\", // Egypt\\n\\t0x001E: \\\"GR\\\", // Greece\\n\\t0x001F: \\\"NL\\\", // Netherlands\\n\\t0x0020: \\\"BE\\\", // Belgium\\n\\t0x0021: \\\"FR\\\", // France\\n\\t0x0022: \\\"ES\\\", // Spain\\n\\t0x0024: \\\"HU\\\", // Hungary\\n\\t0x0027: \\\"IT\\\", // Italy\\n\\t0x0029: \\\"CH\\\", // Switzerland\\n\\t0x002B: \\\"AT\\\", // Austria\\n\\t0x002C: \\\"GB\\\", // United Kingdom\\n\\t0x002D: \\\"DK\\\", // Denmark\\n\\t0x002E: \\\"SE\\\", // Sweden\\n\\t0x002F: \\\"NO\\\", // Norway\\n\\t0x0030: \\\"PL\\\", // Poland\\n\\t0x0031: \\\"DE\\\", // Germany\\n\\t0x0034: \\\"MX\\\", // Mexico\\n\\t0x0037: \\\"BR\\\", // Brazil\\n\\t0x003d: \\\"AU\\\", // Australia\\n\\t0x0040: \\\"NZ\\\", // New Zealand\\n\\t0x0042: \\\"TH\\\", // Thailand\\n\\t0x0051: \\\"JP\\\", // Japan\\n\\t0x0052: \\\"KR\\\", // Korea\\n\\t0x0054: \\\"VN\\\", // Viet Nam\\n\\t0x0056: \\\"CN\\\", // China\\n\\t0x005A: \\\"TR\\\", // Turkey\\n\\t0x0069: \\\"JS\\\", // Ramastan\\n\\t0x00D5: \\\"DZ\\\", // Algeria\\n\\t0x00D8: \\\"MA\\\", // Morocco\\n\\t0x00DA: \\\"LY\\\", // Libya\\n\\t0x015F: \\\"PT\\\", // Portugal\\n\\t0x0162: \\\"IS\\\", // Iceland\\n\\t0x0166: \\\"FI\\\", // Finland\\n\\t0x01A4: \\\"CZ\\\", // Czech Republic\\n\\t0x0376: \\\"TW\\\", // Taiwan\\n\\t0x03C1: \\\"LB\\\", // Lebanon\\n\\t0x03C2: \\\"JO\\\", // Jordan\\n\\t0x03C3: \\\"SY\\\", // Syria\\n\\t0x03C4: \\\"IQ\\\", // Iraq\\n\\t0x03C5: \\\"KW\\\", // Kuwait\\n\\t0x03C6: \\\"SA\\\", // Saudi Arabia\\n\\t0x03CB: \\\"AE\\\", // United Arab Emirates\\n\\t0x03CC: \\\"IL\\\", // Israel\\n\\t0x03CE: \\\"QA\\\", // Qatar\\n\\t0x03D5: \\\"IR\\\", // Iran\\n\\t0xFFFF: \\\"US\\\" // United States\\n};\\n\\n/* [MS-XLS] 2.5.127 */\\nvar XLSFillPattern = [\\n\\tnull,\\n\\t'solid',\\n\\t'mediumGray',\\n\\t'darkGray',\\n\\t'lightGray',\\n\\t'darkHorizontal',\\n\\t'darkVertical',\\n\\t'darkDown',\\n\\t'darkUp',\\n\\t'darkGrid',\\n\\t'darkTrellis',\\n\\t'lightHorizontal',\\n\\t'lightVertical',\\n\\t'lightDown',\\n\\t'lightUp',\\n\\t'lightGrid',\\n\\t'lightTrellis',\\n\\t'gray125',\\n\\t'gray0625'\\n];\\n\\nfunction rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\\n\\n/* [MS-XLS] 2.5.161 */\\nvar XLSIcv = rgbify([\\n\\t/* Color Constants */\\n\\t0x000000,\\n\\t0xFFFFFF,\\n\\t0xFF0000,\\n\\t0x00FF00,\\n\\t0x0000FF,\\n\\t0xFFFF00,\\n\\t0xFF00FF,\\n\\t0x00FFFF,\\n\\n\\t/* Defaults */\\n\\t0x000000,\\n\\t0xFFFFFF,\\n\\t0xFF0000,\\n\\t0x00FF00,\\n\\t0x0000FF,\\n\\t0xFFFF00,\\n\\t0xFF00FF,\\n\\t0x00FFFF,\\n\\n\\t0x800000,\\n\\t0x008000,\\n\\t0x000080,\\n\\t0x808000,\\n\\t0x800080,\\n\\t0x008080,\\n\\t0xC0C0C0,\\n\\t0x808080,\\n\\t0x9999FF,\\n\\t0x993366,\\n\\t0xFFFFCC,\\n\\t0xCCFFFF,\\n\\t0x660066,\\n\\t0xFF8080,\\n\\t0x0066CC,\\n\\t0xCCCCFF,\\n\\n\\t0x000080,\\n\\t0xFF00FF,\\n\\t0xFFFF00,\\n\\t0x00FFFF,\\n\\t0x800080,\\n\\t0x800000,\\n\\t0x008080,\\n\\t0x0000FF,\\n\\t0x00CCFF,\\n\\t0xCCFFFF,\\n\\t0xCCFFCC,\\n\\t0xFFFF99,\\n\\t0x99CCFF,\\n\\t0xFF99CC,\\n\\t0xCC99FF,\\n\\t0xFFCC99,\\n\\n\\t0x3366FF,\\n\\t0x33CCCC,\\n\\t0x99CC00,\\n\\t0xFFCC00,\\n\\t0xFF9900,\\n\\t0xFF6600,\\n\\t0x666699,\\n\\t0x969696,\\n\\t0x003366,\\n\\t0x339966,\\n\\t0x003300,\\n\\t0x333300,\\n\\t0x993300,\\n\\t0x993366,\\n\\t0x333399,\\n\\t0x333333,\\n\\n\\t/* Sheet */\\n\\t0xFFFFFF,\\n\\t0x000000\\n]);\\n\\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\\n/* 12.3 Part Summary <SpreadsheetML> */\\n/* 14.2 Part Summary <DrawingML> */\\n/* [MS-XLSX] 2.1 Part Enumerations */\\n/* [MS-XLSB] 2.1.7 Part Enumeration */\\nvar ct2type = {\\n\\t/* Workbook */\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\\\": \\\"workbooks\\\",\\n\\n\\t/* Worksheet */\\n\\t\\\"application/vnd.ms-excel.binIndexWs\\\": \\\"TODO\\\", /* Binary Index */\\n\\n\\t/* Chartsheet */\\n\\t\\\"application/vnd.ms-excel.chartsheet\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Dialogsheet */\\n\\t\\\"application/vnd.ms-excel.dialogsheet\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Macrosheet */\\n\\t\\\"application/vnd.ms-excel.macrosheet\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.macrosheet+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.intlmacrosheet\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.binIndexMs\\\": \\\"TODO\\\", /* Binary Index */\\n\\n\\t/* File Properties */\\n\\t\\\"application/vnd.openxmlformats-package.core-properties+xml\\\": \\\"coreprops\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.custom-properties+xml\\\": \\\"custprops\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.extended-properties+xml\\\": \\\"extprops\\\",\\n\\n\\t/* Custom Data Properties */\\n\\t\\\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Comments */\\n\\t\\\"application/vnd.ms-excel.comments\\\": \\\"comments\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\\\": \\\"comments\\\",\\n\\n\\t/* PivotTable */\\n\\t\\\"application/vnd.ms-excel.pivotTable\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Calculation Chain */\\n\\t\\\"application/vnd.ms-excel.calcChain\\\": \\\"calcchains\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\\\": \\\"calcchains\\\",\\n\\n\\t/* Printer Settings */\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\\\": \\\"TODO\\\",\\n\\n\\t/* ActiveX */\\n\\t\\\"application/vnd.ms-office.activeX\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-office.activeX+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Custom Toolbars */\\n\\t\\\"application/vnd.ms-excel.attachedToolbars\\\": \\\"TODO\\\",\\n\\n\\t/* External Data Connections */\\n\\t\\\"application/vnd.ms-excel.connections\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\\\": \\\"TODO\\\",\\n\\n\\t/* External Links */\\n\\t\\\"application/vnd.ms-excel.externalLink\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Metadata */\\n\\t\\\"application/vnd.ms-excel.sheetMetadata\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\\\": \\\"TODO\\\",\\n\\n\\t/* PivotCache */\\n\\t\\\"application/vnd.ms-excel.pivotCacheDefinition\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.pivotCacheRecords\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Query Table */\\n\\t\\\"application/vnd.ms-excel.queryTable\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Shared Workbook */\\n\\t\\\"application/vnd.ms-excel.userNames\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.revisionHeaders\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.revisionLog\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Single Cell Table */\\n\\t\\\"application/vnd.ms-excel.tableSingleCells\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Slicer */\\n\\t\\\"application/vnd.ms-excel.slicer\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.slicerCache\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.slicer+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.ms-excel.slicerCache+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Sort Map */\\n\\t\\\"application/vnd.ms-excel.wsSortMap\\\": \\\"TODO\\\",\\n\\n\\t/* Table */\\n\\t\\\"application/vnd.ms-excel.table\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Themes */\\n\\t\\\"application/vnd.openxmlformats-officedocument.theme+xml\\\": \\\"themes\\\",\\n\\n\\t/* Timeline */\\n\\t\\\"application/vnd.ms-excel.Timeline+xml\\\": \\\"TODO\\\", /* verify */\\n\\t\\\"application/vnd.ms-excel.TimelineCache+xml\\\": \\\"TODO\\\", /* verify */\\n\\n\\t/* VBA */\\n\\t\\\"application/vnd.ms-office.vbaProject\\\": \\\"vba\\\",\\n\\t\\\"application/vnd.ms-office.vbaProjectSignature\\\": \\\"vba\\\",\\n\\n\\t/* Volatile Dependencies */\\n\\t\\\"application/vnd.ms-office.volatileDependencies\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Control Properties */\\n\\t\\\"application/vnd.ms-excel.controlproperties+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Data Model */\\n\\t\\\"application/vnd.openxmlformats-officedocument.model+data\\\": \\\"TODO\\\",\\n\\n\\t/* Survey */\\n\\t\\\"application/vnd.ms-excel.Survey+xml\\\": \\\"TODO\\\",\\n\\n\\t/* Drawing */\\n\\t\\\"application/vnd.openxmlformats-officedocument.drawing+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\\\": \\\"TODO\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\\\": \\\"TODO\\\",\\n\\n\\t/* VML */\\n\\t\\\"application/vnd.openxmlformats-officedocument.vmlDrawing\\\": \\\"TODO\\\",\\n\\n\\t\\\"application/vnd.openxmlformats-package.relationships+xml\\\": \\\"rels\\\",\\n\\t\\\"application/vnd.openxmlformats-officedocument.oleObject\\\": \\\"TODO\\\",\\n\\n\\t\\\"sheet\\\": \\\"js\\\"\\n};\\n\\nvar CT_LIST = (function(){\\n\\tvar o = {\\n\\t\\tworkbooks: {\\n\\t\\t\\txlsx: \\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\\\",\\n\\t\\t\\txlsm: \\\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\\\",\\n\\t\\t\\txlsb: \\\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\\\",\\n\\t\\t\\txltx: \\\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\\\"\\n\\t\\t},\\n\\t\\tstrs: { /* Shared Strings */\\n\\t\\t\\txlsx: \\\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\\\",\\n\\t\\t\\txlsb: \\\"application/vnd.ms-excel.sharedStrings\\\"\\n\\t\\t},\\n\\t\\tsheets: {\\n\\t\\t\\txlsx: \\\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\\\",\\n\\t\\t\\txlsb: \\\"application/vnd.ms-excel.worksheet\\\"\\n\\t\\t},\\n\\t\\tstyles: {/* Styles */\\n\\t\\t\\txlsx: \\\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\\\",\\n\\t\\t\\txlsb: \\\"application/vnd.ms-excel.styles\\\"\\n\\t\\t}\\n\\t};\\n\\tkeys(o).forEach(function(k) { if(!o[k].xlsm) o[k].xlsm = o[k].xlsx; });\\n\\tkeys(o).forEach(function(k){ keys(o[k]).forEach(function(v) { ct2type[o[k][v]] = k; }); });\\n\\treturn o;\\n})();\\n\\nvar type2ct = evert_arr(ct2type);\\n\\nXMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';\\n\\nfunction parse_ct(data, opts) {\\n\\tvar ctext = {};\\n\\tif(!data || !data.match) return data;\\n\\tvar ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],\\n\\t\\tcoreprops: [], extprops: [], custprops: [], strs:[], comments: [], vba: [],\\n\\t\\tTODO:[], rels:[], xmlns: \\\"\\\" };\\n\\t(data.match(tagregex)||[]).forEach(function(x) {\\n\\t\\tvar y = parsexmltag(x);\\n\\t\\tswitch(y[0].replace(nsregex,\\\"<\\\")) {\\n\\t\\t\\tcase '<?xml': break;\\n\\t\\t\\tcase '<Types': ct.xmlns = y['xmlns' + (y[0].match(/<(\\\\w+):/)||[\\\"\\\",\\\"\\\"])[1] ]; break;\\n\\t\\t\\tcase '<Default': ctext[y.Extension] = y.ContentType; break;\\n\\t\\t\\tcase '<Override':\\n\\t\\t\\t\\tif(ct[ct2type[y.ContentType]] !== undefined) ct[ct2type[y.ContentType]].push(y.PartName);\\n\\t\\t\\t\\telse if(opts.WTF) console.error(y);\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t});\\n\\tif(ct.xmlns !== XMLNS.CT) throw new Error(\\\"Unknown Namespace: \\\" + ct.xmlns);\\n\\tct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : \\\"\\\";\\n\\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \\\"\\\";\\n\\tct.style = ct.styles.length > 0 ? ct.styles[0] : \\\"\\\";\\n\\tct.defaults = ctext;\\n\\tdelete ct.calcchains;\\n\\treturn ct;\\n}\\n\\nvar CTYPE_XML_ROOT = writextag('Types', null, {\\n\\t'xmlns': XMLNS.CT,\\n\\t'xmlns:xsd': XMLNS.xsd,\\n\\t'xmlns:xsi': XMLNS.xsi\\n});\\n\\nvar CTYPE_DEFAULTS = [\\n\\t['xml', 'application/xml'],\\n\\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\\n\\t['rels', type2ct.rels[0]]\\n].map(function(x) {\\n\\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\\n});\\n\\nfunction write_ct(ct, opts) {\\n\\tvar o = [], v;\\n\\to[o.length] = (XML_HEADER);\\n\\to[o.length] = (CTYPE_XML_ROOT);\\n\\to = o.concat(CTYPE_DEFAULTS);\\n\\tvar f1 = function(w) {\\n\\t\\tif(ct[w] && ct[w].length > 0) {\\n\\t\\t\\tv = ct[w][0];\\n\\t\\t\\to[o.length] = (writextag('Override', null, {\\n\\t\\t\\t\\t'PartName': (v[0] == '/' ? \\\"\\\":\\\"/\\\") + v,\\n\\t\\t\\t\\t'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\\n\\t\\t\\t}));\\n\\t\\t}\\n\\t};\\n\\tvar f2 = function(w) {\\n\\t\\tct[w].forEach(function(v) {\\n\\t\\t\\to[o.length] = (writextag('Override', null, {\\n\\t\\t\\t\\t'PartName': (v[0] == '/' ? \\\"\\\":\\\"/\\\") + v,\\n\\t\\t\\t\\t'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\\n\\t\\t\\t}));\\n\\t\\t});\\n\\t};\\n\\tvar f3 = function(t) {\\n\\t\\t(ct[t]||[]).forEach(function(v) {\\n\\t\\t\\to[o.length] = (writextag('Override', null, {\\n\\t\\t\\t\\t'PartName': (v[0] == '/' ? \\\"\\\":\\\"/\\\") + v,\\n\\t\\t\\t\\t'ContentType': type2ct[t][0]\\n\\t\\t\\t}));\\n\\t\\t});\\n\\t};\\n\\tf1('workbooks');\\n\\tf2('sheets');\\n\\tf3('themes');\\n\\t['strs', 'styles'].forEach(f1);\\n\\t['coreprops', 'extprops', 'custprops'].forEach(f3);\\n\\tif(o.length>2){ o[o.length] = ('</Types>'); o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\n/* 9.3.2 OPC Relationships Markup */\\nvar RELS = {\\n\\tWB: \\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\\\",\\n\\tSHEET: \\\"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\\\"\\n};\\n\\nfunction parse_rels(data, currentFilePath) {\\n\\tif (!data) return data;\\n\\tif (currentFilePath.charAt(0) !== '/') {\\n\\t\\tcurrentFilePath = '/'+currentFilePath;\\n\\t}\\n\\tvar rels = {};\\n\\tvar hash = {};\\n\\tvar resolveRelativePathIntoAbsolute = function (to) {\\n\\t\\tvar toksFrom = currentFilePath.split('/');\\n\\t\\ttoksFrom.pop(); // folder path\\n\\t\\tvar toksTo = to.split('/');\\n\\t\\tvar reversed = [];\\n\\t\\twhile (toksTo.length !== 0) {\\n\\t\\t\\tvar tokTo = toksTo.shift();\\n\\t\\t\\tif (tokTo === '..') {\\n\\t\\t\\t\\ttoksFrom.pop();\\n\\t\\t\\t} else if (tokTo !== '.') {\\n\\t\\t\\t\\ttoksFrom.push(tokTo);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn toksFrom.join('/');\\n\\t};\\n\\n\\tdata.match(tagregex).forEach(function(x) {\\n\\t\\tvar y = parsexmltag(x);\\n\\t\\t/* 9.3.2.2 OPC_Relationships */\\n\\t\\tif (y[0] === '<Relationship') {\\n\\t\\t\\tvar rel = {}; rel.Type = y.Type; rel.Target = y.Target; rel.Id = y.Id; rel.TargetMode = y.TargetMode;\\n\\t\\t\\tvar canonictarget = y.TargetMode === 'External' ? y.Target : resolveRelativePathIntoAbsolute(y.Target);\\n\\t\\t\\trels[canonictarget] = rel;\\n\\t\\t\\thash[y.Id] = rel;\\n\\t\\t}\\n\\t});\\n\\trels[\\\"!id\\\"] = hash;\\n\\treturn rels;\\n}\\n\\nXMLNS.RELS = 'http://schemas.openxmlformats.org/package/2006/relationships';\\n\\nvar RELS_ROOT = writextag('Relationships', null, {\\n\\t//'xmlns:ns0': XMLNS.RELS,\\n\\t'xmlns': XMLNS.RELS\\n});\\n\\n/* TODO */\\nfunction write_rels(rels) {\\n\\tvar o = [];\\n\\to[o.length] = (XML_HEADER);\\n\\to[o.length] = (RELS_ROOT);\\n\\tkeys(rels['!id']).forEach(function(rid) { var rel = rels['!id'][rid];\\n\\t\\to[o.length] = (writextag('Relationship', null, rel));\\n\\t});\\n\\tif(o.length>2){ o[o.length] = ('</Relationships>'); o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\n/* ECMA-376 Part II 11.1 Core Properties Part */\\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\\nvar CORE_PROPS = [\\n\\t[\\\"cp:category\\\", \\\"Category\\\"],\\n\\t[\\\"cp:contentStatus\\\", \\\"ContentStatus\\\"],\\n\\t[\\\"cp:keywords\\\", \\\"Keywords\\\"],\\n\\t[\\\"cp:lastModifiedBy\\\", \\\"LastAuthor\\\"],\\n\\t[\\\"cp:lastPrinted\\\", \\\"LastPrinted\\\"],\\n\\t[\\\"cp:revision\\\", \\\"RevNumber\\\"],\\n\\t[\\\"cp:version\\\", \\\"Version\\\"],\\n\\t[\\\"dc:creator\\\", \\\"Author\\\"],\\n\\t[\\\"dc:description\\\", \\\"Comments\\\"],\\n\\t[\\\"dc:identifier\\\", \\\"Identifier\\\"],\\n\\t[\\\"dc:language\\\", \\\"Language\\\"],\\n\\t[\\\"dc:subject\\\", \\\"Subject\\\"],\\n\\t[\\\"dc:title\\\", \\\"Title\\\"],\\n\\t[\\\"dcterms:created\\\", \\\"CreatedDate\\\", 'date'],\\n\\t[\\\"dcterms:modified\\\", \\\"ModifiedDate\\\", 'date']\\n];\\n\\nXMLNS.CORE_PROPS = \\\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\\\";\\nRELS.CORE_PROPS = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\\n\\nvar CORE_PROPS_REGEX = (function() {\\n\\tvar r = new Array(CORE_PROPS.length);\\n\\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\\n\\t\\tvar f = CORE_PROPS[i];\\n\\t\\tvar g = \\\"(?:\\\"+ f[0].substr(0,f[0].indexOf(\\\":\\\")) +\\\":)\\\"+ f[0].substr(f[0].indexOf(\\\":\\\")+1);\\n\\t\\tr[i] = new RegExp(\\\"<\\\" + g + \\\"[^>]*>(.*)<\\\\/\\\" + g + \\\">\\\");\\n\\t}\\n\\treturn r;\\n})();\\n\\nfunction parse_core_props(data) {\\n\\tvar p = {};\\n\\n\\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\\n\\t\\tvar f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);\\n\\t\\tif(cur != null && cur.length > 0) p[f[1]] = cur[1];\\n\\t\\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = new Date(p[f[1]]);\\n\\t}\\n\\n\\treturn p;\\n}\\n\\nvar CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {\\n\\t//'xmlns': XMLNS.CORE_PROPS,\\n\\t'xmlns:cp': XMLNS.CORE_PROPS,\\n\\t'xmlns:dc': XMLNS.dc,\\n\\t'xmlns:dcterms': XMLNS.dcterms,\\n\\t'xmlns:dcmitype': XMLNS.dcmitype,\\n\\t'xmlns:xsi': XMLNS.xsi\\n});\\n\\nfunction cp_doit(f, g, h, o, p) {\\n\\tif(p[f] != null || g == null || g === \\\"\\\") return;\\n\\tp[f] = g;\\n\\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\\n}\\n\\nfunction write_core_props(cp, opts) {\\n\\tvar o = [XML_HEADER, CORE_PROPS_XML_ROOT], p = {};\\n\\tif(!cp) return o.join(\\\"\\\");\\n\\n\\n\\tif(cp.CreatedDate != null) cp_doit(\\\"dcterms:created\\\", typeof cp.CreatedDate === \\\"string\\\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\\\"xsi:type\\\":\\\"dcterms:W3CDTF\\\"}, o, p);\\n\\tif(cp.ModifiedDate != null) cp_doit(\\\"dcterms:modified\\\", typeof cp.ModifiedDate === \\\"string\\\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\\\"xsi:type\\\":\\\"dcterms:W3CDTF\\\"}, o, p);\\n\\n\\tfor(var i = 0; i != CORE_PROPS.length; ++i) { var f = CORE_PROPS[i]; cp_doit(f[0], cp[f[1]], null, o, p); }\\n\\tif(o.length>2){ o[o.length] = ('</cp:coreProperties>'); o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\n/* 15.2.12.3 Extended File Properties Part */\\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\\nvar EXT_PROPS = [\\n\\t[\\\"Application\\\", \\\"Application\\\", \\\"string\\\"],\\n\\t[\\\"AppVersion\\\", \\\"AppVersion\\\", \\\"string\\\"],\\n\\t[\\\"Company\\\", \\\"Company\\\", \\\"string\\\"],\\n\\t[\\\"DocSecurity\\\", \\\"DocSecurity\\\", \\\"string\\\"],\\n\\t[\\\"Manager\\\", \\\"Manager\\\", \\\"string\\\"],\\n\\t[\\\"HyperlinksChanged\\\", \\\"HyperlinksChanged\\\", \\\"bool\\\"],\\n\\t[\\\"SharedDoc\\\", \\\"SharedDoc\\\", \\\"bool\\\"],\\n\\t[\\\"LinksUpToDate\\\", \\\"LinksUpToDate\\\", \\\"bool\\\"],\\n\\t[\\\"ScaleCrop\\\", \\\"ScaleCrop\\\", \\\"bool\\\"],\\n\\t[\\\"HeadingPairs\\\", \\\"HeadingPairs\\\", \\\"raw\\\"],\\n\\t[\\\"TitlesOfParts\\\", \\\"TitlesOfParts\\\", \\\"raw\\\"]\\n];\\n\\nXMLNS.EXT_PROPS = \\\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\\\";\\nRELS.EXT_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\\n\\nfunction parse_ext_props(data, p) {\\n\\tvar q = {}; if(!p) p = {};\\n\\n\\tEXT_PROPS.forEach(function(f) {\\n\\t\\tswitch(f[2]) {\\n\\t\\t\\tcase \\\"string\\\": p[f[1]] = (data.match(matchtag(f[0]))||[])[1]; break;\\n\\t\\t\\tcase \\\"bool\\\": p[f[1]] = (data.match(matchtag(f[0]))||[])[1] === \\\"true\\\"; break;\\n\\t\\t\\tcase \\\"raw\\\":\\n\\t\\t\\t\\tvar cur = data.match(new RegExp(\\\"<\\\" + f[0] + \\\"[^>]*>(.*)<\\\\/\\\" + f[0] + \\\">\\\"));\\n\\t\\t\\t\\tif(cur && cur.length > 0) q[f[1]] = cur[1];\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t});\\n\\n\\tif(q.HeadingPairs && q.TitlesOfParts) {\\n\\t\\tvar v = parseVector(q.HeadingPairs);\\n\\t\\tvar j = 0, widx = 0;\\n\\t\\tfor(var i = 0; i !== v.length; ++i) {\\n\\t\\t\\tswitch(v[i].v) {\\n\\t\\t\\t\\tcase \\\"Worksheets\\\": widx = j; p.Worksheets = +(v[++i].v); break;\\n\\t\\t\\t\\tcase \\\"Named Ranges\\\": ++i; break; // TODO: Handle Named Ranges\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar parts = parseVector(q.TitlesOfParts).map(function(x) { return utf8read(x.v); });\\n\\t\\tp.SheetNames = parts.slice(widx, widx + p.Worksheets);\\n\\t}\\n\\treturn p;\\n}\\n\\nvar EXT_PROPS_XML_ROOT = writextag('Properties', null, {\\n\\t'xmlns': XMLNS.EXT_PROPS,\\n\\t'xmlns:vt': XMLNS.vt\\n});\\n\\nfunction write_ext_props(cp, opts) {\\n\\tvar o = [], p = {}, W = writextag;\\n\\tif(!cp) cp = {};\\n\\tcp.Application = \\\"SheetJS\\\";\\n\\to[o.length] = (XML_HEADER);\\n\\to[o.length] = (EXT_PROPS_XML_ROOT);\\n\\n\\tEXT_PROPS.forEach(function(f) {\\n\\t\\tif(cp[f[1]] === undefined) return;\\n\\t\\tvar v;\\n\\t\\tswitch(f[2]) {\\n\\t\\t\\tcase 'string': v = cp[f[1]]; break;\\n\\t\\t\\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\\n\\t\\t}\\n\\t\\tif(v !== undefined) o[o.length] = (W(f[0], v));\\n\\t});\\n\\n\\t/* TODO: HeadingPairs, TitlesOfParts */\\n\\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', '<vt:lpstr>Worksheets</vt:lpstr>')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\\\"variant\\\"})));\\n\\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \\\"<vt:lpstr>\\\" + s + \\\"</vt:lpstr>\\\"; }).join(\\\"\\\"), {size: cp.Worksheets, baseType:\\\"lpstr\\\"})));\\n\\tif(o.length>2){ o[o.length] = ('</Properties>'); o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\n/* 15.2.12.2 Custom File Properties Part */\\nXMLNS.CUST_PROPS = \\\"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\\\";\\nRELS.CUST_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\\n\\nvar custregex = /<[^>]+>[^<]*/g;\\nfunction parse_cust_props(data, opts) {\\n\\tvar p = {}, name;\\n\\tvar m = data.match(custregex);\\n\\tif(m) for(var i = 0; i != m.length; ++i) {\\n\\t\\tvar x = m[i], y = parsexmltag(x);\\n\\t\\tswitch(y[0]) {\\n\\t\\t\\tcase '<?xml': break;\\n\\t\\t\\tcase '<Properties':\\n\\t\\t\\t\\tif(y.xmlns !== XMLNS.CUST_PROPS) throw \\\"unrecognized xmlns \\\" + y.xmlns;\\n\\t\\t\\t\\tif(y.xmlnsvt && y.xmlnsvt !== XMLNS.vt) throw \\\"unrecognized vt \\\" + y.xmlnsvt;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase '<property': name = y.name; break;\\n\\t\\t\\tcase '</property>': name = null; break;\\n\\t\\t\\tdefault: if (x.indexOf('<vt:') === 0) {\\n\\t\\t\\t\\tvar toks = x.split('>');\\n\\t\\t\\t\\tvar type = toks[0].substring(4), text = toks[1];\\n\\t\\t\\t\\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\\n\\t\\t\\t\\tswitch(type) {\\n\\t\\t\\t\\t\\tcase 'lpstr': case 'lpwstr': case 'bstr': case 'lpwstr':\\n\\t\\t\\t\\t\\t\\tp[name] = unescapexml(text);\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase 'bool':\\n\\t\\t\\t\\t\\t\\tp[name] = parsexmlbool(text, '<vt:bool>');\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\\n\\t\\t\\t\\t\\t\\tp[name] = parseInt(text, 10);\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase 'r4': case 'r8': case 'decimal':\\n\\t\\t\\t\\t\\t\\tp[name] = parseFloat(text);\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase 'filetime': case 'date':\\n\\t\\t\\t\\t\\t\\tp[name] = new Date(text);\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase 'cy': case 'error':\\n\\t\\t\\t\\t\\t\\tp[name] = unescapexml(text);\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tdefault:\\n\\t\\t\\t\\t\\t\\tif(typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else if(x.substr(0,2) === \\\"</\\\") {\\n\\t\\t\\t} else if(opts.WTF) throw new Error(x);\\n\\t\\t}\\n\\t}\\n\\treturn p;\\n}\\n\\nvar CUST_PROPS_XML_ROOT = writextag('Properties', null, {\\n\\t'xmlns': XMLNS.CUST_PROPS,\\n\\t'xmlns:vt': XMLNS.vt\\n});\\n\\nfunction write_cust_props(cp, opts) {\\n\\tvar o = [XML_HEADER, CUST_PROPS_XML_ROOT];\\n\\tif(!cp) return o.join(\\\"\\\");\\n\\tvar pid = 1;\\n\\tkeys(cp).forEach(function custprop(k) { ++pid;\\n\\t\\to[o.length] = (writextag('property', write_vt(cp[k]), {\\n\\t\\t\\t'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',\\n\\t\\t\\t'pid': pid,\\n\\t\\t\\t'name': k\\n\\t\\t}));\\n\\t});\\n\\tif(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\nfunction xlml_set_prop(Props, tag, val) {\\n\\t/* TODO: Normalize the properties */\\n\\tswitch(tag) {\\n\\t\\tcase 'Description': tag = 'Comments'; break;\\n\\t}\\n\\tProps[tag] = val;\\n}\\n\\n/* [MS-DTYP] 2.3.3 FILETIME */\\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\\nfunction parse_FILETIME(blob) {\\n\\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\\n\\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\\\.000/,\\\"\\\");\\n}\\n\\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\\nfunction parse_lpstr(blob, type, pad) {\\n\\tvar str = blob.read_shift(0, 'lpstr');\\n\\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\\n\\treturn str;\\n}\\n\\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\\nfunction parse_lpwstr(blob, type, pad) {\\n\\tvar str = blob.read_shift(0, 'lpwstr');\\n\\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\\n\\treturn str;\\n}\\n\\n\\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\\nfunction parse_VtStringBase(blob, stringType, pad) {\\n\\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\\n\\treturn parse_lpstr(blob, stringType, pad);\\n}\\n\\nfunction parse_VtString(blob, t, pad) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\\nfunction parse_VtUnalignedString(blob, t) { if(!t) throw new Error(\\\"dafuq?\\\"); return parse_VtStringBase(blob, t, 0); }\\n\\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\\nfunction parse_VtVecUnalignedLpstrValue(blob) {\\n\\tvar length = blob.read_shift(4);\\n\\tvar ret = [];\\n\\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr');\\n\\treturn ret;\\n}\\n\\n/* [MS-OSHARED] 2.3.3.1.10 VtVecUnalignedLpstr */\\nfunction parse_VtVecUnalignedLpstr(blob) {\\n\\treturn parse_VtVecUnalignedLpstrValue(blob);\\n}\\n\\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\\nfunction parse_VtHeadingPair(blob) {\\n\\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\\n\\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\\n\\treturn [headingString, headerParts];\\n}\\n\\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\\nfunction parse_VtVecHeadingPairValue(blob) {\\n\\tvar cElements = blob.read_shift(4);\\n\\tvar out = [];\\n\\tfor(var i = 0; i != cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\\n\\treturn out;\\n}\\n\\n/* [MS-OSHARED] 2.3.3.1.15 VtVecHeadingPair */\\nfunction parse_VtVecHeadingPair(blob) {\\n\\t// NOTE: When invoked, wType & padding were already consumed\\n\\treturn parse_VtVecHeadingPairValue(blob);\\n}\\n\\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\\nfunction parse_dictionary(blob,CodePage) {\\n\\tvar cnt = blob.read_shift(4);\\n\\tvar dict = {};\\n\\tfor(var j = 0; j != cnt; ++j) {\\n\\t\\tvar pid = blob.read_shift(4);\\n\\t\\tvar len = blob.read_shift(4);\\n\\t\\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\\n\\t}\\n\\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\\n\\treturn dict;\\n}\\n\\n/* [MS-OLEPS] 2.9 BLOB */\\nfunction parse_BLOB(blob) {\\n\\tvar size = blob.read_shift(4);\\n\\tvar bytes = blob.slice(blob.l,blob.l+size);\\n\\tif(size & 3 > 0) blob.l += (4 - (size & 3)) & 3;\\n\\treturn bytes;\\n}\\n\\n/* [MS-OLEPS] 2.11 ClipboardData */\\nfunction parse_ClipboardData(blob) {\\n\\t// TODO\\n\\tvar o = {};\\n\\to.Size = blob.read_shift(4);\\n\\t//o.Format = blob.read_shift(4);\\n\\tblob.l += o.Size;\\n\\treturn o;\\n}\\n\\n/* [MS-OLEPS] 2.14 Vector and Array Property Types */\\nfunction parse_VtVector(blob, cb) {\\n\\t/* [MS-OLEPS] 2.14.2 VectorHeader */\\n/*\\tvar Length = blob.read_shift(4);\\n\\tvar o = [];\\n\\tfor(var i = 0; i != Length; ++i) {\\n\\t\\to.push(cb(blob));\\n\\t}\\n\\treturn o;*/\\n}\\n\\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\\nfunction parse_TypedPropertyValue(blob, type, _opts) {\\n\\tvar t = blob.read_shift(2), ret, opts = _opts||{};\\n\\tblob.l += 2;\\n\\tif(type !== VT_VARIANT)\\n\\tif(t !== type && VT_CUSTOM.indexOf(type)===-1) throw new Error('Expected type ' + type + ' saw ' + t);\\n\\tswitch(type === VT_VARIANT ? t : type) {\\n\\t\\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\\n\\t\\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\\n\\t\\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\\n\\t\\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\\n\\t\\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\\n\\t\\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\\n\\t\\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\\n\\t\\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\\n\\t\\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\\n\\t\\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw && 4).replace(chr0,'');\\n\\t\\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t, 4).replace(chr0,'');\\n\\t\\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPair(blob);\\n\\t\\tcase 0x101E /*VT_LPSTR*/: return parse_VtVecUnalignedLpstr(blob);\\n\\t\\tdefault: throw new Error(\\\"TypedPropertyValue unrecognized type \\\" + type + \\\" \\\" + t);\\n\\t}\\n}\\n/* [MS-OLEPS] 2.14.2 VectorHeader */\\n/*function parse_VTVectorVariant(blob) {\\n\\tvar Length = blob.read_shift(4);\\n\\n\\tif(Length & 1 !== 0) throw new Error(\\\"VectorHeader Length=\\\" + Length + \\\" must be even\\\");\\n\\tvar o = [];\\n\\tfor(var i = 0; i != Length; ++i) {\\n\\t\\to.push(parse_TypedPropertyValue(blob, VT_VARIANT));\\n\\t}\\n\\treturn o;\\n}*/\\n\\n/* [MS-OLEPS] 2.20 PropertySet */\\nfunction parse_PropertySet(blob, PIDSI) {\\n\\tvar start_addr = blob.l;\\n\\tvar size = blob.read_shift(4);\\n\\tvar NumProps = blob.read_shift(4);\\n\\tvar Props = [], i = 0;\\n\\tvar CodePage = 0;\\n\\tvar Dictionary = -1, DictObj;\\n\\tfor(i = 0; i != NumProps; ++i) {\\n\\t\\tvar PropID = blob.read_shift(4);\\n\\t\\tvar Offset = blob.read_shift(4);\\n\\t\\tProps[i] = [PropID, Offset + start_addr];\\n\\t}\\n\\tvar PropH = {};\\n\\tfor(i = 0; i != NumProps; ++i) {\\n\\t\\tif(blob.l !== Props[i][1]) {\\n\\t\\t\\tvar fail = true;\\n\\t\\t\\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\\n\\t\\t\\t\\tcase 0x02 /*VT_I2*/: if(blob.l +2 === Props[i][1]) { blob.l+=2; fail = false; } break;\\n\\t\\t\\t\\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\\n\\t\\t\\t\\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\\n\\t\\t\\t}\\n\\t\\t\\tif(!PIDSI && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\\n\\t\\t\\tif(fail) throw new Error(\\\"Read Error: Expected address \\\" + Props[i][1] + ' at ' + blob.l + ' :' + i);\\n\\t\\t}\\n\\t\\tif(PIDSI) {\\n\\t\\t\\tvar piddsi = PIDSI[Props[i][0]];\\n\\t\\t\\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\\n\\t\\t\\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \\\".\\\" + String(PropH[piddsi.n] & 0xFFFF);\\n\\t\\t\\tif(piddsi.n == \\\"CodePage\\\") switch(PropH[piddsi.n]) {\\n\\t\\t\\t\\tcase 0: PropH[piddsi.n] = 1252;\\n\\t\\t\\t\\t\\t/* falls through */\\n\\t\\t\\t\\tcase 10000: // OSX Roman\\n\\t\\t\\t\\tcase 1252: // Windows Latin\\n\\n\\t\\t\\t\\tcase 874: // SB Windows Thai\\n\\t\\t\\t\\tcase 1250: // SB Windows Central Europe\\n\\t\\t\\t\\tcase 1251: // SB Windows Cyrillic\\n\\t\\t\\t\\tcase 1253: // SB Windows Greek\\n\\t\\t\\t\\tcase 1254: // SB Windows Turkish\\n\\t\\t\\t\\tcase 1255: // SB Windows Hebrew\\n\\t\\t\\t\\tcase 1256: // SB Windows Arabic\\n\\t\\t\\t\\tcase 1257: // SB Windows Baltic\\n\\t\\t\\t\\tcase 1258: // SB Windows Vietnam\\n\\n\\t\\t\\t\\tcase 932: // DB Windows Japanese Shift-JIS\\n\\t\\t\\t\\tcase 936: // DB Windows Simplified Chinese GBK\\n\\t\\t\\t\\tcase 949: // DB Windows Korean\\n\\t\\t\\t\\tcase 950: // DB Windows Traditional Chinese Big5\\n\\n\\t\\t\\t\\tcase 1200: // UTF16LE\\n\\t\\t\\t\\tcase 1201: // UTF16BE\\n\\t\\t\\t\\tcase 65000: case -536: // UTF-7\\n\\t\\t\\t\\tcase 65001: case -535: // UTF-8\\n\\t\\t\\t\\t\\tset_cp(CodePage = PropH[piddsi.n]); break;\\n\\t\\t\\t\\tdefault: throw new Error(\\\"Unsupported CodePage: \\\" + PropH[piddsi.n]);\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tif(Props[i][0] === 0x1) {\\n\\t\\t\\t\\tCodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2);\\n\\t\\t\\t\\tset_cp(CodePage);\\n\\t\\t\\t\\tif(Dictionary !== -1) {\\n\\t\\t\\t\\t\\tvar oldpos = blob.l;\\n\\t\\t\\t\\t\\tblob.l = Props[Dictionary][1];\\n\\t\\t\\t\\t\\tDictObj = parse_dictionary(blob,CodePage);\\n\\t\\t\\t\\t\\tblob.l = oldpos;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else if(Props[i][0] === 0) {\\n\\t\\t\\t\\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\\n\\t\\t\\t\\tDictObj = parse_dictionary(blob,CodePage);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvar name = DictObj[Props[i][0]];\\n\\t\\t\\t\\tvar val;\\n\\t\\t\\t\\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\\n\\t\\t\\t\\tswitch(blob[blob.l]) {\\n\\t\\t\\t\\t\\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\\n\\t\\t\\t\\t\\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break;\\n\\t\\t\\t\\t\\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]); break;\\n\\t\\t\\t\\t\\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\\n\\t\\t\\t\\t\\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\\n\\t\\t\\t\\t\\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\\n\\t\\t\\t\\t\\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\\n\\t\\t\\t\\t\\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = new Date(parse_FILETIME(blob)); break;\\n\\t\\t\\t\\t\\tdefault: throw new Error(\\\"unparsed value: \\\" + blob[blob.l]);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tPropH[name] = val;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tblob.l = start_addr + size; /* step ahead to skip padding */\\n\\treturn PropH;\\n}\\n\\n/* [MS-OLEPS] 2.21 PropertySetStream */\\nfunction parse_PropertySetStream(file, PIDSI) {\\n\\tvar blob = file.content;\\n\\tprep_blob(blob, 0);\\n\\n\\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1;\\n\\tblob.chk('feff', 'Byte Order: ');\\n\\n\\tvar vers = blob.read_shift(2); // TODO: check version\\n\\tvar SystemIdentifier = blob.read_shift(4);\\n\\tblob.chk(CFB.utils.consts.HEADER_CLSID, 'CLSID: ');\\n\\tNumSets = blob.read_shift(4);\\n\\tif(NumSets !== 1 && NumSets !== 2) throw \\\"Unrecognized #Sets: \\\" + NumSets;\\n\\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\\n\\n\\tif(NumSets === 1 && Offset0 !== blob.l) throw \\\"Length mismatch\\\";\\n\\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\\n\\tvar PSet0 = parse_PropertySet(blob, PIDSI);\\n\\n\\tvar rval = { SystemIdentifier: SystemIdentifier };\\n\\tfor(var y in PSet0) rval[y] = PSet0[y];\\n\\t//rval.blob = blob;\\n\\trval.FMTID = FMTID0;\\n\\t//rval.PSet0 = PSet0;\\n\\tif(NumSets === 1) return rval;\\n\\tif(blob.l !== Offset1) throw \\\"Length mismatch 2: \\\" + blob.l + \\\" !== \\\" + Offset1;\\n\\tvar PSet1;\\n\\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) { }\\n\\tfor(y in PSet1) rval[y] = PSet1[y];\\n\\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\\n\\treturn rval;\\n}\\n\\n\\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\\n\\nfunction parslurp(blob, length, cb) {\\n\\tvar arr = [], target = blob.l + length;\\n\\twhile(blob.l < target) arr.push(cb(blob, target - blob.l));\\n\\tif(target !== blob.l) throw new Error(\\\"Slurp error\\\");\\n\\treturn arr;\\n}\\n\\nfunction parslurp2(blob, length, cb) {\\n\\tvar arr = [], target = blob.l + length, len = blob.read_shift(2);\\n\\twhile(len-- !== 0) arr.push(cb(blob, target - blob.l));\\n\\tif(target !== blob.l) throw new Error(\\\"Slurp error\\\");\\n\\treturn arr;\\n}\\n\\nfunction parsebool(blob, length) { return blob.read_shift(length) === 0x1; }\\n\\nfunction parseuint16(blob) { return blob.read_shift(2, 'u'); }\\nfunction parseuint16a(blob, length) { return parslurp(blob,length,parseuint16);}\\n\\n/* --- 2.5 Structures --- */\\n\\n/* [MS-XLS] 2.5.14 Boolean */\\nvar parse_Boolean = parsebool;\\n\\n/* [MS-XLS] 2.5.10 Bes (boolean or error) */\\nfunction parse_Bes(blob) {\\n\\tvar v = blob.read_shift(1), t = blob.read_shift(1);\\n\\treturn t === 0x01 ? v : v === 0x01;\\n}\\n\\n/* [MS-XLS] 2.5.240 ShortXLUnicodeString */\\nfunction parse_ShortXLUnicodeString(blob, length, opts) {\\n\\tvar cch = blob.read_shift(1);\\n\\tvar width = 1, encoding = 'sbcs-cont';\\n\\tvar cp = current_codepage;\\n\\tif(opts && opts.biff >= 8) current_codepage = 1200;\\n\\tif(opts === undefined || opts.biff !== 5) {\\n\\t\\tvar fHighByte = blob.read_shift(1);\\n\\t\\tif(fHighByte) { width = 2; encoding = 'dbcs-cont'; }\\n\\t}\\n\\tvar o = cch ? blob.read_shift(cch, encoding) : \\\"\\\";\\n\\tcurrent_codepage = cp;\\n\\treturn o;\\n}\\n\\n/* 2.5.293 XLUnicodeRichExtendedString */\\nfunction parse_XLUnicodeRichExtendedString(blob) {\\n\\tvar cp = current_codepage;\\n\\tcurrent_codepage = 1200;\\n\\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\\n\\tvar fHighByte = flags & 0x1, fExtSt = flags & 0x4, fRichSt = flags & 0x8;\\n\\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\\n\\tvar cRun, cbExtRst;\\n\\tvar z = {};\\n\\tif(fRichSt) cRun = blob.read_shift(2);\\n\\tif(fExtSt) cbExtRst = blob.read_shift(4);\\n\\tvar encoding = (flags & 0x1) ? 'dbcs-cont' : 'sbcs-cont';\\n\\tvar msg = cch === 0 ? \\\"\\\" : blob.read_shift(cch, encoding);\\n\\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\\n\\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\\n\\tz.t = msg;\\n\\tif(!fRichSt) { z.raw = \\\"<t>\\\" + z.t + \\\"</t>\\\"; z.r = z.t; }\\n\\tcurrent_codepage = cp;\\n\\treturn z;\\n}\\n\\n/* 2.5.296 XLUnicodeStringNoCch */\\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\\n\\tvar retval;\\n\\tvar fHighByte = blob.read_shift(1);\\n\\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\\n\\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\\n\\treturn retval;\\n}\\n\\n/* 2.5.294 XLUnicodeString */\\nfunction parse_XLUnicodeString(blob, length, opts) {\\n\\tvar cch = blob.read_shift(opts !== undefined && opts.biff > 0 && opts.biff < 8 ? 1 : 2);\\n\\tif(cch === 0) { blob.l++; return \\\"\\\"; }\\n\\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\\n}\\n/* BIFF5 override */\\nfunction parse_XLUnicodeString2(blob, length, opts) {\\n\\tif(opts.biff !== 5 && opts.biff !== 2) return parse_XLUnicodeString(blob, length, opts);\\n\\tvar cch = blob.read_shift(1);\\n\\tif(cch === 0) { blob.l++; return \\\"\\\"; }\\n\\treturn blob.read_shift(cch, 'sbcs-cont');\\n}\\n\\n/* [MS-XLS] 2.5.61 ControlInfo */\\nvar parse_ControlInfo = parsenoop;\\n\\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\\nvar parse_URLMoniker = function(blob, length) {\\n\\tvar len = blob.read_shift(4), start = blob.l;\\n\\tvar extra = false;\\n\\tif(len > 24) {\\n\\t\\t/* look ahead */\\n\\t\\tblob.l += len - 24;\\n\\t\\tif(blob.read_shift(16) === \\\"795881f43b1d7f48af2c825dc4852763\\\") extra = true;\\n\\t\\tblob.l = start;\\n\\t}\\n\\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\\\"\\\");\\n\\tif(extra) blob.l += 24;\\n\\treturn url;\\n};\\n\\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\\nvar parse_FileMoniker = function(blob, length) {\\n\\tvar cAnti = blob.read_shift(2);\\n\\tvar ansiLength = blob.read_shift(4);\\n\\tvar ansiPath = blob.read_shift(ansiLength, 'cstr');\\n\\tvar endServer = blob.read_shift(2);\\n\\tvar versionNumber = blob.read_shift(2);\\n\\tvar cbUnicodePathSize = blob.read_shift(4);\\n\\tif(cbUnicodePathSize === 0) return ansiPath.replace(/\\\\\\\\/g,\\\"/\\\");\\n\\tvar cbUnicodePathBytes = blob.read_shift(4);\\n\\tvar usKeyValue = blob.read_shift(2);\\n\\tvar unicodePath = blob.read_shift(cbUnicodePathBytes>>1, 'utf16le').replace(chr0,\\\"\\\");\\n\\treturn unicodePath;\\n};\\n\\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\\nvar parse_HyperlinkMoniker = function(blob, length) {\\n\\tvar clsid = blob.read_shift(16); length -= 16;\\n\\tswitch(clsid) {\\n\\t\\tcase \\\"e0c9ea79f9bace118c8200aa004ba90b\\\": return parse_URLMoniker(blob, length);\\n\\t\\tcase \\\"0303000000000000c000000000000046\\\": return parse_FileMoniker(blob, length);\\n\\t\\tdefault: throw \\\"unsupported moniker \\\" + clsid;\\n\\t}\\n};\\n\\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\\nvar parse_HyperlinkString = function(blob, length) {\\n\\tvar len = blob.read_shift(4);\\n\\tvar o = blob.read_shift(len, 'utf16le').replace(chr0, \\\"\\\");\\n\\treturn o;\\n};\\n\\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object TODO: unify params with XLSX */\\nvar parse_Hyperlink = function(blob, length) {\\n\\tvar end = blob.l + length;\\n\\tvar sVer = blob.read_shift(4);\\n\\tif(sVer !== 2) throw new Error(\\\"Unrecognized streamVersion: \\\" + sVer);\\n\\tvar flags = blob.read_shift(2);\\n\\tblob.l += 2;\\n\\tvar displayName, targetFrameName, moniker, oleMoniker, location, guid, fileTime;\\n\\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\\n\\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\\n\\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\\n\\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\\n\\tif(flags & 0x0008) location = parse_HyperlinkString(blob, end - blob.l);\\n\\tif(flags & 0x0020) guid = blob.read_shift(16);\\n\\tif(flags & 0x0040) fileTime = parse_FILETIME(blob, 8);\\n\\tblob.l = end;\\n\\tvar target = (targetFrameName||moniker||oleMoniker);\\n\\tif(location) target+=\\\"#\\\"+location;\\n\\treturn {Target: target};\\n};\\n\\n/* 2.5.178 LongRGBA */\\nfunction parse_LongRGBA(blob, length) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\\n\\n/* 2.5.177 LongRGB */\\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\\n\\n\\n/* --- MS-XLS --- */\\n\\n/* 2.5.19 */\\nfunction parse_XLSCell(blob, length) {\\n\\tvar rw = blob.read_shift(2); // 0-indexed\\n\\tvar col = blob.read_shift(2);\\n\\tvar ixfe = blob.read_shift(2);\\n\\treturn {r:rw, c:col, ixfe:ixfe};\\n}\\n\\n/* 2.5.134 */\\nfunction parse_frtHeader(blob) {\\n\\tvar rt = blob.read_shift(2);\\n\\tvar flags = blob.read_shift(2); // TODO: parse these flags\\n\\tblob.l += 8;\\n\\treturn {type: rt, flags: flags};\\n}\\n\\n\\n\\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \\\"\\\" : parse_XLUnicodeString2(blob, length, opts); }\\n\\n/* 2.5.158 */\\nvar HIDEOBJENUM = ['SHOWALL', 'SHOWPLACEHOLDER', 'HIDEALL'];\\nvar parse_HideObjEnum = parseuint16;\\n\\n/* 2.5.344 */\\nfunction parse_XTI(blob, length) {\\n\\tvar iSupBook = blob.read_shift(2), itabFirst = blob.read_shift(2,'i'), itabLast = blob.read_shift(2,'i');\\n\\treturn [iSupBook, itabFirst, itabLast];\\n}\\n\\n/* 2.5.218 */\\nfunction parse_RkRec(blob, length) {\\n\\tvar ixfe = blob.read_shift(2);\\n\\tvar RK = parse_RkNumber(blob);\\n\\t//console.log(\\\"::\\\", ixfe, RK,\\\";;\\\");\\n\\treturn [ixfe, RK];\\n}\\n\\n/* 2.5.1 */\\nfunction parse_AddinUdf(blob, length) {\\n\\tblob.l += 4; length -= 4;\\n\\tvar l = blob.l + length;\\n\\tvar udfName = parse_ShortXLUnicodeString(blob, length);\\n\\tvar cb = blob.read_shift(2);\\n\\tl -= blob.l;\\n\\tif(cb !== l) throw \\\"Malformed AddinUdf: padding = \\\" + l + \\\" != \\\" + cb;\\n\\tblob.l += cb;\\n\\treturn udfName;\\n}\\n\\n/* 2.5.209 TODO: Check sizes */\\nfunction parse_Ref8U(blob, length) {\\n\\tvar rwFirst = blob.read_shift(2);\\n\\tvar rwLast = blob.read_shift(2);\\n\\tvar colFirst = blob.read_shift(2);\\n\\tvar colLast = blob.read_shift(2);\\n\\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\\n}\\n\\n/* 2.5.211 */\\nfunction parse_RefU(blob, length) {\\n\\tvar rwFirst = blob.read_shift(2);\\n\\tvar rwLast = blob.read_shift(2);\\n\\tvar colFirst = blob.read_shift(1);\\n\\tvar colLast = blob.read_shift(1);\\n\\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\\n}\\n\\n/* 2.5.207 */\\nvar parse_Ref = parse_RefU;\\n\\n/* 2.5.143 */\\nfunction parse_FtCmo(blob, length) {\\n\\tblob.l += 4;\\n\\tvar ot = blob.read_shift(2);\\n\\tvar id = blob.read_shift(2);\\n\\tvar flags = blob.read_shift(2);\\n\\tblob.l+=12;\\n\\treturn [id, ot, flags];\\n}\\n\\n/* 2.5.149 */\\nfunction parse_FtNts(blob, length) {\\n\\tvar out = {};\\n\\tblob.l += 4;\\n\\tblob.l += 16; // GUID TODO\\n\\tout.fSharedNote = blob.read_shift(2);\\n\\tblob.l += 4;\\n\\treturn out;\\n}\\n\\n/* 2.5.142 */\\nfunction parse_FtCf(blob, length) {\\n\\tvar out = {};\\n\\tblob.l += 4;\\n\\tblob.cf = blob.read_shift(2);\\n\\treturn out;\\n}\\n\\n/* 2.5.140 - 2.5.154 and friends */\\nvar FtTab = {\\n\\t0x15: parse_FtCmo,\\n\\t0x13: parsenoop, /* FtLbsData */\\n\\t0x12: function(blob, length) { blob.l += 12; }, /* FtCblsData */\\n\\t0x11: function(blob, length) { blob.l += 8; }, /* FtRboData */\\n\\t0x10: parsenoop, /* FtEdoData */\\n\\t0x0F: parsenoop, /* FtGboData */\\n\\t0x0D: parse_FtNts, /* FtNts */\\n\\t0x0C: function(blob, length) { blob.l += 24; }, /* FtSbs */\\n\\t0x0B: function(blob, length) { blob.l += 10; }, /* FtRbo */\\n\\t0x0A: function(blob, length) { blob.l += 16; }, /* FtCbls */\\n\\t0x09: parsenoop, /* FtPictFmla */\\n\\t0x08: function(blob, length) { blob.l += 6; }, /* FtPioGrbit */\\n\\t0x07: parse_FtCf, /* FtCf */\\n\\t0x06: function(blob, length) { blob.l += 6; }, /* FtGmo */\\n\\t0x04: parsenoop, /* FtMacro */\\n\\t0x00: function(blob, length) { blob.l += 4; } /* FtEnding */\\n};\\nfunction parse_FtArray(blob, length, ot) {\\n\\tvar s = blob.l;\\n\\tvar fts = [];\\n\\twhile(blob.l < s + length) {\\n\\t\\tvar ft = blob.read_shift(2);\\n\\t\\tblob.l-=2;\\n\\t\\ttry {\\n\\t\\t\\tfts.push(FtTab[ft](blob, s + length - blob.l));\\n\\t\\t} catch(e) { blob.l = s + length; return fts; }\\n\\t}\\n\\tif(blob.l != s + length) blob.l = s + length; //throw \\\"bad Object Ft-sequence\\\";\\n\\treturn fts;\\n}\\n\\n/* 2.5.129 */\\nvar parse_FontIndex = parseuint16;\\n\\n/* --- 2.4 Records --- */\\n\\n/* 2.4.21 */\\nfunction parse_BOF(blob, length) {\\n\\tvar o = {};\\n\\to.BIFFVer = blob.read_shift(2); length -= 2;\\n\\tswitch(o.BIFFVer) {\\n\\t\\tcase 0x0600: /* BIFF8 */\\n\\t\\tcase 0x0500: /* BIFF5 */\\n\\t\\tcase 0x0002: case 0x0007: /* BIFF2 */\\n\\t\\t\\tbreak;\\n\\t\\tdefault: throw \\\"Unexpected BIFF Ver \\\" + o.BIFFVer;\\n\\t}\\n\\tblob.read_shift(length);\\n\\treturn o;\\n}\\n\\n\\n/* 2.4.146 */\\nfunction parse_InterfaceHdr(blob, length) {\\n\\tif(length === 0) return 0x04b0;\\n\\tvar q;\\n\\tif((q=blob.read_shift(2))!==0x04b0) throw 'InterfaceHdr codePage ' + q;\\n\\treturn 0x04b0;\\n}\\n\\n\\n/* 2.4.349 */\\nfunction parse_WriteAccess(blob, length, opts) {\\n\\tif(opts.enc) { blob.l += length; return \\\"\\\"; }\\n\\tvar l = blob.l;\\n\\t// TODO: make sure XLUnicodeString doesnt overrun\\n\\tvar UserName = parse_XLUnicodeString(blob, 0, opts);\\n\\tblob.read_shift(length + l - blob.l);\\n\\treturn UserName;\\n}\\n\\n/* 2.4.28 */\\nfunction parse_BoundSheet8(blob, length, opts) {\\n\\tvar pos = blob.read_shift(4);\\n\\tvar hidden = blob.read_shift(1) >> 6;\\n\\tvar dt = blob.read_shift(1);\\n\\tswitch(dt) {\\n\\t\\tcase 0: dt = 'Worksheet'; break;\\n\\t\\tcase 1: dt = 'Macrosheet'; break;\\n\\t\\tcase 2: dt = 'Chartsheet'; break;\\n\\t\\tcase 6: dt = 'VBAModule'; break;\\n\\t}\\n\\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\\n\\tif(name.length === 0) name = \\\"Sheet1\\\";\\n\\treturn { pos:pos, hs:hidden, dt:dt, name:name };\\n}\\n\\n/* 2.4.265 TODO */\\nfunction parse_SST(blob, length) {\\n\\tvar cnt = blob.read_shift(4);\\n\\tvar ucnt = blob.read_shift(4);\\n\\tvar strs = [];\\n\\tfor(var i = 0; i != ucnt; ++i) {\\n\\t\\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\\n\\t}\\n\\tstrs.Count = cnt; strs.Unique = ucnt;\\n\\treturn strs;\\n}\\n\\n/* 2.4.107 */\\nfunction parse_ExtSST(blob, length) {\\n\\tvar extsst = {};\\n\\textsst.dsst = blob.read_shift(2);\\n\\tblob.l += length-2;\\n\\treturn extsst;\\n}\\n\\n\\n/* 2.4.221 TODO*/\\nfunction parse_Row(blob, length) {\\n\\tvar rw = blob.read_shift(2), col = blob.read_shift(2), Col = blob.read_shift(2), rht = blob.read_shift(2);\\n\\tblob.read_shift(4); // reserved(2), unused(2)\\n\\tvar flags = blob.read_shift(1); // various flags\\n\\tblob.read_shift(1); // reserved\\n\\tblob.read_shift(2); //ixfe, other flags\\n\\treturn {r:rw, c:col, cnt:Col-col};\\n}\\n\\n\\n/* 2.4.125 */\\nfunction parse_ForceFullCalculation(blob, length) {\\n\\tvar header = parse_frtHeader(blob);\\n\\tif(header.type != 0x08A3) throw \\\"Invalid Future Record \\\" + header.type;\\n\\tvar fullcalc = blob.read_shift(4);\\n\\treturn fullcalc !== 0x0;\\n}\\n\\n\\nvar parse_CompressPictures = parsenoop2; /* 2.4.55 Not interesting */\\n\\n\\n\\n/* 2.4.215 rt */\\nfunction parse_RecalcId(blob, length) {\\n\\tblob.read_shift(2);\\n\\treturn blob.read_shift(4);\\n}\\n\\n/* 2.4.87 */\\nfunction parse_DefaultRowHeight (blob, length) {\\n\\tvar f = blob.read_shift(2), miyRw;\\n\\tmiyRw = blob.read_shift(2); // flags & 0x02 -> hidden, else empty\\n\\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\\n\\treturn [fl, miyRw];\\n}\\n\\n/* 2.4.345 TODO */\\nfunction parse_Window1(blob, length) {\\n\\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\\n\\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\\n\\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\\n\\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\\n\\t\\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\\n}\\n\\n/* 2.4.122 TODO */\\nfunction parse_Font(blob, length, opts) {\\n\\tblob.l += 14;\\n\\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\\n\\treturn name;\\n}\\n\\n/* 2.4.149 */\\nfunction parse_LabelSst(blob, length) {\\n\\tvar cell = parse_XLSCell(blob);\\n\\tcell.isst = blob.read_shift(4);\\n\\treturn cell;\\n}\\n\\n/* 2.4.148 */\\nfunction parse_Label(blob, length, opts) {\\n\\tvar cell = parse_XLSCell(blob, 6);\\n\\tvar str = parse_XLUnicodeString(blob, length-6, opts);\\n\\tcell.val = str;\\n\\treturn cell;\\n}\\n\\n/* 2.4.126 Number Formats */\\nfunction parse_Format(blob, length, opts) {\\n\\tvar ifmt = blob.read_shift(2);\\n\\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\\n\\treturn [ifmt, fmtstr];\\n}\\n\\n/* 2.4.90 */\\nfunction parse_Dimensions(blob, length) {\\n\\tvar w = length === 10 ? 2 : 4;\\n\\tvar r = blob.read_shift(w), R = blob.read_shift(w),\\n\\t c = blob.read_shift(2), C = blob.read_shift(2);\\n\\tblob.l += 2;\\n\\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\\n}\\n\\n/* 2.4.220 */\\nfunction parse_RK(blob, length) {\\n\\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\\n\\tvar rkrec = parse_RkRec(blob);\\n\\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\\n}\\n\\n/* 2.4.175 */\\nfunction parse_MulRk(blob, length) {\\n\\tvar target = blob.l + length - 2;\\n\\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\\n\\tvar rkrecs = [];\\n\\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\\n\\tif(blob.l !== target) throw \\\"MulRK read error\\\";\\n\\tvar lastcol = blob.read_shift(2);\\n\\tif(rkrecs.length != lastcol - col + 1) throw \\\"MulRK length mismatch\\\";\\n\\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\\n}\\n\\n/* 2.5.20 2.5.249 TODO */\\nfunction parse_CellStyleXF(blob, length, style) {\\n\\tvar o = {};\\n\\tvar a = blob.read_shift(4), b = blob.read_shift(4);\\n\\tvar c = blob.read_shift(4), d = blob.read_shift(2);\\n\\to.patternType = XLSFillPattern[c >> 26];\\n\\to.icvFore = d & 0x7F;\\n\\to.icvBack = (d >> 7) & 0x7F;\\n\\treturn o;\\n}\\nfunction parse_CellXF(blob, length) {return parse_CellStyleXF(blob,length,0);}\\nfunction parse_StyleXF(blob, length) {return parse_CellStyleXF(blob,length,1);}\\n\\n/* 2.4.353 TODO: actually do this right */\\nfunction parse_XF(blob, length) {\\n\\tvar o = {};\\n\\to.ifnt = blob.read_shift(2); o.ifmt = blob.read_shift(2); o.flags = blob.read_shift(2);\\n\\to.fStyle = (o.flags >> 2) & 0x01;\\n\\tlength -= 6;\\n\\to.data = parse_CellStyleXF(blob, length, o.fStyle);\\n\\treturn o;\\n}\\n\\n/* 2.4.134 */\\nfunction parse_Guts(blob, length) {\\n\\tblob.l += 4;\\n\\tvar out = [blob.read_shift(2), blob.read_shift(2)];\\n\\tif(out[0] !== 0) out[0]--;\\n\\tif(out[1] !== 0) out[1]--;\\n\\tif(out[0] > 7 || out[1] > 7) throw \\\"Bad Gutters: \\\" + out;\\n\\treturn out;\\n}\\n\\n/* 2.4.24 */\\nfunction parse_BoolErr(blob, length) {\\n\\tvar cell = parse_XLSCell(blob, 6);\\n\\tvar val = parse_Bes(blob, 2);\\n\\tcell.val = val;\\n\\tcell.t = (val === true || val === false) ? 'b' : 'e';\\n\\treturn cell;\\n}\\n\\n/* 2.4.180 Number */\\nfunction parse_Number(blob, length) {\\n\\tvar cell = parse_XLSCell(blob, 6);\\n\\tvar xnum = parse_Xnum(blob, 8);\\n\\tcell.val = xnum;\\n\\treturn cell;\\n}\\n\\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\\n\\n/* 2.4.271 */\\nfunction parse_SupBook(blob, length, opts) {\\n\\tvar end = blob.l + length;\\n\\tvar ctab = blob.read_shift(2);\\n\\tvar cch = blob.read_shift(2);\\n\\tvar virtPath;\\n\\tif(cch >=0x01 && cch <=0xff) virtPath = parse_XLUnicodeStringNoCch(blob, cch);\\n\\tvar rgst = blob.read_shift(end - blob.l);\\n\\topts.sbcch = cch;\\n\\treturn [cch, ctab, virtPath, rgst];\\n}\\n\\n/* 2.4.105 TODO */\\nfunction parse_ExternName(blob, length, opts) {\\n\\tvar flags = blob.read_shift(2);\\n\\tvar body;\\n\\tvar o = {\\n\\t\\tfBuiltIn: flags & 0x01,\\n\\t\\tfWantAdvise: (flags >>> 1) & 0x01,\\n\\t\\tfWantPict: (flags >>> 2) & 0x01,\\n\\t\\tfOle: (flags >>> 3) & 0x01,\\n\\t\\tfOleLink: (flags >>> 4) & 0x01,\\n\\t\\tcf: (flags >>> 5) & 0x3FF,\\n\\t\\tfIcon: flags >>> 15 & 0x01\\n\\t};\\n\\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2);\\n\\t//else throw new Error(\\\"unsupported SupBook cch: \\\" + opts.sbcch);\\n\\to.body = body || blob.read_shift(length-2);\\n\\treturn o;\\n}\\n\\n/* 2.4.150 TODO */\\nfunction parse_Lbl(blob, length, opts) {\\n\\tif(opts.biff < 8) return parse_Label(blob, length, opts);\\n\\tvar target = blob.l + length;\\n\\tvar flags = blob.read_shift(2);\\n\\tvar chKey = blob.read_shift(1);\\n\\tvar cch = blob.read_shift(1);\\n\\tvar cce = blob.read_shift(2);\\n\\tblob.l += 2;\\n\\tvar itab = blob.read_shift(2);\\n\\tblob.l += 4;\\n\\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\\n\\tvar rgce = parse_NameParsedFormula(blob, target - blob.l, opts, cce);\\n\\treturn {\\n\\t\\tchKey: chKey,\\n\\t\\tName: name,\\n\\t\\trgce: rgce\\n\\t};\\n}\\n\\n/* 2.4.106 TODO: verify supbook manipulation */\\nfunction parse_ExternSheet(blob, length, opts) {\\n\\tif(opts.biff < 8) return parse_ShortXLUnicodeString(blob, length, opts);\\n\\tvar o = parslurp2(blob,length,parse_XTI);\\n\\tvar oo = [];\\n\\tif(opts.sbcch === 0x0401) {\\n\\t\\tfor(var i = 0; i != o.length; ++i) oo.push(opts.snames[o[i][1]]);\\n\\t\\treturn oo;\\n\\t}\\n\\telse return o;\\n}\\n\\n/* 2.4.260 */\\nfunction parse_ShrFmla(blob, length, opts) {\\n\\tvar ref = parse_RefU(blob, 6);\\n\\tblob.l++;\\n\\tvar cUse = blob.read_shift(1);\\n\\tlength -= 8;\\n\\treturn [parse_SharedParsedFormula(blob, length, opts), cUse];\\n}\\n\\n/* 2.4.4 TODO */\\nfunction parse_Array(blob, length, opts) {\\n\\tvar ref = parse_Ref(blob, 6);\\n\\tblob.l += 6; length -= 12; /* TODO: fAlwaysCalc */\\n\\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\\n}\\n\\n/* 2.4.173 */\\nfunction parse_MTRSettings(blob, length) {\\n\\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\\n\\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\\n\\tvar cUserThreadCount = blob.read_shift(4);\\n\\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\\n}\\n\\n/* 2.5.186 TODO: BIFF5 */\\nfunction parse_NoteSh(blob, length, opts) {\\n\\tif(opts.biff < 8) return;\\n\\tvar row = blob.read_shift(2), col = blob.read_shift(2);\\n\\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\\n\\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\\n\\tif(opts.biff < 8) blob.read_shift(1);\\n\\treturn [{r:row,c:col}, stAuthor, idObj, flags];\\n}\\n\\n/* 2.4.179 */\\nfunction parse_Note(blob, length, opts) {\\n\\t/* TODO: Support revisions */\\n\\treturn parse_NoteSh(blob, length, opts);\\n}\\n\\n/* 2.4.168 */\\nfunction parse_MergeCells(blob, length) {\\n\\tvar merges = [];\\n\\tvar cmcs = blob.read_shift(2);\\n\\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\\n\\treturn merges;\\n}\\n\\n/* 2.4.181 TODO: parse all the things! */\\nfunction parse_Obj(blob, length) {\\n\\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\\n\\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\\n\\treturn { cmo: cmo, ft:fts };\\n}\\n\\n/* 2.4.329 TODO: parse properly */\\nfunction parse_TxO(blob, length, opts) {\\n\\tvar s = blob.l;\\ntry {\\n\\tblob.l += 4;\\n\\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\\n\\tvar controlInfo;\\n\\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\\n\\telse controlInfo = parse_ControlInfo(blob, 6, opts);\\n\\tvar cchText = blob.read_shift(2);\\n\\tvar cbRuns = blob.read_shift(2);\\n\\tvar ifntEmpty = parse_FontIndex(blob, 2);\\n\\tvar len = blob.read_shift(2);\\n\\tblob.l += len;\\n\\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\\n\\n\\tvar texts = \\\"\\\";\\n\\tfor(var i = 1; i < blob.lens.length-1; ++i) {\\n\\t\\tif(blob.l-s != blob.lens[i]) throw \\\"TxO: bad continue record\\\";\\n\\t\\tvar hdr = blob[blob.l];\\n\\t\\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\\n\\t\\ttexts += t;\\n\\t\\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\\n\\t}\\n\\tif(texts.length !== cchText && texts.length !== cchText*2) {\\n\\t\\tthrow \\\"cchText: \\\" + cchText + \\\" != \\\" + texts.length;\\n\\t}\\n\\n\\tblob.l = s + length;\\n\\t/* 2.5.272 TxORuns */\\n//\\tvar rgTxoRuns = [];\\n//\\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\\n//\\tvar cchText2 = blob.read_shift(2);\\n//\\tif(cchText2 !== cchText) throw \\\"TxOLastRun mismatch: \\\" + cchText2 + \\\" \\\" + cchText;\\n//\\tblob.l += 6;\\n//\\tif(s + length != blob.l) throw \\\"TxO \\\" + (s + length) + \\\", at \\\" + blob.l;\\n\\treturn { t: texts };\\n} catch(e) { blob.l = s + length; return { t: texts||\\\"\\\" }; }\\n}\\n\\n/* 2.4.140 */\\nvar parse_HLink = function(blob, length) {\\n\\tvar ref = parse_Ref8U(blob, 8);\\n\\tblob.l += 16; /* CLSID */\\n\\tvar hlink = parse_Hyperlink(blob, length-24);\\n\\treturn [ref, hlink];\\n};\\n\\n/* 2.4.141 */\\nvar parse_HLinkTooltip = function(blob, length) {\\n\\tvar end = blob.l + length;\\n\\tblob.read_shift(2);\\n\\tvar ref = parse_Ref8U(blob, 8);\\n\\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\\n\\twzTooltip = wzTooltip.replace(chr0,\\\"\\\");\\n\\treturn [ref, wzTooltip];\\n};\\n\\n/* 2.4.63 */\\nfunction parse_Country(blob, length) {\\n\\tvar o = [], d;\\n\\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\\n\\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\\n\\treturn o;\\n}\\n\\n/* 2.4.50 ClrtClient */\\nfunction parse_ClrtClient(blob, length) {\\n\\tvar ccv = blob.read_shift(2);\\n\\tvar o = [];\\n\\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\\n\\treturn o;\\n}\\n\\n/* 2.4.188 */\\nfunction parse_Palette(blob, length) {\\n\\tvar ccv = blob.read_shift(2);\\n\\tvar o = [];\\n\\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\\n\\treturn o;\\n}\\n\\n/* 2.4.354 */\\nfunction parse_XFCRC(blob, length) {\\n\\tblob.l += 2;\\n\\tvar o = {cxfs:0, crc:0};\\n\\to.cxfs = blob.read_shift(2);\\n\\to.crc = blob.read_shift(4);\\n\\treturn o;\\n}\\n\\n\\nvar parse_Style = parsenoop;\\nvar parse_StyleExt = parsenoop;\\n\\nvar parse_ColInfo = parsenoop;\\n\\nvar parse_Window2 = parsenoop;\\n\\n\\nvar parse_Backup = parsebool; /* 2.4.14 */\\nvar parse_Blank = parse_XLSCell; /* 2.4.20 Just the cell */\\nvar parse_BottomMargin = parse_Xnum; /* 2.4.27 */\\nvar parse_BuiltInFnGroupCount = parseuint16; /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */\\nvar parse_CalcCount = parseuint16; /* 2.4.31 #Iterations */\\nvar parse_CalcDelta = parse_Xnum; /* 2.4.32 */\\nvar parse_CalcIter = parsebool; /* 2.4.33 1=iterative calc */\\nvar parse_CalcMode = parseuint16; /* 2.4.34 0=manual, 1=auto (def), 2=table */\\nvar parse_CalcPrecision = parsebool; /* 2.4.35 */\\nvar parse_CalcRefMode = parsenoop2; /* 2.4.36 */\\nvar parse_CalcSaveRecalc = parsebool; /* 2.4.37 */\\nvar parse_CodePage = parseuint16; /* 2.4.52 */\\nvar parse_Compat12 = parsebool; /* 2.4.54 true = no compatibility check */\\nvar parse_Date1904 = parsebool; /* 2.4.77 - 1=1904,0=1900 */\\nvar parse_DefColWidth = parseuint16; /* 2.4.89 */\\nvar parse_DSF = parsenoop2; /* 2.4.94 -- MUST be ignored */\\nvar parse_EntExU2 = parsenoop2; /* 2.4.102 -- Explicitly says to ignore */\\nvar parse_EOF = parsenoop2; /* 2.4.103 */\\nvar parse_Excel9File = parsenoop2; /* 2.4.104 -- Optional and unused */\\nvar parse_FeatHdr = parsenoop2; /* 2.4.112 */\\nvar parse_FontX = parseuint16; /* 2.4.123 */\\nvar parse_Footer = parse_XLHeaderFooter; /* 2.4.124 */\\nvar parse_GridSet = parseuint16; /* 2.4.132, =1 */\\nvar parse_HCenter = parsebool; /* 2.4.135 sheet centered horizontal on print */\\nvar parse_Header = parse_XLHeaderFooter; /* 2.4.136 */\\nvar parse_HideObj = parse_HideObjEnum; /* 2.4.139 */\\nvar parse_InterfaceEnd = parsenoop2; /* 2.4.145 -- noop */\\nvar parse_LeftMargin = parse_Xnum; /* 2.4.151 */\\nvar parse_Mms = parsenoop2; /* 2.4.169 -- Explicitly says to ignore */\\nvar parse_ObjProtect = parsebool; /* 2.4.183 -- must be 1 if present */\\nvar parse_Password = parseuint16; /* 2.4.191 */\\nvar parse_PrintGrid = parsebool; /* 2.4.202 */\\nvar parse_PrintRowCol = parsebool; /* 2.4.203 */\\nvar parse_PrintSize = parseuint16; /* 2.4.204 0:3 */\\nvar parse_Prot4Rev = parsebool; /* 2.4.205 */\\nvar parse_Prot4RevPass = parseuint16; /* 2.4.206 */\\nvar parse_Protect = parsebool; /* 2.4.207 */\\nvar parse_RefreshAll = parsebool; /* 2.4.217 -- must be 0 if not template */\\nvar parse_RightMargin = parse_Xnum; /* 2.4.219 */\\nvar parse_RRTabId = parseuint16a; /* 2.4.241 */\\nvar parse_ScenarioProtect = parsebool; /* 2.4.245 */\\nvar parse_Scl = parseuint16a; /* 2.4.247 num, den */\\nvar parse_String = parse_XLUnicodeString; /* 2.4.268 */\\nvar parse_SxBool = parsebool; /* 2.4.274 */\\nvar parse_TopMargin = parse_Xnum; /* 2.4.328 */\\nvar parse_UsesELFs = parsebool; /* 2.4.337 -- should be 0 */\\nvar parse_VCenter = parsebool; /* 2.4.342 */\\nvar parse_WinProtect = parsebool; /* 2.4.347 */\\nvar parse_WriteProtect = parsenoop; /* 2.4.350 empty record */\\n\\n\\n/* ---- */\\nvar parse_VerticalPageBreaks = parsenoop;\\nvar parse_HorizontalPageBreaks = parsenoop;\\nvar parse_Selection = parsenoop;\\nvar parse_Continue = parsenoop;\\nvar parse_Pane = parsenoop;\\nvar parse_Pls = parsenoop;\\nvar parse_DCon = parsenoop;\\nvar parse_DConRef = parsenoop;\\nvar parse_DConName = parsenoop;\\nvar parse_XCT = parsenoop;\\nvar parse_CRN = parsenoop;\\nvar parse_FileSharing = parsenoop;\\nvar parse_Uncalced = parsenoop;\\nvar parse_Template = parsenoop;\\nvar parse_Intl = parsenoop;\\nvar parse_WsBool = parsenoop;\\nvar parse_Sort = parsenoop;\\nvar parse_Sync = parsenoop;\\nvar parse_LPr = parsenoop;\\nvar parse_DxGCol = parsenoop;\\nvar parse_FnGroupName = parsenoop;\\nvar parse_FilterMode = parsenoop;\\nvar parse_AutoFilterInfo = parsenoop;\\nvar parse_AutoFilter = parsenoop;\\nvar parse_Setup = parsenoop;\\nvar parse_ScenMan = parsenoop;\\nvar parse_SCENARIO = parsenoop;\\nvar parse_SxView = parsenoop;\\nvar parse_Sxvd = parsenoop;\\nvar parse_SXVI = parsenoop;\\nvar parse_SxIvd = parsenoop;\\nvar parse_SXLI = parsenoop;\\nvar parse_SXPI = parsenoop;\\nvar parse_DocRoute = parsenoop;\\nvar parse_RecipName = parsenoop;\\nvar parse_MulBlank = parsenoop;\\nvar parse_SXDI = parsenoop;\\nvar parse_SXDB = parsenoop;\\nvar parse_SXFDB = parsenoop;\\nvar parse_SXDBB = parsenoop;\\nvar parse_SXNum = parsenoop;\\nvar parse_SxErr = parsenoop;\\nvar parse_SXInt = parsenoop;\\nvar parse_SXString = parsenoop;\\nvar parse_SXDtr = parsenoop;\\nvar parse_SxNil = parsenoop;\\nvar parse_SXTbl = parsenoop;\\nvar parse_SXTBRGIITM = parsenoop;\\nvar parse_SxTbpg = parsenoop;\\nvar parse_ObProj = parsenoop;\\nvar parse_SXStreamID = parsenoop;\\nvar parse_DBCell = parsenoop;\\nvar parse_SXRng = parsenoop;\\nvar parse_SxIsxoper = parsenoop;\\nvar parse_BookBool = parsenoop;\\nvar parse_DbOrParamQry = parsenoop;\\nvar parse_OleObjectSize = parsenoop;\\nvar parse_SXVS = parsenoop;\\nvar parse_BkHim = parsenoop;\\nvar parse_MsoDrawingGroup = parsenoop;\\nvar parse_MsoDrawing = parsenoop;\\nvar parse_MsoDrawingSelection = parsenoop;\\nvar parse_PhoneticInfo = parsenoop;\\nvar parse_SxRule = parsenoop;\\nvar parse_SXEx = parsenoop;\\nvar parse_SxFilt = parsenoop;\\nvar parse_SxDXF = parsenoop;\\nvar parse_SxItm = parsenoop;\\nvar parse_SxName = parsenoop;\\nvar parse_SxSelect = parsenoop;\\nvar parse_SXPair = parsenoop;\\nvar parse_SxFmla = parsenoop;\\nvar parse_SxFormat = parsenoop;\\nvar parse_SXVDEx = parsenoop;\\nvar parse_SXFormula = parsenoop;\\nvar parse_SXDBEx = parsenoop;\\nvar parse_RRDInsDel = parsenoop;\\nvar parse_RRDHead = parsenoop;\\nvar parse_RRDChgCell = parsenoop;\\nvar parse_RRDRenSheet = parsenoop;\\nvar parse_RRSort = parsenoop;\\nvar parse_RRDMove = parsenoop;\\nvar parse_RRFormat = parsenoop;\\nvar parse_RRAutoFmt = parsenoop;\\nvar parse_RRInsertSh = parsenoop;\\nvar parse_RRDMoveBegin = parsenoop;\\nvar parse_RRDMoveEnd = parsenoop;\\nvar parse_RRDInsDelBegin = parsenoop;\\nvar parse_RRDInsDelEnd = parsenoop;\\nvar parse_RRDConflict = parsenoop;\\nvar parse_RRDDefName = parsenoop;\\nvar parse_RRDRstEtxp = parsenoop;\\nvar parse_LRng = parsenoop;\\nvar parse_CUsr = parsenoop;\\nvar parse_CbUsr = parsenoop;\\nvar parse_UsrInfo = parsenoop;\\nvar parse_UsrExcl = parsenoop;\\nvar parse_FileLock = parsenoop;\\nvar parse_RRDInfo = parsenoop;\\nvar parse_BCUsrs = parsenoop;\\nvar parse_UsrChk = parsenoop;\\nvar parse_UserBView = parsenoop;\\nvar parse_UserSViewBegin = parsenoop; // overloaded\\nvar parse_UserSViewEnd = parsenoop;\\nvar parse_RRDUserView = parsenoop;\\nvar parse_Qsi = parsenoop;\\nvar parse_CondFmt = parsenoop;\\nvar parse_CF = parsenoop;\\nvar parse_DVal = parsenoop;\\nvar parse_DConBin = parsenoop;\\nvar parse_Lel = parsenoop;\\nvar parse_XLSCodeName = parse_XLUnicodeString;\\nvar parse_SXFDBType = parsenoop;\\nvar parse_ObNoMacros = parsenoop;\\nvar parse_Dv = parsenoop;\\nvar parse_Index = parsenoop;\\nvar parse_Table = parsenoop;\\nvar parse_BigName = parsenoop;\\nvar parse_ContinueBigName = parsenoop;\\nvar parse_WebPub = parsenoop;\\nvar parse_QsiSXTag = parsenoop;\\nvar parse_DBQueryExt = parsenoop;\\nvar parse_ExtString = parsenoop;\\nvar parse_TxtQry = parsenoop;\\nvar parse_Qsir = parsenoop;\\nvar parse_Qsif = parsenoop;\\nvar parse_RRDTQSIF = parsenoop;\\nvar parse_OleDbConn = parsenoop;\\nvar parse_WOpt = parsenoop;\\nvar parse_SXViewEx = parsenoop;\\nvar parse_SXTH = parsenoop;\\nvar parse_SXPIEx = parsenoop;\\nvar parse_SXVDTEx = parsenoop;\\nvar parse_SXViewEx9 = parsenoop;\\nvar parse_ContinueFrt = parsenoop;\\nvar parse_RealTimeData = parsenoop;\\nvar parse_ChartFrtInfo = parsenoop;\\nvar parse_FrtWrapper = parsenoop;\\nvar parse_StartBlock = parsenoop;\\nvar parse_EndBlock = parsenoop;\\nvar parse_StartObject = parsenoop;\\nvar parse_EndObject = parsenoop;\\nvar parse_CatLab = parsenoop;\\nvar parse_YMult = parsenoop;\\nvar parse_SXViewLink = parsenoop;\\nvar parse_PivotChartBits = parsenoop;\\nvar parse_FrtFontList = parsenoop;\\nvar parse_SheetExt = parsenoop;\\nvar parse_BookExt = parsenoop;\\nvar parse_SXAddl = parsenoop;\\nvar parse_CrErr = parsenoop;\\nvar parse_HFPicture = parsenoop;\\nvar parse_Feat = parsenoop;\\nvar parse_DataLabExt = parsenoop;\\nvar parse_DataLabExtContents = parsenoop;\\nvar parse_CellWatch = parsenoop;\\nvar parse_FeatHdr11 = parsenoop;\\nvar parse_Feature11 = parsenoop;\\nvar parse_DropDownObjIds = parsenoop;\\nvar parse_ContinueFrt11 = parsenoop;\\nvar parse_DConn = parsenoop;\\nvar parse_List12 = parsenoop;\\nvar parse_Feature12 = parsenoop;\\nvar parse_CondFmt12 = parsenoop;\\nvar parse_CF12 = parsenoop;\\nvar parse_CFEx = parsenoop;\\nvar parse_AutoFilter12 = parsenoop;\\nvar parse_ContinueFrt12 = parsenoop;\\nvar parse_MDTInfo = parsenoop;\\nvar parse_MDXStr = parsenoop;\\nvar parse_MDXTuple = parsenoop;\\nvar parse_MDXSet = parsenoop;\\nvar parse_MDXProp = parsenoop;\\nvar parse_MDXKPI = parsenoop;\\nvar parse_MDB = parsenoop;\\nvar parse_PLV = parsenoop;\\nvar parse_DXF = parsenoop;\\nvar parse_TableStyles = parsenoop;\\nvar parse_TableStyle = parsenoop;\\nvar parse_TableStyleElement = parsenoop;\\nvar parse_NamePublish = parsenoop;\\nvar parse_NameCmt = parsenoop;\\nvar parse_SortData = parsenoop;\\nvar parse_GUIDTypeLib = parsenoop;\\nvar parse_FnGrp12 = parsenoop;\\nvar parse_NameFnGrp12 = parsenoop;\\nvar parse_HeaderFooter = parsenoop;\\nvar parse_CrtLayout12 = parsenoop;\\nvar parse_CrtMlFrt = parsenoop;\\nvar parse_CrtMlFrtContinue = parsenoop;\\nvar parse_ShapePropsStream = parsenoop;\\nvar parse_TextPropsStream = parsenoop;\\nvar parse_RichTextStream = parsenoop;\\nvar parse_CrtLayout12A = parsenoop;\\nvar parse_Units = parsenoop;\\nvar parse_Chart = parsenoop;\\nvar parse_Series = parsenoop;\\nvar parse_DataFormat = parsenoop;\\nvar parse_LineFormat = parsenoop;\\nvar parse_MarkerFormat = parsenoop;\\nvar parse_AreaFormat = parsenoop;\\nvar parse_PieFormat = parsenoop;\\nvar parse_AttachedLabel = parsenoop;\\nvar parse_SeriesText = parsenoop;\\nvar parse_ChartFormat = parsenoop;\\nvar parse_Legend = parsenoop;\\nvar parse_SeriesList = parsenoop;\\nvar parse_Bar = parsenoop;\\nvar parse_Line = parsenoop;\\nvar parse_Pie = parsenoop;\\nvar parse_Area = parsenoop;\\nvar parse_Scatter = parsenoop;\\nvar parse_CrtLine = parsenoop;\\nvar parse_Axis = parsenoop;\\nvar parse_Tick = parsenoop;\\nvar parse_ValueRange = parsenoop;\\nvar parse_CatSerRange = parsenoop;\\nvar parse_AxisLine = parsenoop;\\nvar parse_CrtLink = parsenoop;\\nvar parse_DefaultText = parsenoop;\\nvar parse_Text = parsenoop;\\nvar parse_ObjectLink = parsenoop;\\nvar parse_Frame = parsenoop;\\nvar parse_Begin = parsenoop;\\nvar parse_End = parsenoop;\\nvar parse_PlotArea = parsenoop;\\nvar parse_Chart3d = parsenoop;\\nvar parse_PicF = parsenoop;\\nvar parse_DropBar = parsenoop;\\nvar parse_Radar = parsenoop;\\nvar parse_Surf = parsenoop;\\nvar parse_RadarArea = parsenoop;\\nvar parse_AxisParent = parsenoop;\\nvar parse_LegendException = parsenoop;\\nvar parse_ShtProps = parsenoop;\\nvar parse_SerToCrt = parsenoop;\\nvar parse_AxesUsed = parsenoop;\\nvar parse_SBaseRef = parsenoop;\\nvar parse_SerParent = parsenoop;\\nvar parse_SerAuxTrend = parsenoop;\\nvar parse_IFmtRecord = parsenoop;\\nvar parse_Pos = parsenoop;\\nvar parse_AlRuns = parsenoop;\\nvar parse_BRAI = parsenoop;\\nvar parse_SerAuxErrBar = parsenoop;\\nvar parse_SerFmt = parsenoop;\\nvar parse_Chart3DBarShape = parsenoop;\\nvar parse_Fbi = parsenoop;\\nvar parse_BopPop = parsenoop;\\nvar parse_AxcExt = parsenoop;\\nvar parse_Dat = parsenoop;\\nvar parse_PlotGrowth = parsenoop;\\nvar parse_SIIndex = parsenoop;\\nvar parse_GelFrame = parsenoop;\\nvar parse_BopPopCustom = parsenoop;\\nvar parse_Fbi2 = parsenoop;\\n\\n/* --- Specific to versions before BIFF8 --- */\\nfunction parse_BIFF5String(blob) {\\n\\tvar len = blob.read_shift(1);\\n\\treturn blob.read_shift(len, 'sbcs-cont');\\n}\\n\\n/* BIFF2_??? where ??? is the name from [XLS] */\\nfunction parse_BIFF2STR(blob, length, opts) {\\n\\tvar cell = parse_XLSCell(blob, 6);\\n\\t++blob.l;\\n\\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\\n\\tcell.val = str;\\n\\treturn cell;\\n}\\n\\nfunction parse_BIFF2NUM(blob, length, opts) {\\n\\tvar cell = parse_XLSCell(blob, 6);\\n\\t++blob.l;\\n\\tvar num = parse_Xnum(blob, 8);\\n\\tcell.val = num;\\n\\treturn cell;\\n}\\n\\n/* 18.4.1 charset to codepage mapping */\\nvar CS2CP = {\\n\\t0: 1252, /* ANSI */\\n\\t1: 65001, /* DEFAULT */\\n\\t2: 65001, /* SYMBOL */\\n\\t77: 10000, /* MAC */\\n\\t128: 932, /* SHIFTJIS */\\n\\t129: 949, /* HANGUL */\\n\\t130: 1361, /* JOHAB */\\n\\t134: 936, /* GB2312 */\\n\\t136: 950, /* CHINESEBIG5 */\\n\\t161: 1253, /* GREEK */\\n\\t162: 1254, /* TURKISH */\\n\\t163: 1258, /* VIETNAMESE */\\n\\t177: 1255, /* HEBREW */\\n\\t178: 1256, /* ARABIC */\\n\\t186: 1257, /* BALTIC */\\n\\t204: 1251, /* RUSSIAN */\\n\\t222: 874, /* THAI */\\n\\t238: 1250, /* EASTEUROPE */\\n\\t255: 1252, /* OEM */\\n\\t69: 6969 /* MISC */\\n};\\n\\n/* Parse a list of <r> tags */\\nvar parse_rs = (function parse_rs_factory() {\\n\\tvar tregex = matchtag(\\\"t\\\"), rpregex = matchtag(\\\"rPr\\\"), rregex = /<r>/g, rend = /<\\\\/r>/, nlregex = /\\\\r\\\\n/g;\\n\\t/* 18.4.7 rPr CT_RPrElt */\\n\\tvar parse_rpr = function parse_rpr(rpr, intro, outro) {\\n\\t\\tvar font = {}, cp = 65001;\\n\\t\\tvar m = rpr.match(tagregex), i = 0;\\n\\t\\tif(m) for(;i!=m.length; ++i) {\\n\\t\\t\\tvar y = parsexmltag(m[i]);\\n\\t\\t\\tswitch(y[0]) {\\n\\t\\t\\t\\t/* 18.8.12 condense CT_BooleanProperty */\\n\\t\\t\\t\\t/* ** not required . */\\n\\t\\t\\t\\tcase '<condense': break;\\n\\t\\t\\t\\t/* 18.8.17 extend CT_BooleanProperty */\\n\\t\\t\\t\\t/* ** not required . */\\n\\t\\t\\t\\tcase '<extend': break;\\n\\t\\t\\t\\t/* 18.8.36 shadow CT_BooleanProperty */\\n\\t\\t\\t\\t/* ** not required . */\\n\\t\\t\\t\\tcase '<shadow':\\n\\t\\t\\t\\t\\t/* falls through */\\n\\t\\t\\t\\tcase '<shadow/>': break;\\n\\n\\t\\t\\t\\t/* 18.4.1 charset CT_IntProperty TODO */\\n\\t\\t\\t\\tcase '<charset':\\n\\t\\t\\t\\t\\tif(y.val == '1') break;\\n\\t\\t\\t\\t\\tcp = CS2CP[parseInt(y.val, 10)];\\n\\t\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t\\t/* 18.4.2 outline CT_BooleanProperty TODO */\\n\\t\\t\\t\\tcase '<outline':\\n\\t\\t\\t\\t\\t/* falls through */\\n\\t\\t\\t\\tcase '<outline/>': break;\\n\\n\\t\\t\\t\\t/* 18.4.5 rFont CT_FontName */\\n\\t\\t\\t\\tcase '<rFont': font.name = y.val; break;\\n\\n\\t\\t\\t\\t/* 18.4.11 sz CT_FontSize */\\n\\t\\t\\t\\tcase '<sz': font.sz = y.val; break;\\n\\n\\t\\t\\t\\t/* 18.4.10 strike CT_BooleanProperty */\\n\\t\\t\\t\\tcase '<strike':\\n\\t\\t\\t\\t\\tif(!y.val) break;\\n\\t\\t\\t\\t\\t/* falls through */\\n\\t\\t\\t\\tcase '<strike/>': font.strike = 1; break;\\n\\t\\t\\t\\tcase '</strike>': break;\\n\\n\\t\\t\\t\\t/* 18.4.13 u CT_UnderlineProperty */\\n\\t\\t\\t\\tcase '<u':\\n\\t\\t\\t\\t\\tif(!y.val) break;\\n\\t\\t\\t\\t\\t/* falls through */\\n\\t\\t\\t\\tcase '<u/>': font.u = 1; break;\\n\\t\\t\\t\\tcase '</u>': break;\\n\\n\\t\\t\\t\\t/* 18.8.2 b */\\n\\t\\t\\t\\tcase '<b':\\n\\t\\t\\t\\t\\tif(!y.val) break;\\n\\t\\t\\t\\t\\t/* falls through */\\n\\t\\t\\t\\tcase '<b/>': font.b = 1; break;\\n\\t\\t\\t\\tcase '</b>': break;\\n\\n\\t\\t\\t\\t/* 18.8.26 i */\\n\\t\\t\\t\\tcase '<i':\\n\\t\\t\\t\\t\\tif(!y.val) break;\\n\\t\\t\\t\\t\\t/* falls through */\\n\\t\\t\\t\\tcase '<i/>': font.i = 1; break;\\n\\t\\t\\t\\tcase '</i>': break;\\n\\n\\t\\t\\t\\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\\n\\t\\t\\t\\tcase '<color':\\n\\t\\t\\t\\t\\tif(y.rgb) font.color = y.rgb.substr(2,6);\\n\\t\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t\\t/* 18.8.18 family ST_FontFamily */\\n\\t\\t\\t\\tcase '<family': font.family = y.val; break;\\n\\n\\t\\t\\t\\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\\n\\t\\t\\t\\tcase '<vertAlign': break;\\n\\n\\t\\t\\t\\t/* 18.8.35 scheme CT_FontScheme TODO */\\n\\t\\t\\t\\tcase '<scheme': break;\\n\\n\\t\\t\\t\\tdefault:\\n\\t\\t\\t\\t\\tif(y[0].charCodeAt(1) !== 47) throw 'Unrecognized rich format ' + y[0];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t/* TODO: These should be generated styles, not inline */\\n\\t\\tvar style = [];\\n\\t\\tif(font.b) style.push(\\\"font-weight: bold;\\\");\\n\\t\\tif(font.i) style.push(\\\"font-style: italic;\\\");\\n\\t\\tintro.push('<span style=\\\"' + style.join(\\\"\\\") + '\\\">');\\n\\t\\toutro.push(\\\"</span>\\\");\\n\\t\\treturn cp;\\n\\t};\\n\\n\\t/* 18.4.4 r CT_RElt */\\n\\tfunction parse_r(r) {\\n\\t\\tvar terms = [[],\\\"\\\",[]];\\n\\t\\t/* 18.4.12 t ST_Xstring */\\n\\t\\tvar t = r.match(tregex), cp = 65001;\\n\\t\\tif(!isval(t)) return \\\"\\\";\\n\\t\\tterms[1] = t[1];\\n\\n\\t\\tvar rpr = r.match(rpregex);\\n\\t\\tif(isval(rpr)) cp = parse_rpr(rpr[1], terms[0], terms[2]);\\n\\n\\t\\treturn terms[0].join(\\\"\\\") + terms[1].replace(nlregex,'<br/>') + terms[2].join(\\\"\\\");\\n\\t}\\n\\treturn function parse_rs(rs) {\\n\\t\\treturn rs.replace(rregex,\\\"\\\").split(rend).map(parse_r).join(\\\"\\\");\\n\\t};\\n})();\\n\\n/* 18.4.8 si CT_Rst */\\nvar sitregex = /<t[^>]*>([^<]*)<\\\\/t>/g, sirregex = /<r>/;\\nfunction parse_si(x, opts) {\\n\\tvar html = opts ? opts.cellHTML : true;\\n\\tvar z = {};\\n\\tif(!x) return null;\\n\\tvar y;\\n\\t/* 18.4.12 t ST_Xstring (Plaintext String) */\\n\\tif(x.charCodeAt(1) === 116) {\\n\\t\\tz.t = utf8read(unescapexml(x.substr(x.indexOf(\\\">\\\")+1).split(/<\\\\/t>/)[0]));\\n\\t\\tz.r = x;\\n\\t\\tif(html) z.h = z.t;\\n\\t}\\n\\t/* 18.4.4 r CT_RElt (Rich Text Run) */\\n\\telse if((y = x.match(sirregex))) {\\n\\t\\tz.r = x;\\n\\t\\tz.t = utf8read(unescapexml(x.match(sitregex).join(\\\"\\\").replace(tagregex,\\\"\\\")));\\n\\t\\tif(html) z.h = parse_rs(x);\\n\\t}\\n\\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\\n\\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\\n\\treturn z;\\n}\\n\\n/* 18.4 Shared String Table */\\nvar sstr0 = /<sst([^>]*)>([\\\\s\\\\S]*)<\\\\/sst>/;\\nvar sstr1 = /<(?:si|sstItem)>/g;\\nvar sstr2 = /<\\\\/(?:si|sstItem)>/;\\nfunction parse_sst_xml(data, opts) {\\n\\tvar s = [], ss;\\n\\t/* 18.4.9 sst CT_Sst */\\n\\tvar sst = data.match(sstr0);\\n\\tif(isval(sst)) {\\n\\t\\tss = sst[2].replace(sstr1,\\\"\\\").split(sstr2);\\n\\t\\tfor(var i = 0; i != ss.length; ++i) {\\n\\t\\t\\tvar o = parse_si(ss[i], opts);\\n\\t\\t\\tif(o != null) s[s.length] = o;\\n\\t\\t}\\n\\t\\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\\n\\t}\\n\\treturn s;\\n}\\n\\nRELS.SST = \\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\\\";\\nvar straywsregex = /^\\\\s|\\\\s$|[\\\\t\\\\n\\\\r]/;\\nfunction write_sst_xml(sst, opts) {\\n\\tif(!opts.bookSST) return \\\"\\\";\\n\\tvar o = [XML_HEADER];\\n\\to[o.length] = (writextag('sst', null, {\\n\\t\\txmlns: XMLNS.main[0],\\n\\t\\tcount: sst.Count,\\n\\t\\tuniqueCount: sst.Unique\\n\\t}));\\n\\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\\n\\t\\tvar s = sst[i];\\n\\t\\tvar sitag = \\\"<si>\\\";\\n\\t\\tif(s.r) sitag += s.r;\\n\\t\\telse {\\n\\t\\t\\tsitag += \\\"<t\\\";\\n\\t\\t\\tif(s.t.match(straywsregex)) sitag += ' xml:space=\\\"preserve\\\"';\\n\\t\\t\\tsitag += \\\">\\\" + escapexml(s.t) + \\\"</t>\\\";\\n\\t\\t}\\n\\t\\tsitag += \\\"</si>\\\";\\n\\t\\to[o.length] = (sitag);\\n\\t}\\n\\tif(o.length>2){ o[o.length] = ('</sst>'); o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\n/* [MS-XLSB] 2.4.219 BrtBeginSst */\\nfunction parse_BrtBeginSst(data, length) {\\n\\treturn [data.read_shift(4), data.read_shift(4)];\\n}\\n\\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\\nfunction parse_sst_bin(data, opts) {\\n\\tvar s = [];\\n\\tvar pass = false;\\n\\trecordhopper(data, function hopper_sst(val, R, RT) {\\n\\t\\tswitch(R.n) {\\n\\t\\t\\tcase 'BrtBeginSst': s.Count = val[0]; s.Unique = val[1]; break;\\n\\t\\t\\tcase 'BrtSSTItem': s.push(val); break;\\n\\t\\t\\tcase 'BrtEndSst': return true;\\n\\t\\t\\t/* TODO: produce a test case with a future record */\\n\\t\\t\\tcase 'BrtFRTBegin': pass = true; break;\\n\\t\\t\\tcase 'BrtFRTEnd': pass = false; break;\\n\\t\\t\\tdefault: if(!pass || opts.WTF) throw new Error(\\\"Unexpected record \\\" + RT + \\\" \\\" + R.n);\\n\\t\\t}\\n\\t});\\n\\treturn s;\\n}\\n\\nfunction write_BrtBeginSst(sst, o) {\\n\\tif(!o) o = new_buf(8);\\n\\to.write_shift(4, sst.Count);\\n\\to.write_shift(4, sst.Unique);\\n\\treturn o;\\n}\\n\\nvar write_BrtSSTItem = write_RichStr;\\n\\nfunction write_sst_bin(sst, opts) {\\n\\tvar ba = buf_array();\\n\\twrite_record(ba, \\\"BrtBeginSst\\\", write_BrtBeginSst(sst));\\n\\tfor(var i = 0; i < sst.length; ++i) write_record(ba, \\\"BrtSSTItem\\\", write_BrtSSTItem(sst[i]));\\n\\twrite_record(ba, \\\"BrtEndSst\\\");\\n\\treturn ba.end();\\n}\\nfunction _JS2ANSI(str) { if(typeof cptable !== 'undefined') return cptable.utils.encode(1252, str); return str.split(\\\"\\\").map(function(x) { return x.charCodeAt(0); }); }\\n\\n/* [MS-OFFCRYPTO] 2.1.4 Version */\\nfunction parse_Version(blob, length) {\\n\\tvar o = {};\\n\\to.Major = blob.read_shift(2);\\n\\to.Minor = blob.read_shift(2);\\n\\treturn o;\\n}\\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\\nfunction parse_EncryptionHeader(blob, length) {\\n\\tvar o = {};\\n\\to.Flags = blob.read_shift(4);\\n\\n\\t// Check if SizeExtra is 0x00000000\\n\\tvar tmp = blob.read_shift(4);\\n\\tif(tmp !== 0) throw 'Unrecognized SizeExtra: ' + tmp;\\n\\n\\to.AlgID = blob.read_shift(4);\\n\\tswitch(o.AlgID) {\\n\\t\\tcase 0: case 0x6801: case 0x660E: case 0x660F: case 0x6610: break;\\n\\t\\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\\n\\t}\\n\\tparsenoop(blob, length-12);\\n\\treturn o;\\n}\\n\\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\\nfunction parse_EncryptionVerifier(blob, length) {\\n\\treturn parsenoop(blob, length);\\n}\\n/* [MS-OFFCRYPTO] 2.3.5.1 RC4 CryptoAPI Encryption Header */\\nfunction parse_RC4CryptoHeader(blob, length) {\\n\\tvar o = {};\\n\\tvar vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4;\\n\\tif(vers.Minor != 2) throw 'unrecognized minor version code: ' + vers.Minor;\\n\\tif(vers.Major > 4 || vers.Major < 2) throw 'unrecognized major version code: ' + vers.Major;\\n\\to.Flags = blob.read_shift(4); length -= 4;\\n\\tvar sz = blob.read_shift(4); length -= 4;\\n\\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\\n\\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\\n\\treturn o;\\n}\\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\\nfunction parse_RC4Header(blob, length) {\\n\\tvar o = {};\\n\\tvar vers = o.EncryptionVersionInfo = parse_Version(blob, 4); length -= 4;\\n\\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\\n\\to.Salt = blob.read_shift(16);\\n\\to.EncryptedVerifier = blob.read_shift(16);\\n\\to.EncryptedVerifierHash = blob.read_shift(16);\\n\\treturn o;\\n}\\n\\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\\nfunction crypto_CreatePasswordVerifier_Method1(Password) {\\n\\tvar Verifier = 0x0000, PasswordArray;\\n\\tvar PasswordDecoded = _JS2ANSI(Password);\\n\\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\\n\\tvar Intermediate1, Intermediate2, Intermediate3;\\n\\tPasswordArray = new_raw_buf(len);\\n\\tPasswordArray[0] = PasswordDecoded.length;\\n\\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\\n\\tfor(i = len-1; i >= 0; --i) {\\n\\t\\tPasswordByte = PasswordArray[i];\\n\\t\\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\\n\\t\\tIntermediate2 = (Verifier << 1) & 0x7FFF;\\n\\t\\tIntermediate3 = Intermediate1 | Intermediate2;\\n\\t\\tVerifier = Intermediate3 ^ PasswordByte;\\n\\t}\\n\\treturn Verifier ^ 0xCE4B;\\n}\\n\\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\\nvar crypto_CreateXorArray_Method1 = (function() {\\n\\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\\n\\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\\n\\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\\n\\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\\n\\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\\n\\tvar CreateXorKey_Method1 = function(Password) {\\n\\t\\tvar XorKey = InitialCode[Password.length - 1];\\n\\t\\tvar CurrentElement = 0x68;\\n\\t\\tfor(var i = Password.length-1; i >= 0; --i) {\\n\\t\\t\\tvar Char = Password[i];\\n\\t\\t\\tfor(var j = 0; j != 7; ++j) {\\n\\t\\t\\t\\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\\n\\t\\t\\t\\tChar *= 2; --CurrentElement;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn XorKey;\\n\\t};\\n\\treturn function(password) {\\n\\t\\tvar Password = _JS2ANSI(password);\\n\\t\\tvar XorKey = CreateXorKey_Method1(Password);\\n\\t\\tvar Index = Password.length;\\n\\t\\tvar ObfuscationArray = new_raw_buf(16);\\n\\t\\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\\n\\t\\tvar Temp, PasswordLastChar, PadIndex;\\n\\t\\tif((Index & 1) === 1) {\\n\\t\\t\\tTemp = XorKey >> 8;\\n\\t\\t\\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\\n\\t\\t\\t--Index;\\n\\t\\t\\tTemp = XorKey & 0xFF;\\n\\t\\t\\tPasswordLastChar = Password[Password.length - 1];\\n\\t\\t\\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\\n\\t\\t}\\n\\t\\twhile(Index > 0) {\\n\\t\\t\\t--Index;\\n\\t\\t\\tTemp = XorKey >> 8;\\n\\t\\t\\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\\n\\t\\t\\t--Index;\\n\\t\\t\\tTemp = XorKey & 0xFF;\\n\\t\\t\\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\\n\\t\\t}\\n\\t\\tIndex = 15;\\n\\t\\tPadIndex = 15 - Password.length;\\n\\t\\twhile(PadIndex > 0) {\\n\\t\\t\\tTemp = XorKey >> 8;\\n\\t\\t\\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\\n\\t\\t\\t--Index;\\n\\t\\t\\t--PadIndex;\\n\\t\\t\\tTemp = XorKey & 0xFF;\\n\\t\\t\\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\\n\\t\\t\\t--Index;\\n\\t\\t\\t--PadIndex;\\n\\t\\t}\\n\\t\\treturn ObfuscationArray;\\n\\t};\\n})();\\n\\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\\nvar crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) {\\n\\t/* If XorArray is set, use it; if O is not set, make changes in-place */\\n\\tif(!O) O = Data;\\n\\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\\n\\tvar Index, Value;\\n\\tfor(Index = 0; Index != Data.length; ++Index) {\\n\\t\\tValue = Data[Index];\\n\\t\\tValue ^= XorArray[XorArrayIndex];\\n\\t\\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\\n\\t\\tO[Index] = Value;\\n\\t\\t++XorArrayIndex;\\n\\t}\\n\\treturn [O, XorArrayIndex, XorArray];\\n};\\n\\nvar crypto_MakeXorDecryptor = function(password) {\\n\\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\\n\\treturn function(Data) {\\n\\t\\tvar O = crypto_DecryptData_Method1(null, Data, XorArrayIndex, XorArray);\\n\\t\\tXorArrayIndex = O[1];\\n\\t\\treturn O[0];\\n\\t};\\n};\\n\\n/* 2.5.343 */\\nfunction parse_XORObfuscation(blob, length, opts, out) {\\n\\tvar o = { key: parseuint16(blob), verificationBytes: parseuint16(blob) };\\n\\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\\n\\tout.valid = o.verificationBytes === o.verifier;\\n\\tif(out.valid) out.insitu_decrypt = crypto_MakeXorDecryptor(opts.password);\\n\\treturn o;\\n}\\n\\n/* 2.4.117 */\\nfunction parse_FilePassHeader(blob, length, oo) {\\n\\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\\n\\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\\n\\telse o.Data = parse_RC4CryptoHeader(blob, length);\\n\\treturn o;\\n}\\nfunction parse_FilePass(blob, length, opts) {\\n\\tvar o = { Type: blob.read_shift(2) }; /* wEncryptionType */\\n\\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\\n\\telse parse_XORObfuscation(blob, length-2, opts, o);\\n\\treturn o;\\n}\\n\\n\\nfunction hex2RGB(h) {\\n\\tvar o = h.substr(h[0]===\\\"#\\\"?1:0,6);\\n\\treturn [parseInt(o.substr(0,2),16),parseInt(o.substr(0,2),16),parseInt(o.substr(0,2),16)];\\n}\\nfunction rgb2Hex(rgb) {\\n\\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\\n\\treturn o.toString(16).toUpperCase().substr(1);\\n}\\n\\nfunction rgb2HSL(rgb) {\\n\\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\\n\\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\\n\\tif(C === 0) return [0, 0, R];\\n\\n\\tvar H6 = 0, S = 0, L2 = (M + m);\\n\\tS = C / (L2 > 1 ? 2 - L2 : L2);\\n\\tswitch(M){\\n\\t\\tcase R: H6 = ((G - B) / C + 6)%6; break;\\n\\t\\tcase G: H6 = ((B - R) / C + 2); break;\\n\\t\\tcase B: H6 = ((R - G) / C + 4); break;\\n\\t}\\n\\treturn [H6 / 6, S, L2 / 2];\\n}\\n\\nfunction hsl2RGB(hsl){\\n\\tvar H = hsl[0], S = hsl[1], L = hsl[2];\\n\\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\\n\\tvar rgb = [m,m,m], h6 = 6*H;\\n\\n\\tvar X;\\n\\tif(S !== 0) switch(h6|0) {\\n\\t\\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\\n\\t\\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\\n\\t\\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\\n\\t\\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\\n\\t\\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\\n\\t\\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\\n\\t}\\n\\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\\n\\treturn rgb;\\n}\\n\\n/* 18.8.3 bgColor tint algorithm */\\nfunction rgb_tint(hex, tint) {\\n\\tif(tint === 0) return hex;\\n\\tvar hsl = rgb2HSL(hex2RGB(hex));\\n\\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\\n\\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\\n\\treturn rgb2Hex(hsl2RGB(hsl));\\n}\\n\\n/* 18.3.1.13 width calculations */\\nvar DEF_MDW = 7, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\\nfunction width2px(width) { return (( width + ((128/MDW)|0)/256 )* MDW )|0; }\\nfunction px2char(px) { return (((px - 5)/MDW * 100 + 0.5)|0)/100; }\\nfunction char2width(chr) { return (((chr * MDW + 5)/MDW*256)|0)/256; }\\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\\nfunction find_mdw(collw, coll) {\\n\\tif(cycle_width(collw) != collw) {\\n\\t\\tfor(MDW=DEF_MDW; MDW>MIN_MDW; --MDW) if(cycle_width(collw) === collw) break;\\n\\t\\tif(MDW === MIN_MDW) for(MDW=DEF_MDW+1; MDW<MAX_MDW; ++MDW) if(cycle_width(collw) === collw) break;\\n\\t\\tif(MDW === MAX_MDW) MDW = DEF_MDW;\\n\\t}\\n}\\n\\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\\nvar XLMLPatternTypeMap = {\\n\\t\\\"None\\\": \\\"none\\\",\\n\\t\\\"Solid\\\": \\\"solid\\\",\\n\\t\\\"Gray50\\\": \\\"mediumGray\\\",\\n\\t\\\"Gray75\\\": \\\"darkGray\\\",\\n\\t\\\"Gray25\\\": \\\"lightGray\\\",\\n\\t\\\"HorzStripe\\\": \\\"darkHorizontal\\\",\\n\\t\\\"VertStripe\\\": \\\"darkVertical\\\",\\n\\t\\\"ReverseDiagStripe\\\": \\\"darkDown\\\",\\n\\t\\\"DiagStripe\\\": \\\"darkUp\\\",\\n\\t\\\"DiagCross\\\": \\\"darkGrid\\\",\\n\\t\\\"ThickDiagCross\\\": \\\"darkTrellis\\\",\\n\\t\\\"ThinHorzStripe\\\": \\\"lightHorizontal\\\",\\n\\t\\\"ThinVertStripe\\\": \\\"lightVertical\\\",\\n\\t\\\"ThinReverseDiagStripe\\\": \\\"lightDown\\\",\\n\\t\\\"ThinHorzCross\\\": \\\"lightGrid\\\"\\n};\\n\\nvar styles = {}; // shared styles\\n\\nvar themes = {}; // shared themes\\n\\n/* 18.8.21 fills CT_Fills */\\nfunction parse_fills(t, opts) {\\n\\tstyles.Fills = [];\\n\\tvar fill = {};\\n\\tt[0].match(tagregex).forEach(function(x) {\\n\\t\\tvar y = parsexmltag(x);\\n\\t\\tswitch(y[0]) {\\n\\t\\t\\tcase '<fills': case '<fills>': case '</fills>': break;\\n\\n\\t\\t\\t/* 18.8.20 fill CT_Fill */\\n\\t\\t\\tcase '<fill>': break;\\n\\t\\t\\tcase '</fill>': styles.Fills.push(fill); fill = {}; break;\\n\\n\\t\\t\\t/* 18.8.32 patternFill CT_PatternFill */\\n\\t\\t\\tcase '<patternFill':\\n\\t\\t\\t\\tif(y.patternType) fill.patternType = y.patternType;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase '<patternFill/>': case '</patternFill>': break;\\n\\n\\t\\t\\t/* 18.8.3 bgColor CT_Color */\\n\\t\\t\\tcase '<bgColor':\\n\\t\\t\\t\\tif(!fill.bgColor) fill.bgColor = {};\\n\\t\\t\\t\\tif(y.indexed) fill.bgColor.indexed = parseInt(y.indexed, 10);\\n\\t\\t\\t\\tif(y.theme) fill.bgColor.theme = parseInt(y.theme, 10);\\n\\t\\t\\t\\tif(y.tint) fill.bgColor.tint = parseFloat(y.tint);\\n\\t\\t\\t\\t/* Excel uses ARGB strings */\\n\\t\\t\\t\\tif(y.rgb) fill.bgColor.rgb = y.rgb.substring(y.rgb.length - 6);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase '<bgColor/>': case '</bgColor>': break;\\n\\n\\t\\t\\t/* 18.8.19 fgColor CT_Color */\\n\\t\\t\\tcase '<fgColor':\\n\\t\\t\\t\\tif(!fill.fgColor) fill.fgColor = {};\\n\\t\\t\\t\\tif(y.theme) fill.fgColor.theme = parseInt(y.theme, 10);\\n\\t\\t\\t\\tif(y.tint) fill.fgColor.tint = parseFloat(y.tint);\\n\\t\\t\\t\\t/* Excel uses ARGB strings */\\n\\t\\t\\t\\tif(y.rgb) fill.fgColor.rgb = y.rgb.substring(y.rgb.length - 6);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase '<fgColor/>': case '</fgColor>': break;\\n\\n\\t\\t\\tdefault: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in fills';\\n\\t\\t}\\n\\t});\\n}\\n\\n/* 18.8.31 numFmts CT_NumFmts */\\nfunction parse_numFmts(t, opts) {\\n\\tstyles.NumberFmt = [];\\n\\tvar k = keys(SSF._table);\\n\\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];\\n\\tvar m = t[0].match(tagregex);\\n\\tfor(i=0; i < m.length; ++i) {\\n\\t\\tvar y = parsexmltag(m[i]);\\n\\t\\tswitch(y[0]) {\\n\\t\\t\\tcase '<numFmts': case '</numFmts>': case '<numFmts/>': case '<numFmts>': break;\\n\\t\\t\\tcase '<numFmt': {\\n\\t\\t\\t\\tvar f=unescapexml(utf8read(y.formatCode)), j=parseInt(y.numFmtId,10);\\n\\t\\t\\t\\tstyles.NumberFmt[j] = f; if(j>0) SSF.load(f,j);\\n\\t\\t\\t} break;\\n\\t\\t\\tdefault: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in numFmts';\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction write_numFmts(NF, opts) {\\n\\tvar o = [\\\"<numFmts>\\\"];\\n\\t[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r) {\\n\\t\\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] !== undefined) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\\n\\t});\\n\\tif(o.length === 1) return \\\"\\\";\\n\\to[o.length] = (\\\"</numFmts>\\\");\\n\\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\\\"/>\\\", \\\">\\\");\\n\\treturn o.join(\\\"\\\");\\n}\\n\\n/* 18.8.10 cellXfs CT_CellXfs */\\nfunction parse_cellXfs(t, opts) {\\n\\tstyles.CellXf = [];\\n\\tt[0].match(tagregex).forEach(function(x) {\\n\\t\\tvar y = parsexmltag(x);\\n\\t\\tswitch(y[0]) {\\n\\t\\t\\tcase '<cellXfs': case '<cellXfs>': case '<cellXfs/>': case '</cellXfs>': break;\\n\\n\\t\\t\\t/* 18.8.45 xf CT_Xf */\\n\\t\\t\\tcase '<xf': delete y[0];\\n\\t\\t\\t\\tif(y.numFmtId) y.numFmtId = parseInt(y.numFmtId, 10);\\n\\t\\t\\t\\tif(y.fillId) y.fillId = parseInt(y.fillId, 10);\\n\\t\\t\\t\\tstyles.CellXf.push(y); break;\\n\\t\\t\\tcase '</xf>': break;\\n\\n\\t\\t\\t/* 18.8.1 alignment CT_CellAlignment */\\n\\t\\t\\tcase '<alignment': case '<alignment/>': break;\\n\\n\\t\\t\\t/* 18.8.33 protection CT_CellProtection */\\n\\t\\t\\tcase '<protection': case '</protection>': case '<protection/>': break;\\n\\n\\t\\t\\tcase '<extLst': case '</extLst>': break;\\n\\t\\t\\tcase '<ext': break;\\n\\t\\t\\tdefault: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in cellXfs';\\n\\t\\t}\\n\\t});\\n}\\n\\nfunction write_cellXfs(cellXfs) {\\n\\tvar o = [];\\n\\to[o.length] = (writextag('cellXfs',null));\\n\\tcellXfs.forEach(function(c) { o[o.length] = (writextag('xf', null, c)); });\\n\\to[o.length] = (\\\"</cellXfs>\\\");\\n\\tif(o.length === 2) return \\\"\\\";\\n\\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\\\"/>\\\",\\\">\\\");\\n\\treturn o.join(\\\"\\\");\\n}\\n\\n/* 18.8 Styles CT_Stylesheet*/\\nvar parse_sty_xml= (function make_pstyx() {\\nvar numFmtRegex = /<numFmts([^>]*)>.*<\\\\/numFmts>/;\\nvar cellXfRegex = /<cellXfs([^>]*)>.*<\\\\/cellXfs>/;\\nvar fillsRegex = /<fills([^>]*)>.*<\\\\/fills>/;\\n\\nreturn function parse_sty_xml(data, opts) {\\n\\t/* 18.8.39 styleSheet CT_Stylesheet */\\n\\tvar t;\\n\\n\\t/* numFmts CT_NumFmts ? */\\n\\tif((t=data.match(numFmtRegex))) parse_numFmts(t, opts);\\n\\n\\t/* fonts CT_Fonts ? */\\n\\t/*if((t=data.match(/<fonts([^>]*)>.*<\\\\/fonts>/))) parse_fonts(t, opts);*/\\n\\n\\t/* fills CT_Fills */\\n\\tif((t=data.match(fillsRegex))) parse_fills(t, opts);\\n\\n\\t/* borders CT_Borders ? */\\n\\t/* cellStyleXfs CT_CellStyleXfs ? */\\n\\n\\t/* cellXfs CT_CellXfs ? */\\n\\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, opts);\\n\\n\\t/* dxfs CT_Dxfs ? */\\n\\t/* tableStyles CT_TableStyles ? */\\n\\t/* colors CT_Colors ? */\\n\\t/* extLst CT_ExtensionList ? */\\n\\n\\treturn styles;\\n};\\n})();\\n\\nvar STYLES_XML_ROOT = writextag('styleSheet', null, {\\n\\t'xmlns': XMLNS.main[0],\\n\\t'xmlns:vt': XMLNS.vt\\n});\\n\\nRELS.STY = \\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\\\";\\n\\nfunction write_sty_xml(wb, opts) {\\n\\tvar o = [XML_HEADER, STYLES_XML_ROOT], w;\\n\\tif((w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\\n\\to[o.length] = ('<fonts count=\\\"1\\\"><font><sz val=\\\"12\\\"/><color theme=\\\"1\\\"/><name val=\\\"Calibri\\\"/><family val=\\\"2\\\"/><scheme val=\\\"minor\\\"/></font></fonts>');\\n\\to[o.length] = ('<fills count=\\\"2\\\"><fill><patternFill patternType=\\\"none\\\"/></fill><fill><patternFill patternType=\\\"gray125\\\"/></fill></fills>');\\n\\to[o.length] = ('<borders count=\\\"1\\\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>');\\n\\to[o.length] = ('<cellStyleXfs count=\\\"1\\\"><xf numFmtId=\\\"0\\\" fontId=\\\"0\\\" fillId=\\\"0\\\" borderId=\\\"0\\\"/></cellStyleXfs>');\\n\\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\\n\\to[o.length] = ('<cellStyles count=\\\"1\\\"><cellStyle name=\\\"Normal\\\" xfId=\\\"0\\\" builtinId=\\\"0\\\"/></cellStyles>');\\n\\to[o.length] = ('<dxfs count=\\\"0\\\"/>');\\n\\to[o.length] = ('<tableStyles count=\\\"0\\\" defaultTableStyle=\\\"TableStyleMedium9\\\" defaultPivotStyle=\\\"PivotStyleMedium4\\\"/>');\\n\\n\\tif(o.length>2){ o[o.length] = ('</styleSheet>'); o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\n/* [MS-XLSB] 2.4.651 BrtFmt */\\nfunction parse_BrtFmt(data, length) {\\n\\tvar ifmt = data.read_shift(2);\\n\\tvar stFmtCode = parse_XLWideString(data,length-2);\\n\\treturn [ifmt, stFmtCode];\\n}\\n\\n/* [MS-XLSB] 2.4.653 BrtFont TODO */\\nfunction parse_BrtFont(data, length) {\\n\\tvar out = {flags:{}};\\n\\tout.dyHeight = data.read_shift(2);\\n\\tout.grbit = parse_FontFlags(data, 2);\\n\\tout.bls = data.read_shift(2);\\n\\tout.sss = data.read_shift(2);\\n\\tout.uls = data.read_shift(1);\\n\\tout.bFamily = data.read_shift(1);\\n\\tout.bCharSet = data.read_shift(1);\\n\\tdata.l++;\\n\\tout.brtColor = parse_BrtColor(data, 8);\\n\\tout.bFontScheme = data.read_shift(1);\\n\\tout.name = parse_XLWideString(data, length - 21);\\n\\n\\tout.flags.Bold = out.bls === 0x02BC;\\n\\tout.flags.Italic = out.grbit.fItalic;\\n\\tout.flags.Strikeout = out.grbit.fStrikeout;\\n\\tout.flags.Outline = out.grbit.fOutline;\\n\\tout.flags.Shadow = out.grbit.fShadow;\\n\\tout.flags.Condense = out.grbit.fCondense;\\n\\tout.flags.Extend = out.grbit.fExtend;\\n\\tout.flags.Sub = out.sss & 0x2;\\n\\tout.flags.Sup = out.sss & 0x1;\\n\\treturn out;\\n}\\n\\n/* [MS-XLSB] 2.4.816 BrtXF */\\nfunction parse_BrtXF(data, length) {\\n\\tvar ixfeParent = data.read_shift(2);\\n\\tvar ifmt = data.read_shift(2);\\n\\tparsenoop(data, length-4);\\n\\treturn {ixfe:ixfeParent, ifmt:ifmt };\\n}\\n\\n/* [MS-XLSB] 2.1.7.50 Styles */\\nfunction parse_sty_bin(data, opts) {\\n\\tstyles.NumberFmt = [];\\n\\tfor(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];\\n\\n\\tstyles.CellXf = [];\\n\\tvar state = \\\"\\\"; /* TODO: this should be a stack */\\n\\tvar pass = false;\\n\\trecordhopper(data, function hopper_sty(val, R, RT) {\\n\\t\\tswitch(R.n) {\\n\\t\\t\\tcase 'BrtFmt':\\n\\t\\t\\t\\tstyles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase 'BrtFont': break; /* TODO */\\n\\t\\t\\tcase 'BrtKnownFonts': break; /* TODO */\\n\\t\\t\\tcase 'BrtFill': break; /* TODO */\\n\\t\\t\\tcase 'BrtBorder': break; /* TODO */\\n\\t\\t\\tcase 'BrtXF':\\n\\t\\t\\t\\tif(state === \\\"CELLXFS\\\") {\\n\\t\\t\\t\\t\\tstyles.CellXf.push(val);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak; /* TODO */\\n\\t\\t\\tcase 'BrtStyle': break; /* TODO */\\n\\t\\t\\tcase 'BrtDXF': break; /* TODO */\\n\\t\\t\\tcase 'BrtMRUColor': break; /* TODO */\\n\\t\\t\\tcase 'BrtIndexedColor': break; /* TODO */\\n\\t\\t\\tcase 'BrtBeginStyleSheet': break;\\n\\t\\t\\tcase 'BrtEndStyleSheet': break;\\n\\t\\t\\tcase 'BrtBeginTableStyle': break;\\n\\t\\t\\tcase 'BrtTableStyleElement': break;\\n\\t\\t\\tcase 'BrtEndTableStyle': break;\\n\\t\\t\\tcase 'BrtBeginFmts': state = \\\"FMTS\\\"; break;\\n\\t\\t\\tcase 'BrtEndFmts': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginFonts': state = \\\"FONTS\\\"; break;\\n\\t\\t\\tcase 'BrtEndFonts': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtACBegin': state = \\\"ACFONTS\\\"; break;\\n\\t\\t\\tcase 'BrtACEnd': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginFills': state = \\\"FILLS\\\"; break;\\n\\t\\t\\tcase 'BrtEndFills': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginBorders': state = \\\"BORDERS\\\"; break;\\n\\t\\t\\tcase 'BrtEndBorders': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginCellStyleXFs': state = \\\"CELLSTYLEXFS\\\"; break;\\n\\t\\t\\tcase 'BrtEndCellStyleXFs': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginCellXFs': state = \\\"CELLXFS\\\"; break;\\n\\t\\t\\tcase 'BrtEndCellXFs': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginStyles': state = \\\"STYLES\\\"; break;\\n\\t\\t\\tcase 'BrtEndStyles': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginDXFs': state = \\\"DXFS\\\"; break;\\n\\t\\t\\tcase 'BrtEndDXFs': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginTableStyles': state = \\\"TABLESTYLES\\\"; break;\\n\\t\\t\\tcase 'BrtEndTableStyles': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginColorPalette': state = \\\"COLORPALETTE\\\"; break;\\n\\t\\t\\tcase 'BrtEndColorPalette': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginIndexedColors': state = \\\"INDEXEDCOLORS\\\"; break;\\n\\t\\t\\tcase 'BrtEndIndexedColors': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtBeginMRUColors': state = \\\"MRUCOLORS\\\"; break;\\n\\t\\t\\tcase 'BrtEndMRUColors': state = \\\"\\\"; break;\\n\\t\\t\\tcase 'BrtFRTBegin': pass = true; break;\\n\\t\\t\\tcase 'BrtFRTEnd': pass = false; break;\\n\\t\\t\\tcase 'BrtBeginStyleSheetExt14': break;\\n\\t\\t\\tcase 'BrtBeginSlicerStyles': break;\\n\\t\\t\\tcase 'BrtEndSlicerStyles': break;\\n\\t\\t\\tcase 'BrtBeginTimelineStylesheetExt15': break;\\n\\t\\t\\tcase 'BrtEndTimelineStylesheetExt15': break;\\n\\t\\t\\tcase 'BrtBeginTimelineStyles': break;\\n\\t\\t\\tcase 'BrtEndTimelineStyles': break;\\n\\t\\t\\tcase 'BrtEndStyleSheetExt14': break;\\n\\t\\t\\tdefault: if(!pass || opts.WTF) throw new Error(\\\"Unexpected record \\\" + RT + \\\" \\\" + R.n);\\n\\t\\t}\\n\\t});\\n\\treturn styles;\\n}\\n\\n/* [MS-XLSB] 2.1.7.50 Styles */\\nfunction write_sty_bin(data, opts) {\\n\\tvar ba = buf_array();\\n\\twrite_record(ba, \\\"BrtBeginStyleSheet\\\");\\n\\t/* [FMTS] */\\n\\t/* [FONTS] */\\n\\t/* [FILLS] */\\n\\t/* [BORDERS] */\\n\\t/* CELLSTYLEXFS */\\n\\t/* CELLXFS*/\\n\\t/* STYLES */\\n\\t/* DXFS */\\n\\t/* TABLESTYLES */\\n\\t/* [COLORPALETTE] */\\n\\t/* FRTSTYLESHEET*/\\n\\twrite_record(ba, \\\"BrtEndStyleSheet\\\");\\n\\treturn ba.end();\\n}\\nRELS.THEME = \\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\\\";\\n\\n/* 20.1.6.2 clrScheme CT_ColorScheme */\\nfunction parse_clrScheme(t, opts) {\\n\\tthemes.themeElements.clrScheme = [];\\n\\tvar color = {};\\n\\tt[0].match(tagregex).forEach(function(x) {\\n\\t\\tvar y = parsexmltag(x);\\n\\t\\tswitch(y[0]) {\\n\\t\\t\\tcase '<a:clrScheme': case '</a:clrScheme>': break;\\n\\n\\t\\t\\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\\n\\t\\t\\tcase '<a:srgbClr': color.rgb = y.val; break;\\n\\n\\t\\t\\t/* 20.1.2.3.33 sysClr CT_SystemColor */\\n\\t\\t\\tcase '<a:sysClr': color.rgb = y.lastClr; break;\\n\\n\\t\\t\\t/* 20.1.4.1.9 dk1 (Dark 1) */\\n\\t\\t\\tcase '<a:dk1>':\\n\\t\\t\\tcase '</a:dk1>':\\n\\t\\t\\t/* 20.1.4.1.10 dk2 (Dark 2) */\\n\\t\\t\\tcase '<a:dk2>':\\n\\t\\t\\tcase '</a:dk2>':\\n\\t\\t\\t/* 20.1.4.1.22 lt1 (Light 1) */\\n\\t\\t\\tcase '<a:lt1>':\\n\\t\\t\\tcase '</a:lt1>':\\n\\t\\t\\t/* 20.1.4.1.23 lt2 (Light 2) */\\n\\t\\t\\tcase '<a:lt2>':\\n\\t\\t\\tcase '</a:lt2>':\\n\\t\\t\\t/* 20.1.4.1.1 accent1 (Accent 1) */\\n\\t\\t\\tcase '<a:accent1>':\\n\\t\\t\\tcase '</a:accent1>':\\n\\t\\t\\t/* 20.1.4.1.2 accent2 (Accent 2) */\\n\\t\\t\\tcase '<a:accent2>':\\n\\t\\t\\tcase '</a:accent2>':\\n\\t\\t\\t/* 20.1.4.1.3 accent3 (Accent 3) */\\n\\t\\t\\tcase '<a:accent3>':\\n\\t\\t\\tcase '</a:accent3>':\\n\\t\\t\\t/* 20.1.4.1.4 accent4 (Accent 4) */\\n\\t\\t\\tcase '<a:accent4>':\\n\\t\\t\\tcase '</a:accent4>':\\n\\t\\t\\t/* 20.1.4.1.5 accent5 (Accent 5) */\\n\\t\\t\\tcase '<a:accent5>':\\n\\t\\t\\tcase '</a:accent5>':\\n\\t\\t\\t/* 20.1.4.1.6 accent6 (Accent 6) */\\n\\t\\t\\tcase '<a:accent6>':\\n\\t\\t\\tcase '</a:accent6>':\\n\\t\\t\\t/* 20.1.4.1.19 hlink (Hyperlink) */\\n\\t\\t\\tcase '<a:hlink>':\\n\\t\\t\\tcase '</a:hlink>':\\n\\t\\t\\t/* 20.1.4.1.15 folHlink (Followed Hyperlink) */\\n\\t\\t\\tcase '<a:folHlink>':\\n\\t\\t\\tcase '</a:folHlink>':\\n\\t\\t\\t\\tif (y[0][1] === '/') {\\n\\t\\t\\t\\t\\tthemes.themeElements.clrScheme.push(color);\\n\\t\\t\\t\\t\\tcolor = {};\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tcolor.name = y[0].substring(3, y[0].length - 1);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\tdefault: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in clrScheme';\\n\\t\\t}\\n\\t});\\n}\\n\\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\\nfunction parse_fontScheme(t, opts) { }\\n\\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\\nfunction parse_fmtScheme(t, opts) { }\\n\\nvar clrsregex = /<a:clrScheme([^>]*)>[^\\\\u2603]*<\\\\/a:clrScheme>/;\\nvar fntsregex = /<a:fontScheme([^>]*)>[^\\\\u2603]*<\\\\/a:fontScheme>/;\\nvar fmtsregex = /<a:fmtScheme([^>]*)>[^\\\\u2603]*<\\\\/a:fmtScheme>/;\\n\\n/* 20.1.6.10 themeElements CT_BaseStyles */\\nfunction parse_themeElements(data, opts) {\\n\\tthemes.themeElements = {};\\n\\n\\tvar t;\\n\\n\\t[\\n\\t\\t/* clrScheme CT_ColorScheme */\\n\\t\\t['clrScheme', clrsregex, parse_clrScheme],\\n\\t\\t/* fontScheme CT_FontScheme */\\n\\t\\t['fontScheme', fntsregex, parse_fontScheme],\\n\\t\\t/* fmtScheme CT_StyleMatrix */\\n\\t\\t['fmtScheme', fmtsregex, parse_fmtScheme]\\n\\t].forEach(function(m) {\\n\\t\\tif(!(t=data.match(m[1]))) throw m[0] + ' not found in themeElements';\\n\\t\\tm[2](t, opts);\\n\\t});\\n}\\n\\nvar themeltregex = /<a:themeElements([^>]*)>[^\\\\u2603]*<\\\\/a:themeElements>/;\\n\\n/* 14.2.7 Theme Part */\\nfunction parse_theme_xml(data, opts) {\\n\\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\\n\\tif(!data || data.length === 0) return themes;\\n\\n\\tvar t;\\n\\n\\t/* themeElements CT_BaseStyles */\\n\\tif(!(t=data.match(themeltregex))) throw 'themeElements not found in theme';\\n\\tparse_themeElements(t[0], opts);\\n\\n\\treturn themes;\\n}\\n\\nfunction write_theme() { return '<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"yes\\\"?>\\\\n<a:theme xmlns:a=\\\"http://schemas.openxmlformats.org/drawingml/2006/main\\\" name=\\\"Office Theme\\\"><a:themeElements><a:clrScheme name=\\\"Office\\\"><a:dk1><a:sysClr val=\\\"windowText\\\" lastClr=\\\"000000\\\"/></a:dk1><a:lt1><a:sysClr val=\\\"window\\\" lastClr=\\\"FFFFFF\\\"/></a:lt1><a:dk2><a:srgbClr val=\\\"1F497D\\\"/></a:dk2><a:lt2><a:srgbClr val=\\\"EEECE1\\\"/></a:lt2><a:accent1><a:srgbClr val=\\\"4F81BD\\\"/></a:accent1><a:accent2><a:srgbClr val=\\\"C0504D\\\"/></a:accent2><a:accent3><a:srgbClr val=\\\"9BBB59\\\"/></a:accent3><a:accent4><a:srgbClr val=\\\"8064A2\\\"/></a:accent4><a:accent5><a:srgbClr val=\\\"4BACC6\\\"/></a:accent5><a:accent6><a:srgbClr val=\\\"F79646\\\"/></a:accent6><a:hlink><a:srgbClr val=\\\"0000FF\\\"/></a:hlink><a:folHlink><a:srgbClr val=\\\"800080\\\"/></a:folHlink></a:clrScheme><a:fontScheme name=\\\"Office\\\"><a:majorFont><a:latin typeface=\\\"Cambria\\\"/><a:ea typeface=\\\"\\\"/><a:cs typeface=\\\"\\\"/><a:font script=\\\"Jpan\\\" typeface=\\\"MS Pゴシック\\\"/><a:font script=\\\"Hang\\\" typeface=\\\"맑은 고딕\\\"/><a:font script=\\\"Hans\\\" typeface=\\\"宋体\\\"/><a:font script=\\\"Hant\\\" typeface=\\\"新細明體\\\"/><a:font script=\\\"Arab\\\" typeface=\\\"Times New Roman\\\"/><a:font script=\\\"Hebr\\\" typeface=\\\"Times New Roman\\\"/><a:font script=\\\"Thai\\\" typeface=\\\"Tahoma\\\"/><a:font script=\\\"Ethi\\\" typeface=\\\"Nyala\\\"/><a:font script=\\\"Beng\\\" typeface=\\\"Vrinda\\\"/><a:font script=\\\"Gujr\\\" typeface=\\\"Shruti\\\"/><a:font script=\\\"Khmr\\\" typeface=\\\"MoolBoran\\\"/><a:font script=\\\"Knda\\\" typeface=\\\"Tunga\\\"/><a:font script=\\\"Guru\\\" typeface=\\\"Raavi\\\"/><a:font script=\\\"Cans\\\" typeface=\\\"Euphemia\\\"/><a:font script=\\\"Cher\\\" typeface=\\\"Plantagenet Cherokee\\\"/><a:font script=\\\"Yiii\\\" typeface=\\\"Microsoft Yi Baiti\\\"/><a:font script=\\\"Tibt\\\" typeface=\\\"Microsoft Himalaya\\\"/><a:font script=\\\"Thaa\\\" typeface=\\\"MV Boli\\\"/><a:font script=\\\"Deva\\\" typeface=\\\"Mangal\\\"/><a:font script=\\\"Telu\\\" typeface=\\\"Gautami\\\"/><a:font script=\\\"Taml\\\" typeface=\\\"Latha\\\"/><a:font script=\\\"Syrc\\\" typeface=\\\"Estrangelo Edessa\\\"/><a:font script=\\\"Orya\\\" typeface=\\\"Kalinga\\\"/><a:font script=\\\"Mlym\\\" typeface=\\\"Kartika\\\"/><a:font script=\\\"Laoo\\\" typeface=\\\"DokChampa\\\"/><a:font script=\\\"Sinh\\\" typeface=\\\"Iskoola Pota\\\"/><a:font script=\\\"Mong\\\" typeface=\\\"Mongolian Baiti\\\"/><a:font script=\\\"Viet\\\" typeface=\\\"Times New Roman\\\"/><a:font script=\\\"Uigh\\\" typeface=\\\"Microsoft Uighur\\\"/><a:font script=\\\"Geor\\\" typeface=\\\"Sylfaen\\\"/></a:majorFont><a:minorFont><a:latin typeface=\\\"Calibri\\\"/><a:ea typeface=\\\"\\\"/><a:cs typeface=\\\"\\\"/><a:font script=\\\"Jpan\\\" typeface=\\\"MS Pゴシック\\\"/><a:font script=\\\"Hang\\\" typeface=\\\"맑은 고딕\\\"/><a:font script=\\\"Hans\\\" typeface=\\\"宋体\\\"/><a:font script=\\\"Hant\\\" typeface=\\\"新細明體\\\"/><a:font script=\\\"Arab\\\" typeface=\\\"Arial\\\"/><a:font script=\\\"Hebr\\\" typeface=\\\"Arial\\\"/><a:font script=\\\"Thai\\\" typeface=\\\"Tahoma\\\"/><a:font script=\\\"Ethi\\\" typeface=\\\"Nyala\\\"/><a:font script=\\\"Beng\\\" typeface=\\\"Vrinda\\\"/><a:font script=\\\"Gujr\\\" typeface=\\\"Shruti\\\"/><a:font script=\\\"Khmr\\\" typeface=\\\"DaunPenh\\\"/><a:font script=\\\"Knda\\\" typeface=\\\"Tunga\\\"/><a:font script=\\\"Guru\\\" typeface=\\\"Raavi\\\"/><a:font script=\\\"Cans\\\" typeface=\\\"Euphemia\\\"/><a:font script=\\\"Cher\\\" typeface=\\\"Plantagenet Cherokee\\\"/><a:font script=\\\"Yiii\\\" typeface=\\\"Microsoft Yi Baiti\\\"/><a:font script=\\\"Tibt\\\" typeface=\\\"Microsoft Himalaya\\\"/><a:font script=\\\"Thaa\\\" typeface=\\\"MV Boli\\\"/><a:font script=\\\"Deva\\\" typeface=\\\"Mangal\\\"/><a:font script=\\\"Telu\\\" typeface=\\\"Gautami\\\"/><a:font script=\\\"Taml\\\" typeface=\\\"Latha\\\"/><a:font script=\\\"Syrc\\\" typeface=\\\"Estrangelo Edessa\\\"/><a:font script=\\\"Orya\\\" typeface=\\\"Kalinga\\\"/><a:font script=\\\"Mlym\\\" typeface=\\\"Kartika\\\"/><a:font script=\\\"Laoo\\\" typeface=\\\"DokChampa\\\"/><a:font script=\\\"Sinh\\\" typeface=\\\"Iskoola Pota\\\"/><a:font script=\\\"Mong\\\" typeface=\\\"Mongolian Baiti\\\"/><a:font script=\\\"Viet\\\" typeface=\\\"Arial\\\"/><a:font script=\\\"Uigh\\\" typeface=\\\"Microsoft Uighur\\\"/><a:font script=\\\"Geor\\\" typeface=\\\"Sylfaen\\\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\\\"Office\\\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\\\"phClr\\\"/></a:solidFill><a:gradFill rotWithShape=\\\"1\\\"><a:gsLst><a:gs pos=\\\"0\\\"><a:schemeClr val=\\\"phClr\\\"><a:tint val=\\\"50000\\\"/><a:satMod val=\\\"300000\\\"/></a:schemeClr></a:gs><a:gs pos=\\\"35000\\\"><a:schemeClr val=\\\"phClr\\\"><a:tint val=\\\"37000\\\"/><a:satMod val=\\\"300000\\\"/></a:schemeClr></a:gs><a:gs pos=\\\"100000\\\"><a:schemeClr val=\\\"phClr\\\"><a:tint val=\\\"15000\\\"/><a:satMod val=\\\"350000\\\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\\\"16200000\\\" scaled=\\\"1\\\"/></a:gradFill><a:gradFill rotWithShape=\\\"1\\\"><a:gsLst><a:gs pos=\\\"0\\\"><a:schemeClr val=\\\"phClr\\\"><a:tint val=\\\"100000\\\"/><a:shade val=\\\"100000\\\"/><a:satMod val=\\\"130000\\\"/></a:schemeClr></a:gs><a:gs pos=\\\"100000\\\"><a:schemeClr val=\\\"phClr\\\"><a:tint val=\\\"50000\\\"/><a:shade val=\\\"100000\\\"/><a:satMod val=\\\"350000\\\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\\\"16200000\\\" scaled=\\\"0\\\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\\\"9525\\\" cap=\\\"flat\\\" cmpd=\\\"sng\\\" algn=\\\"ctr\\\"><a:solidFill><a:schemeClr val=\\\"phClr\\\"><a:shade val=\\\"95000\\\"/><a:satMod val=\\\"105000\\\"/></a:schemeClr></a:solidFill><a:prstDash val=\\\"solid\\\"/></a:ln><a:ln w=\\\"25400\\\" cap=\\\"flat\\\" cmpd=\\\"sng\\\" algn=\\\"ctr\\\"><a:solidFill><a:schemeClr val=\\\"phClr\\\"/></a:solidFill><a:prstDash val=\\\"solid\\\"/></a:ln><a:ln w=\\\"38100\\\" cap=\\\"flat\\\" cmpd=\\\"sng\\\" algn=\\\"ctr\\\"><a:solidFill><a:schemeClr val=\\\"phClr\\\"/></a:solidFill><a:prstDash val=\\\"solid\\\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad=\\\"40000\\\" dist=\\\"20000\\\" dir=\\\"5400000\\\" rotWithShape=\\\"0\\\"><a:srgbClr val=\\\"000000\\\"><a:alpha val=\\\"38000\\\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\\\"40000\\\" dist=\\\"23000\\\" dir=\\\"5400000\\\" rotWithShape=\\\"0\\\"><a:srgbClr val=\\\"000000\\\"><a:alpha val=\\\"35000\\\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\\\"40000\\\" dist=\\\"23000\\\" dir=\\\"5400000\\\" rotWithShape=\\\"0\\\"><a:srgbClr val=\\\"000000\\\"><a:alpha val=\\\"35000\\\"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst=\\\"orthographicFront\\\"><a:rot lat=\\\"0\\\" lon=\\\"0\\\" rev=\\\"0\\\"/></a:camera><a:lightRig rig=\\\"threePt\\\" dir=\\\"t\\\"><a:rot lat=\\\"0\\\" lon=\\\"0\\\" rev=\\\"1200000\\\"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w=\\\"63500\\\" h=\\\"25400\\\"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\\\"phClr\\\"/></a:solidFill><a:gradFill rotWithShape=\\\"1\\\"><a:gsLst><a:gs pos=\\\"0\\\"><a:schemeClr val=\\\"phClr\\\"><a:tint val=\\\"40000\\\"/><a:satMod val=\\\"350000\\\"/></a:schemeClr></a:gs><a:gs pos=\\\"40000\\\"><a:schemeClr val=\\\"phClr\\\"><a:tint val=\\\"45000\\\"/><a:shade val=\\\"99000\\\"/><a:satMod val=\\\"350000\\\"/></a:schemeClr></a:gs><a:gs pos=\\\"100000\\\"><a:schemeClr val=\\\"phClr\\\"><a:shade val=\\\"20000\\\"/><a:satMod val=\\\"255000\\\"/></a:schemeClr></a:gs></a:gsLst><a:path path=\\\"circle\\\"><a:fillToRect l=\\\"50000\\\" t=\\\"-80000\\\" r=\\\"50000\\\" b=\\\"180000\\\"/></a:path></a:gradFill><a:gradFill rotWithShape=\\\"1\\\"><a:gsLst><a:gs pos=\\\"0\\\"><a:schemeClr val=\\\"phClr\\\"><a:tint val=\\\"80000\\\"/><a:satMod val=\\\"300000\\\"/></a:schemeClr></a:gs><a:gs pos=\\\"100000\\\"><a:schemeClr val=\\\"phClr\\\"><a:shade val=\\\"30000\\\"/><a:satMod val=\\\"200000\\\"/></a:schemeClr></a:gs></a:gsLst><a:path path=\\\"circle\\\"><a:fillToRect l=\\\"50000\\\" t=\\\"50000\\\" r=\\\"50000\\\" b=\\\"50000\\\"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\\\"1\\\"><a:schemeClr val=\\\"accent1\\\"/></a:lnRef><a:fillRef idx=\\\"3\\\"><a:schemeClr val=\\\"accent1\\\"/></a:fillRef><a:effectRef idx=\\\"2\\\"><a:schemeClr val=\\\"accent1\\\"/></a:effectRef><a:fontRef idx=\\\"minor\\\"><a:schemeClr val=\\\"lt1\\\"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\\\"2\\\"><a:schemeClr val=\\\"accent1\\\"/></a:lnRef><a:fillRef idx=\\\"0\\\"><a:schemeClr val=\\\"accent1\\\"/></a:fillRef><a:effectRef idx=\\\"1\\\"><a:schemeClr val=\\\"accent1\\\"/></a:effectRef><a:fontRef idx=\\\"minor\\\"><a:schemeClr val=\\\"tx1\\\"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'; }\\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\\nfunction parse_Theme(blob, length) {\\n\\tvar dwThemeVersion = blob.read_shift(4);\\n\\tif(dwThemeVersion === 124226) return;\\n\\tblob.l += length-4;\\n}\\n\\n/* 2.5.49 */\\nfunction parse_ColorTheme(blob, length) { return blob.read_shift(4); }\\n\\n/* 2.5.155 */\\nfunction parse_FullColorExt(blob, length) {\\n\\tvar o = {};\\n\\to.xclrType = blob.read_shift(2);\\n\\to.nTintShade = blob.read_shift(2);\\n\\tswitch(o.xclrType) {\\n\\t\\tcase 0: blob.l += 4; break;\\n\\t\\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\\n\\t\\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\\n\\t\\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\\n\\t\\tcase 4: blob.l += 4; break;\\n\\t}\\n\\tblob.l += 8;\\n\\treturn o;\\n}\\n\\n/* 2.5.164 TODO: read 7 bits*/\\nfunction parse_IcvXF(blob, length) {\\n\\treturn parsenoop(blob, length);\\n}\\n\\n/* 2.5.280 */\\nfunction parse_XFExtGradient(blob, length) {\\n\\treturn parsenoop(blob, length);\\n}\\n\\n/* 2.5.108 */\\nfunction parse_ExtProp(blob, length) {\\n\\tvar extType = blob.read_shift(2);\\n\\tvar cb = blob.read_shift(2);\\n\\tvar o = [extType];\\n\\tswitch(extType) {\\n\\t\\tcase 0x04: case 0x05: case 0x07: case 0x08:\\n\\t\\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\\n\\t\\t\\to[1] = parse_FullColorExt(blob, cb); break;\\n\\t\\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\\n\\t\\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 5 ? 1 : 2); break;\\n\\t\\tdefault: throw new Error(\\\"Unrecognized ExtProp type: \\\" + extType + \\\" \\\" + cb);\\n\\t}\\n\\treturn o;\\n}\\n\\n/* 2.4.355 */\\nfunction parse_XFExt(blob, length) {\\n\\tvar end = blob.l + length;\\n\\tblob.l += 2;\\n\\tvar ixfe = blob.read_shift(2);\\n\\tblob.l += 2;\\n\\tvar cexts = blob.read_shift(2);\\n\\tvar ext = [];\\n\\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\\n\\treturn {ixfe:ixfe, ext:ext};\\n}\\n\\n/* xf is an XF, see parse_XFExt for xfext */\\nfunction update_xfext(xf, xfext) {\\n\\txfext.forEach(function(xfe) {\\n\\t\\tswitch(xfe[0]) { /* 2.5.108 extPropData */\\n\\t\\t\\tcase 0x04: break; /* foreground color */\\n\\t\\t\\tcase 0x05: break; /* background color */\\n\\t\\t\\tcase 0x07: case 0x08: case 0x09: case 0x0a: break;\\n\\t\\t\\tcase 0x0d: break; /* text color */\\n\\t\\t\\tcase 0x0e: break; /* font scheme */\\n\\t\\t\\tdefault: throw \\\"bafuq\\\" + xfe[0].toString(16);\\n\\t\\t}\\n\\t});\\n}\\n\\n/* 18.6 Calculation Chain */\\nfunction parse_cc_xml(data, opts) {\\n\\tvar d = [];\\n\\tvar l = 0, i = 1;\\n\\t(data.match(tagregex)||[]).forEach(function(x) {\\n\\t\\tvar y = parsexmltag(x);\\n\\t\\tswitch(y[0]) {\\n\\t\\t\\tcase '<?xml': break;\\n\\t\\t\\t/* 18.6.2 calcChain CT_CalcChain 1 */\\n\\t\\t\\tcase '<calcChain': case '<calcChain>': case '</calcChain>': break;\\n\\t\\t\\t/* 18.6.1 c CT_CalcCell 1 */\\n\\t\\t\\tcase '<c': delete y[0]; if(y.i) i = y.i; else y.i = i; d.push(y); break;\\n\\t\\t}\\n\\t});\\n\\treturn d;\\n}\\n\\nfunction write_cc_xml(data, opts) { }\\n/* [MS-XLSB] 2.6.4.1 */\\nfunction parse_BrtCalcChainItem$(data, length) {\\n\\tvar out = {};\\n\\tout.i = data.read_shift(4);\\n\\tvar cell = {};\\n\\tcell.r = data.read_shift(4);\\n\\tcell.c = data.read_shift(4);\\n\\tout.r = encode_cell(cell);\\n\\tvar flags = data.read_shift(1);\\n\\tif(flags & 0x2) out.l = '1';\\n\\tif(flags & 0x8) out.a = '1';\\n\\treturn out;\\n}\\n\\n/* 18.6 Calculation Chain */\\nfunction parse_cc_bin(data, opts) {\\n\\tvar out = [];\\n\\tvar pass = false;\\n\\trecordhopper(data, function hopper_cc(val, R, RT) {\\n\\t\\tswitch(R.n) {\\n\\t\\t\\tcase 'BrtCalcChainItem$': out.push(val); break;\\n\\t\\t\\tcase 'BrtBeginCalcChain$': break;\\n\\t\\t\\tcase 'BrtEndCalcChain$': break;\\n\\t\\t\\tdefault: if(!pass || opts.WTF) throw new Error(\\\"Unexpected record \\\" + RT + \\\" \\\" + R.n);\\n\\t\\t}\\n\\t});\\n\\treturn out;\\n}\\n\\nfunction write_cc_bin(data, opts) { }\\n\\nfunction parse_comments(zip, dirComments, sheets, sheetRels, opts) {\\n\\tfor(var i = 0; i != dirComments.length; ++i) {\\n\\t\\tvar canonicalpath=dirComments[i];\\n\\t\\tvar comments=parse_cmnt(getzipdata(zip, canonicalpath.replace(/^\\\\//,''), true), canonicalpath, opts);\\n\\t\\tif(!comments || !comments.length) continue;\\n\\t\\t// find the sheets targeted by these comments\\n\\t\\tvar sheetNames = keys(sheets);\\n\\t\\tfor(var j = 0; j != sheetNames.length; ++j) {\\n\\t\\t\\tvar sheetName = sheetNames[j];\\n\\t\\t\\tvar rels = sheetRels[sheetName];\\n\\t\\t\\tif(rels) {\\n\\t\\t\\t\\tvar rel = rels[canonicalpath];\\n\\t\\t\\t\\tif(rel) insertCommentsIntoSheet(sheetName, sheets[sheetName], comments);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction insertCommentsIntoSheet(sheetName, sheet, comments) {\\n\\tcomments.forEach(function(comment) {\\n\\t\\tvar cell = sheet[comment.ref];\\n\\t\\tif (!cell) {\\n\\t\\t\\tcell = {};\\n\\t\\t\\tsheet[comment.ref] = cell;\\n\\t\\t\\tvar range = safe_decode_range(sheet[\\\"!ref\\\"]||\\\"BDWGO1000001:A1\\\");\\n\\t\\t\\tvar thisCell = decode_cell(comment.ref);\\n\\t\\t\\tif(range.s.r > thisCell.r) range.s.r = thisCell.r;\\n\\t\\t\\tif(range.e.r < thisCell.r) range.e.r = thisCell.r;\\n\\t\\t\\tif(range.s.c > thisCell.c) range.s.c = thisCell.c;\\n\\t\\t\\tif(range.e.c < thisCell.c) range.e.c = thisCell.c;\\n\\t\\t\\tvar encoded = encode_range(range);\\n\\t\\t\\tif (encoded !== sheet[\\\"!ref\\\"]) sheet[\\\"!ref\\\"] = encoded;\\n\\t\\t}\\n\\n\\t\\tif (!cell.c) cell.c = [];\\n\\t\\tvar o = {a: comment.author, t: comment.t, r: comment.r};\\n\\t\\tif(comment.h) o.h = comment.h;\\n\\t\\tcell.c.push(o);\\n\\t});\\n}\\n\\n/* 18.7.3 CT_Comment */\\nfunction parse_comments_xml(data, opts) {\\n\\tif(data.match(/<(?:\\\\w+:)?comments *\\\\/>/)) return [];\\n\\tvar authors = [];\\n\\tvar commentList = [];\\n\\tdata.match(/<(?:\\\\w+:)?authors>([^\\\\u2603]*)<\\\\/(?:\\\\w+:)?authors>/)[1].split(/<\\\\/\\\\w*:?author>/).forEach(function(x) {\\n\\t\\tif(x === \\\"\\\" || x.trim() === \\\"\\\") return;\\n\\t\\tauthors.push(x.match(/<(?:\\\\w+:)?author[^>]*>(.*)/)[1]);\\n\\t});\\n\\t(data.match(/<(?:\\\\w+:)?commentList>([^\\\\u2603]*)<\\\\/(?:\\\\w+:)?commentList>/)||[\\\"\\\",\\\"\\\"])[1].split(/<\\\\/\\\\w*:?comment>/).forEach(function(x, index) {\\n\\t\\tif(x === \\\"\\\" || x.trim() === \\\"\\\") return;\\n\\t\\tvar y = parsexmltag(x.match(/<(?:\\\\w+:)?comment[^>]*>/)[0]);\\n\\t\\tvar comment = { author: y.authorId && authors[y.authorId] ? authors[y.authorId] : undefined, ref: y.ref, guid: y.guid };\\n\\t\\tvar cell = decode_cell(y.ref);\\n\\t\\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\\n\\t\\tvar textMatch = x.match(/<text>([^\\\\u2603]*)<\\\\/text>/);\\n\\t\\tif (!textMatch || !textMatch[1]) return; // a comment may contain an empty text tag.\\n\\t\\tvar rt = parse_si(textMatch[1]);\\n\\t\\tcomment.r = rt.r;\\n\\t\\tcomment.t = rt.t;\\n\\t\\tif(opts.cellHTML) comment.h = rt.h;\\n\\t\\tcommentList.push(comment);\\n\\t});\\n\\treturn commentList;\\n}\\n\\nfunction write_comments_xml(data, opts) { }\\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\\nfunction parse_BrtBeginComment(data, length) {\\n\\tvar out = {};\\n\\tout.iauthor = data.read_shift(4);\\n\\tvar rfx = parse_UncheckedRfX(data, 16);\\n\\tout.rfx = rfx.s;\\n\\tout.ref = encode_cell(rfx.s);\\n\\tdata.l += 16; /*var guid = parse_GUID(data); */\\n\\treturn out;\\n}\\n\\n/* [MS-XLSB] 2.4.324 BrtCommentAuthor */\\nvar parse_BrtCommentAuthor = parse_XLWideString;\\n\\n/* [MS-XLSB] 2.4.325 BrtCommentText */\\nvar parse_BrtCommentText = parse_RichStr;\\n\\n/* [MS-XLSB] 2.1.7.8 Comments */\\nfunction parse_comments_bin(data, opts) {\\n\\tvar out = [];\\n\\tvar authors = [];\\n\\tvar c = {};\\n\\tvar pass = false;\\n\\trecordhopper(data, function hopper_cmnt(val, R, RT) {\\n\\t\\tswitch(R.n) {\\n\\t\\t\\tcase 'BrtCommentAuthor': authors.push(val); break;\\n\\t\\t\\tcase 'BrtBeginComment': c = val; break;\\n\\t\\t\\tcase 'BrtCommentText': c.t = val.t; c.h = val.h; c.r = val.r; break;\\n\\t\\t\\tcase 'BrtEndComment':\\n\\t\\t\\t\\tc.author = authors[c.iauthor];\\n\\t\\t\\t\\tdelete c.iauthor;\\n\\t\\t\\t\\tif(opts.sheetRows && opts.sheetRows <= c.rfx.r) break;\\n\\t\\t\\t\\tdelete c.rfx; out.push(c); break;\\n\\t\\t\\tcase 'BrtBeginComments': break;\\n\\t\\t\\tcase 'BrtEndComments': break;\\n\\t\\t\\tcase 'BrtBeginCommentAuthors': break;\\n\\t\\t\\tcase 'BrtEndCommentAuthors': break;\\n\\t\\t\\tcase 'BrtBeginCommentList': break;\\n\\t\\t\\tcase 'BrtEndCommentList': break;\\n\\t\\t\\tdefault: if(!pass || opts.WTF) throw new Error(\\\"Unexpected record \\\" + RT + \\\" \\\" + R.n);\\n\\t\\t}\\n\\t});\\n\\treturn out;\\n}\\n\\nfunction write_comments_bin(data, opts) { }\\n/* TODO: it will be useful to parse the function str */\\nvar rc_to_a1 = (function(){\\n\\tvar rcregex = /(^|[^A-Za-z])R(\\\\[?)(-?\\\\d+|)\\\\]?C(\\\\[?)(-?\\\\d+|)\\\\]?/g;\\n\\tvar rcbase;\\n\\tfunction rcfunc($$,$1,$2,$3,$4,$5) {\\n\\t\\tvar R = $3.length>0?parseInt($3,10)|0:0, C = $5.length>0?parseInt($5,10)|0:0;\\n\\t\\tif(C<0 && $4.length === 0) C=0;\\n\\t\\tif($4.length > 0) C += rcbase.c;\\n\\t\\tif($2.length > 0) R += rcbase.r;\\n\\t\\treturn $1 + encode_col(C) + encode_row(R);\\n\\t}\\n\\treturn function rc_to_a1(fstr, base) {\\n\\t\\trcbase = base;\\n\\t\\treturn fstr.replace(rcregex, rcfunc);\\n\\t};\\n})();\\n\\n/* --- formula references point to MS-XLS --- */\\n/* Small helpers */\\nfunction parseread(l) { return function(blob, length) { blob.l+=l; return; }; }\\nfunction parseread1(blob, length) { blob.l+=1; return; }\\n\\n/* Rgce Helpers */\\n\\n/* 2.5.51 */\\nfunction parse_ColRelU(blob, length) {\\n\\tvar c = blob.read_shift(2);\\n\\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\\n}\\n\\n/* 2.5.198.105 */\\nfunction parse_RgceArea(blob, length) {\\n\\tvar r=blob.read_shift(2), R=blob.read_shift(2);\\n\\tvar c=parse_ColRelU(blob, 2);\\n\\tvar C=parse_ColRelU(blob, 2);\\n\\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\\n}\\n\\n/* 2.5.198.105 TODO */\\nfunction parse_RgceAreaRel(blob, length) {\\n\\tvar r=blob.read_shift(2), R=blob.read_shift(2);\\n\\tvar c=parse_ColRelU(blob, 2);\\n\\tvar C=parse_ColRelU(blob, 2);\\n\\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\\n}\\n\\n/* 2.5.198.109 */\\nfunction parse_RgceLoc(blob, length) {\\n\\tvar r = blob.read_shift(2);\\n\\tvar c = parse_ColRelU(blob, 2);\\n\\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\\n}\\n\\n/* 2.5.198.111 */\\nfunction parse_RgceLocRel(blob, length) {\\n\\tvar r = blob.read_shift(2);\\n\\tvar cl = blob.read_shift(2);\\n\\tvar cRel = (cl & 0x8000) >> 15, rRel = (cl & 0x4000) >> 14;\\n\\tcl &= 0x3FFF;\\n\\tif(cRel !== 0) while(cl >= 0x100) cl -= 0x100;\\n\\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\\n}\\n\\n/* Ptg Tokens */\\n\\n/* 2.5.198.27 */\\nfunction parse_PtgArea(blob, length) {\\n\\tvar type = (blob[blob.l++] & 0x60) >> 5;\\n\\tvar area = parse_RgceArea(blob, 8);\\n\\treturn [type, area];\\n}\\n\\n/* 2.5.198.28 */\\nfunction parse_PtgArea3d(blob, length) {\\n\\tvar type = (blob[blob.l++] & 0x60) >> 5;\\n\\tvar ixti = blob.read_shift(2);\\n\\tvar area = parse_RgceArea(blob, 8);\\n\\treturn [type, ixti, area];\\n}\\n\\n/* 2.5.198.29 */\\nfunction parse_PtgAreaErr(blob, length) {\\n\\tvar type = (blob[blob.l++] & 0x60) >> 5;\\n\\tblob.l += 8;\\n\\treturn [type];\\n}\\n/* 2.5.198.30 */\\nfunction parse_PtgAreaErr3d(blob, length) {\\n\\tvar type = (blob[blob.l++] & 0x60) >> 5;\\n\\tvar ixti = blob.read_shift(2);\\n\\tblob.l += 8;\\n\\treturn [type, ixti];\\n}\\n\\n/* 2.5.198.31 */\\nfunction parse_PtgAreaN(blob, length) {\\n\\tvar type = (blob[blob.l++] & 0x60) >> 5;\\n\\tvar area = parse_RgceAreaRel(blob, 8);\\n\\treturn [type, area];\\n}\\n\\n/* 2.5.198.32 -- ignore this and look in PtgExtraArray for shape + values */\\nfunction parse_PtgArray(blob, length) {\\n\\tvar type = (blob[blob.l++] & 0x60) >> 5;\\n\\tblob.l += 7;\\n\\treturn [type];\\n}\\n\\n/* 2.5.198.33 */\\nfunction parse_PtgAttrBaxcel(blob, length) {\\n\\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\\n\\tvar bitBaxcel = 1;\\n\\tblob.l += 4;\\n\\treturn [bitSemi, bitBaxcel];\\n}\\n\\n/* 2.5.198.34 */\\nfunction parse_PtgAttrChoose(blob, length) {\\n\\tblob.l +=2;\\n\\tvar offset = blob.read_shift(2);\\n\\tvar o = [];\\n\\t/* offset is 1 less than the number of elements */\\n\\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(2));\\n\\treturn o;\\n}\\n\\n/* 2.5.198.35 */\\nfunction parse_PtgAttrGoto(blob, length) {\\n\\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\\n\\tblob.l += 2;\\n\\treturn [bitGoto, blob.read_shift(2)];\\n}\\n\\n/* 2.5.198.36 */\\nfunction parse_PtgAttrIf(blob, length) {\\n\\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\\n\\tblob.l += 2;\\n\\treturn [bitIf, blob.read_shift(2)];\\n}\\n\\n/* 2.5.198.37 */\\nfunction parse_PtgAttrSemi(blob, length) {\\n\\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\\n\\tblob.l += 4;\\n\\treturn [bitSemi];\\n}\\n\\n/* 2.5.198.40 (used by PtgAttrSpace and PtgAttrSpaceSemi) */\\nfunction parse_PtgAttrSpaceType(blob, length) {\\n\\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\\n\\treturn [type, cch];\\n}\\n\\n/* 2.5.198.38 */\\nfunction parse_PtgAttrSpace(blob, length) {\\n\\tblob.read_shift(2);\\n\\treturn parse_PtgAttrSpaceType(blob, 2);\\n}\\n\\n/* 2.5.198.39 */\\nfunction parse_PtgAttrSpaceSemi(blob, length) {\\n\\tblob.read_shift(2);\\n\\treturn parse_PtgAttrSpaceType(blob, 2);\\n}\\n\\n/* 2.5.198.84 TODO */\\nfunction parse_PtgRef(blob, length) {\\n\\tvar ptg = blob[blob.l] & 0x1F;\\n\\tvar type = (blob[blob.l] & 0x60)>>5;\\n\\tblob.l += 1;\\n\\tvar loc = parse_RgceLoc(blob,4);\\n\\treturn [type, loc];\\n}\\n\\n/* 2.5.198.88 TODO */\\nfunction parse_PtgRefN(blob, length) {\\n\\tvar ptg = blob[blob.l] & 0x1F;\\n\\tvar type = (blob[blob.l] & 0x60)>>5;\\n\\tblob.l += 1;\\n\\tvar loc = parse_RgceLocRel(blob,4);\\n\\treturn [type, loc];\\n}\\n\\n/* 2.5.198.85 TODO */\\nfunction parse_PtgRef3d(blob, length) {\\n\\tvar ptg = blob[blob.l] & 0x1F;\\n\\tvar type = (blob[blob.l] & 0x60)>>5;\\n\\tblob.l += 1;\\n\\tvar ixti = blob.read_shift(2); // XtiIndex\\n\\tvar loc = parse_RgceLoc(blob,4);\\n\\treturn [type, ixti, loc];\\n}\\n\\n\\n/* 2.5.198.62 TODO */\\nfunction parse_PtgFunc(blob, length) {\\n\\tvar ptg = blob[blob.l] & 0x1F;\\n\\tvar type = (blob[blob.l] & 0x60)>>5;\\n\\tblob.l += 1;\\n\\tvar iftab = blob.read_shift(2);\\n\\treturn [FtabArgc[iftab], Ftab[iftab]];\\n}\\n/* 2.5.198.63 TODO */\\nfunction parse_PtgFuncVar(blob, length) {\\n\\tblob.l++;\\n\\tvar cparams = blob.read_shift(1), tab = parsetab(blob);\\n\\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\\n}\\n\\nfunction parsetab(blob, length) {\\n\\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\\n}\\n\\n/* 2.5.198.41 */\\nvar parse_PtgAttrSum = parseread(4);\\n/* 2.5.198.43 */\\nvar parse_PtgConcat = parseread1;\\n\\n/* 2.5.198.58 */\\nfunction parse_PtgExp(blob, length) {\\n\\tblob.l++;\\n\\tvar row = blob.read_shift(2);\\n\\tvar col = blob.read_shift(2);\\n\\treturn [row, col];\\n}\\n\\n/* 2.5.198.57 */\\nfunction parse_PtgErr(blob, length) { blob.l++; return BErr[blob.read_shift(1)]; }\\n\\n/* 2.5.198.66 TODO */\\nfunction parse_PtgInt(blob, length) { blob.l++; return blob.read_shift(2); }\\n\\n/* 2.5.198.42 */\\nfunction parse_PtgBool(blob, length) { blob.l++; return blob.read_shift(1)!==0;}\\n\\n/* 2.5.198.79 */\\nfunction parse_PtgNum(blob, length) { blob.l++; return parse_Xnum(blob, 8); }\\n\\n/* 2.5.198.89 */\\nfunction parse_PtgStr(blob, length) { blob.l++; return parse_ShortXLUnicodeString(blob); }\\n\\n/* 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\\nfunction parse_SerAr(blob) {\\n\\tvar val = [];\\n\\tswitch((val[0] = blob.read_shift(1))) {\\n\\t\\t/* 2.5.192.113 */\\n\\t\\tcase 0x04: /* SerBool -- boolean */\\n\\t\\t\\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\\n\\t\\t\\tblob.l += 7; break;\\n\\t\\t/* 2.5.192.114 */\\n\\t\\tcase 0x10: /* SerErr -- error */\\n\\t\\t\\tval[1] = BErr[blob[blob.l]];\\n\\t\\t\\tblob.l += 8; break;\\n\\t\\t/* 2.5.192.115 */\\n\\t\\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\\n\\t\\t\\tblob.l += 8; break;\\n\\t\\t/* 2.5.192.116 */\\n\\t\\tcase 0x01: /* SerNum -- Xnum */\\n\\t\\t\\tval[1] = parse_Xnum(blob, 8); break;\\n\\t\\t/* 2.5.192.117 */\\n\\t\\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\\n\\t\\t\\tval[1] = parse_XLUnicodeString(blob); break;\\n\\t\\t// default: throw \\\"Bad SerAr: \\\" + val[0]; /* Unreachable */\\n\\t}\\n\\treturn val;\\n}\\n\\n/* 2.5.198.61 */\\nfunction parse_PtgExtraMem(blob, cce) {\\n\\tvar count = blob.read_shift(2);\\n\\tvar out = [];\\n\\tfor(var i = 0; i != count; ++i) out.push(parse_Ref8U(blob, 8));\\n\\treturn out;\\n}\\n\\n/* 2.5.198.59 */\\nfunction parse_PtgExtraArray(blob) {\\n\\tvar cols = 1 + blob.read_shift(1); //DColByteU\\n\\tvar rows = 1 + blob.read_shift(2); //DRw\\n\\tfor(var i = 0, o=[]; i != rows && (o[i] = []); ++i)\\n\\t\\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob);\\n\\treturn o;\\n}\\n\\n/* 2.5.198.76 */\\nfunction parse_PtgName(blob, length) {\\n\\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\\n\\tvar nameindex = blob.read_shift(4);\\n\\treturn [type, 0, nameindex];\\n}\\n\\n/* 2.5.198.77 */\\nfunction parse_PtgNameX(blob, length) {\\n\\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\\n\\tvar ixti = blob.read_shift(2); // XtiIndex\\n\\tvar nameindex = blob.read_shift(4);\\n\\treturn [type, ixti, nameindex];\\n}\\n\\n/* 2.5.198.70 */\\nfunction parse_PtgMemArea(blob, length) {\\n\\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\\n\\tblob.l += 4;\\n\\tvar cce = blob.read_shift(2);\\n\\treturn [type, cce];\\n}\\n\\n/* 2.5.198.72 */\\nfunction parse_PtgMemFunc(blob, length) {\\n\\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\\n\\tvar cce = blob.read_shift(2);\\n\\treturn [type, cce];\\n}\\n\\n\\n/* 2.5.198.86 */\\nfunction parse_PtgRefErr(blob, length) {\\n\\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\\n\\tblob.l += 4;\\n\\treturn [type];\\n}\\n\\n/* 2.5.198.26 */\\nvar parse_PtgAdd = parseread1;\\n/* 2.5.198.45 */\\nvar parse_PtgDiv = parseread1;\\n/* 2.5.198.56 */\\nvar parse_PtgEq = parseread1;\\n/* 2.5.198.64 */\\nvar parse_PtgGe = parseread1;\\n/* 2.5.198.65 */\\nvar parse_PtgGt = parseread1;\\n/* 2.5.198.67 */\\nvar parse_PtgIsect = parseread1;\\n/* 2.5.198.68 */\\nvar parse_PtgLe = parseread1;\\n/* 2.5.198.69 */\\nvar parse_PtgLt = parseread1;\\n/* 2.5.198.74 */\\nvar parse_PtgMissArg = parseread1;\\n/* 2.5.198.75 */\\nvar parse_PtgMul = parseread1;\\n/* 2.5.198.78 */\\nvar parse_PtgNe = parseread1;\\n/* 2.5.198.80 */\\nvar parse_PtgParen = parseread1;\\n/* 2.5.198.81 */\\nvar parse_PtgPercent = parseread1;\\n/* 2.5.198.82 */\\nvar parse_PtgPower = parseread1;\\n/* 2.5.198.83 */\\nvar parse_PtgRange = parseread1;\\n/* 2.5.198.90 */\\nvar parse_PtgSub = parseread1;\\n/* 2.5.198.93 */\\nvar parse_PtgUminus = parseread1;\\n/* 2.5.198.94 */\\nvar parse_PtgUnion = parseread1;\\n/* 2.5.198.95 */\\nvar parse_PtgUplus = parseread1;\\n\\n/* 2.5.198.71 */\\nvar parse_PtgMemErr = parsenoop;\\n/* 2.5.198.73 */\\nvar parse_PtgMemNoMem = parsenoop;\\n/* 2.5.198.87 */\\nvar parse_PtgRefErr3d = parsenoop;\\n/* 2.5.198.92 */\\nvar parse_PtgTbl = parsenoop;\\n\\n/* 2.5.198.25 */\\nvar PtgTypes = {\\n\\t0x01: { n:'PtgExp', f:parse_PtgExp },\\n\\t0x02: { n:'PtgTbl', f:parse_PtgTbl },\\n\\t0x03: { n:'PtgAdd', f:parse_PtgAdd },\\n\\t0x04: { n:'PtgSub', f:parse_PtgSub },\\n\\t0x05: { n:'PtgMul', f:parse_PtgMul },\\n\\t0x06: { n:'PtgDiv', f:parse_PtgDiv },\\n\\t0x07: { n:'PtgPower', f:parse_PtgPower },\\n\\t0x08: { n:'PtgConcat', f:parse_PtgConcat },\\n\\t0x09: { n:'PtgLt', f:parse_PtgLt },\\n\\t0x0A: { n:'PtgLe', f:parse_PtgLe },\\n\\t0x0B: { n:'PtgEq', f:parse_PtgEq },\\n\\t0x0C: { n:'PtgGe', f:parse_PtgGe },\\n\\t0x0D: { n:'PtgGt', f:parse_PtgGt },\\n\\t0x0E: { n:'PtgNe', f:parse_PtgNe },\\n\\t0x0F: { n:'PtgIsect', f:parse_PtgIsect },\\n\\t0x10: { n:'PtgUnion', f:parse_PtgUnion },\\n\\t0x11: { n:'PtgRange', f:parse_PtgRange },\\n\\t0x12: { n:'PtgUplus', f:parse_PtgUplus },\\n\\t0x13: { n:'PtgUminus', f:parse_PtgUminus },\\n\\t0x14: { n:'PtgPercent', f:parse_PtgPercent },\\n\\t0x15: { n:'PtgParen', f:parse_PtgParen },\\n\\t0x16: { n:'PtgMissArg', f:parse_PtgMissArg },\\n\\t0x17: { n:'PtgStr', f:parse_PtgStr },\\n\\t0x1C: { n:'PtgErr', f:parse_PtgErr },\\n\\t0x1D: { n:'PtgBool', f:parse_PtgBool },\\n\\t0x1E: { n:'PtgInt', f:parse_PtgInt },\\n\\t0x1F: { n:'PtgNum', f:parse_PtgNum },\\n\\t0x20: { n:'PtgArray', f:parse_PtgArray },\\n\\t0x21: { n:'PtgFunc', f:parse_PtgFunc },\\n\\t0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },\\n\\t0x23: { n:'PtgName', f:parse_PtgName },\\n\\t0x24: { n:'PtgRef', f:parse_PtgRef },\\n\\t0x25: { n:'PtgArea', f:parse_PtgArea },\\n\\t0x26: { n:'PtgMemArea', f:parse_PtgMemArea },\\n\\t0x27: { n:'PtgMemErr', f:parse_PtgMemErr },\\n\\t0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\\n\\t0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },\\n\\t0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },\\n\\t0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },\\n\\t0x2C: { n:'PtgRefN', f:parse_PtgRefN },\\n\\t0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },\\n\\t0x39: { n:'PtgNameX', f:parse_PtgNameX },\\n\\t0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },\\n\\t0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },\\n\\t0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\\n\\t0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\\n\\t0xFF: {}\\n};\\n/* These are duplicated in the PtgTypes table */\\nvar PtgDupes = {\\n\\t0x40: 0x20, 0x60: 0x20,\\n\\t0x41: 0x21, 0x61: 0x21,\\n\\t0x42: 0x22, 0x62: 0x22,\\n\\t0x43: 0x23, 0x63: 0x23,\\n\\t0x44: 0x24, 0x64: 0x24,\\n\\t0x45: 0x25, 0x65: 0x25,\\n\\t0x46: 0x26, 0x66: 0x26,\\n\\t0x47: 0x27, 0x67: 0x27,\\n\\t0x48: 0x28, 0x68: 0x28,\\n\\t0x49: 0x29, 0x69: 0x29,\\n\\t0x4A: 0x2A, 0x6A: 0x2A,\\n\\t0x4B: 0x2B, 0x6B: 0x2B,\\n\\t0x4C: 0x2C, 0x6C: 0x2C,\\n\\t0x4D: 0x2D, 0x6D: 0x2D,\\n\\t0x59: 0x39, 0x79: 0x39,\\n\\t0x5A: 0x3A, 0x7A: 0x3A,\\n\\t0x5B: 0x3B, 0x7B: 0x3B,\\n\\t0x5C: 0x3C, 0x7C: 0x3C,\\n\\t0x5D: 0x3D, 0x7D: 0x3D\\n};\\n(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})();\\n\\nvar Ptg18 = {};\\nvar Ptg19 = {\\n\\t0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\\n\\t0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },\\n\\t0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\\n\\t0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\\n\\t0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },\\n\\t0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\\n\\t0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\\n\\t0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\\n\\t0xFF: {}\\n};\\n\\n/* 2.4.127 TODO */\\nfunction parse_Formula(blob, length, opts) {\\n\\tvar cell = parse_XLSCell(blob, 6);\\n\\tvar val = parse_FormulaValue(blob,8);\\n\\tvar flags = blob.read_shift(1);\\n\\tblob.read_shift(1);\\n\\tvar chn = blob.read_shift(4);\\n\\tvar cbf = \\\"\\\";\\n\\tif(opts.biff === 5) blob.l += length-20;\\n\\telse cbf = parse_XLSCellParsedFormula(blob, length-20, opts);\\n\\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\\n}\\n\\n/* 2.5.133 TODO: how to emit empty strings? */\\nfunction parse_FormulaValue(blob) {\\n\\tvar b;\\n\\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\\n\\tswitch(blob[blob.l]) {\\n\\t\\tcase 0x00: blob.l += 8; return [\\\"String\\\", 's'];\\n\\t\\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\\n\\t\\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\\n\\t\\tcase 0x03: blob.l += 8; return [\\\"\\\",'s'];\\n\\t}\\n}\\n\\n/* 2.5.198.103 */\\nfunction parse_RgbExtra(blob, length, rgce, opts) {\\n\\tif(opts.biff < 8) return parsenoop(blob, length);\\n\\tvar target = blob.l + length;\\n\\tvar o = [];\\n\\tfor(var i = 0; i !== rgce.length; ++i) {\\n\\t\\tswitch(rgce[i][0]) {\\n\\t\\t\\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\\n\\t\\t\\t\\trgce[i][1] = parse_PtgExtraArray(blob);\\n\\t\\t\\t\\to.push(rgce[i][1]);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\\n\\t\\t\\t\\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1]);\\n\\t\\t\\t\\to.push(rgce[i][2]);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tdefault: break;\\n\\t\\t}\\n\\t}\\n\\tlength = target - blob.l;\\n\\tif(length !== 0) o.push(parsenoop(blob, length));\\n\\treturn o;\\n}\\n\\n/* 2.5.198.21 */\\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\\n\\tvar target = blob.l + length;\\n\\tvar rgce = parse_Rgce(blob, cce);\\n\\tvar rgcb;\\n\\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\\n\\treturn [rgce, rgcb];\\n}\\n\\n/* 2.5.198.3 TODO */\\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\\n\\tvar target = blob.l + length;\\n\\tvar rgcb, cce = blob.read_shift(2); // length of rgce\\n\\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\\n\\tvar rgce = parse_Rgce(blob, cce);\\n\\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, length - cce - 2, rgce, opts);\\n\\treturn [rgce, rgcb];\\n}\\n\\n/* 2.5.198.118 TODO */\\nfunction parse_SharedParsedFormula(blob, length, opts) {\\n\\tvar target = blob.l + length;\\n\\tvar rgcb, cce = blob.read_shift(2); // length of rgce\\n\\tvar rgce = parse_Rgce(blob, cce);\\n\\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\\n\\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\\n\\treturn [rgce, rgcb];\\n}\\n\\n/* 2.5.198.1 TODO */\\nfunction parse_ArrayParsedFormula(blob, length, opts, ref) {\\n\\tvar target = blob.l + length;\\n\\tvar rgcb, cce = blob.read_shift(2); // length of rgce\\n\\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\\n\\tvar rgce = parse_Rgce(blob, cce);\\n\\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\\n\\treturn [rgce, rgcb];\\n}\\n\\n/* 2.5.198.104 */\\nfunction parse_Rgce(blob, length) {\\n\\tvar target = blob.l + length;\\n\\tvar R, id, ptgs = [];\\n\\twhile(target != blob.l) {\\n\\t\\tlength = target - blob.l;\\n\\t\\tid = blob[blob.l];\\n\\t\\tR = PtgTypes[id];\\n\\t\\t//console.log(\\\"ptg\\\", id, R)\\n\\t\\tif(id === 0x18 || id === 0x19) {\\n\\t\\t\\tid = blob[blob.l + 1];\\n\\t\\t\\tR = (id === 0x18 ? Ptg18 : Ptg19)[id];\\n\\t\\t}\\n\\t\\tif(!R || !R.f) { ptgs.push(parsenoop(blob, length)); }\\n\\t\\telse { ptgs.push([R.n, R.f(blob, length)]); }\\n\\t}\\n\\treturn ptgs;\\n}\\n\\nfunction mapper(x) { return x.map(function f2(y) { return y[1];}).join(\\\",\\\");}\\n\\n/* 2.2.2 + Magic TODO */\\nfunction stringify_formula(formula, range, cell, supbooks, opts) {\\n\\tif(opts !== undefined && opts.biff === 5) return \\\"BIFF5??\\\";\\n\\tvar _range = range !== undefined ? range : {s:{c:0, r:0}};\\n\\tvar stack = [], e1, e2, type, c, ixti, nameidx, r;\\n\\tif(!formula[0] || !formula[0][0]) return \\\"\\\";\\n\\t//console.log(\\\"--\\\",cell,formula[0])\\n\\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\\n\\t\\tvar f = formula[0][ff];\\n\\t\\t//console.log(\\\"++\\\",f, stack)\\n\\t\\tswitch(f[0]) {\\n\\t\\t/* 2.2.2.1 Unary Operator Tokens */\\n\\t\\t\\t/* 2.5.198.93 */\\n\\t\\t\\tcase 'PtgUminus': stack.push(\\\"-\\\" + stack.pop()); break;\\n\\t\\t\\t/* 2.5.198.95 */\\n\\t\\t\\tcase 'PtgUplus': stack.push(\\\"+\\\" + stack.pop()); break;\\n\\t\\t\\t/* 2.5.198.81 */\\n\\t\\t\\tcase 'PtgPercent': stack.push(stack.pop() + \\\"%\\\"); break;\\n\\n\\t\\t/* 2.2.2.1 Binary Value Operator Token */\\n\\t\\t\\t/* 2.5.198.26 */\\n\\t\\t\\tcase 'PtgAdd':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"+\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.90 */\\n\\t\\t\\tcase 'PtgSub':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"-\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.75 */\\n\\t\\t\\tcase 'PtgMul':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"*\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.45 */\\n\\t\\t\\tcase 'PtgDiv':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"/\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.82 */\\n\\t\\t\\tcase 'PtgPower':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"^\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.43 */\\n\\t\\t\\tcase 'PtgConcat':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"&\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.69 */\\n\\t\\t\\tcase 'PtgLt':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"<\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.68 */\\n\\t\\t\\tcase 'PtgLe':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"<=\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.56 */\\n\\t\\t\\tcase 'PtgEq':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"=\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.64 */\\n\\t\\t\\tcase 'PtgGe':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\">=\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.65 */\\n\\t\\t\\tcase 'PtgGt':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\">\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.78 */\\n\\t\\t\\tcase 'PtgNe':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\"<>\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t/* 2.2.2.1 Binary Reference Operator Token */\\n\\t\\t\\t/* 2.5.198.67 */\\n\\t\\t\\tcase 'PtgIsect':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\" \\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase 'PtgUnion':\\n\\t\\t\\t\\te1 = stack.pop(); e2 = stack.pop();\\n\\t\\t\\t\\tstack.push(e2+\\\",\\\"+e1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase 'PtgRange': break;\\n\\n\\t\\t/* 2.2.2.3 Control Tokens \\\"can be ignored\\\" */\\n\\t\\t\\t/* 2.5.198.34 */\\n\\t\\t\\tcase 'PtgAttrChoose': break;\\n\\t\\t\\t/* 2.5.198.35 */\\n\\t\\t\\tcase 'PtgAttrGoto': break;\\n\\t\\t\\t/* 2.5.198.36 */\\n\\t\\t\\tcase 'PtgAttrIf': break;\\n\\n\\n\\t\\t\\t/* 2.5.198.84 */\\n\\t\\t\\tcase 'PtgRef':\\n\\t\\t\\t\\ttype = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), _range);\\n\\t\\t\\t\\tstack.push(encode_cell(c));\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.88 */\\n\\t\\t\\tcase 'PtgRefN':\\n\\t\\t\\t\\ttype = f[1][0]; c = shift_cell_xls(decode_cell(encode_cell(f[1][1])), cell);\\n\\t\\t\\t\\tstack.push(encode_cell(c));\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase 'PtgRef3d': // TODO: lots of stuff\\n\\t\\t\\t\\ttype = f[1][0]; ixti = f[1][1]; c = shift_cell_xls(f[1][2], _range);\\n\\t\\t\\t\\tstack.push(supbooks[1][ixti+1]+\\\"!\\\"+encode_cell(c));\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t/* Function Call */\\n\\t\\t\\t/* 2.5.198.62 */\\n\\t\\t\\tcase 'PtgFunc':\\n\\t\\t\\t/* 2.5.198.63 */\\n\\t\\t\\tcase 'PtgFuncVar':\\n\\t\\t\\t\\t/* f[1] = [argc, func] */\\n\\t\\t\\t\\tvar argc = f[1][0], func = f[1][1];\\n\\t\\t\\t\\tif(!argc) argc = 0;\\n\\t\\t\\t\\tvar args = stack.slice(-argc);\\n\\t\\t\\t\\tstack.length -= argc;\\n\\t\\t\\t\\tif(func === 'User') func = args.shift();\\n\\t\\t\\t\\tstack.push(func + \\\"(\\\" + args.join(\\\",\\\") + \\\")\\\");\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t/* 2.5.198.42 */\\n\\t\\t\\tcase 'PtgBool': stack.push(f[1] ? \\\"TRUE\\\" : \\\"FALSE\\\"); break;\\n\\t\\t\\t/* 2.5.198.66 */\\n\\t\\t\\tcase 'PtgInt': stack.push(f[1]); break;\\n\\t\\t\\t/* 2.5.198.79 TODO: precision? */\\n\\t\\t\\tcase 'PtgNum': stack.push(String(f[1])); break;\\n\\t\\t\\t/* 2.5.198.89 */\\n\\t\\t\\tcase 'PtgStr': stack.push('\\\"' + f[1] + '\\\"'); break;\\n\\t\\t\\t/* 2.5.198.57 */\\n\\t\\t\\tcase 'PtgErr': stack.push(f[1]); break;\\n\\t\\t\\t/* 2.5.198.27 TODO: fixed points */\\n\\t\\t\\tcase 'PtgArea':\\n\\t\\t\\t\\ttype = f[1][0]; r = shift_range_xls(f[1][1], _range);\\n\\t\\t\\t\\tstack.push(encode_range(r));\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.28 */\\n\\t\\t\\tcase 'PtgArea3d': // TODO: lots of stuff\\n\\t\\t\\t\\ttype = f[1][0]; ixti = f[1][1]; r = f[1][2];\\n\\t\\t\\t\\tstack.push(supbooks[1][ixti+1]+\\\"!\\\"+encode_range(r));\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t/* 2.5.198.41 */\\n\\t\\t\\tcase 'PtgAttrSum':\\n\\t\\t\\t\\tstack.push(\\\"SUM(\\\" + stack.pop() + \\\")\\\");\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t/* Expression Prefixes */\\n\\t\\t\\t/* 2.5.198.37 */\\n\\t\\t\\tcase 'PtgAttrSemi': break;\\n\\n\\t\\t\\t/* 2.5.97.60 TODO: do something different for revisions */\\n\\t\\t\\tcase 'PtgName':\\n\\t\\t\\t\\t/* f[1] = type, 0, nameindex */\\n\\t\\t\\t\\tnameidx = f[1][2];\\n\\t\\t\\t\\tvar lbl = supbooks[0][nameidx];\\n\\t\\t\\t\\tvar name = lbl.Name;\\n\\t\\t\\t\\tif(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];\\n\\t\\t\\t\\tstack.push(name);\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t/* 2.5.97.61 TODO: do something different for revisions */\\n\\t\\t\\tcase 'PtgNameX':\\n\\t\\t\\t\\t/* f[1] = type, ixti, nameindex */\\n\\t\\t\\t\\tvar bookidx = f[1][1]; nameidx = f[1][2]; var externbook;\\n\\t\\t\\t\\t/* TODO: Properly handle missing values */\\n\\t\\t\\t\\tif(supbooks[bookidx+1]) externbook = supbooks[bookidx+1][nameidx];\\n\\t\\t\\t\\telse if(supbooks[bookidx-1]) externbook = supbooks[bookidx-1][nameidx];\\n\\t\\t\\t\\tif(!externbook) externbook = {body: \\\"??NAMEX??\\\"};\\n\\t\\t\\t\\tstack.push(externbook.body);\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t/* 2.2.2.4 Display Tokens */\\n\\t\\t\\t/* 2.5.198.80 */\\n\\t\\t\\tcase 'PtgParen': stack.push('(' + stack.pop() + ')'); break;\\n\\n\\t\\t\\t/* 2.5.198.86 */\\n\\t\\t\\tcase 'PtgRefErr': stack.push('#REF!'); break;\\n\\n\\t\\t/* */\\n\\t\\t\\t/* 2.5.198.58 TODO */\\n\\t\\t\\tcase 'PtgExp':\\n\\t\\t\\t\\tc = {c:f[1][1],r:f[1][0]};\\n\\t\\t\\t\\tvar q = {c: cell.c, r:cell.r};\\n\\t\\t\\t\\tif(supbooks.sharedf[encode_cell(c)]) {\\n\\t\\t\\t\\t\\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\\n\\t\\t\\t\\t\\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\telse {\\n\\t\\t\\t\\t\\tvar fnd = false;\\n\\t\\t\\t\\t\\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\\n\\t\\t\\t\\t\\t\\t/* TODO: should be something like range_has */\\n\\t\\t\\t\\t\\t\\te2 = supbooks.arrayf[e1];\\n\\t\\t\\t\\t\\t\\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\\n\\t\\t\\t\\t\\t\\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\\n\\t\\t\\t\\t\\t\\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif(!fnd) stack.push(f[1]);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t/* 2.5.198.32 TODO */\\n\\t\\t\\tcase 'PtgArray':\\n\\t\\t\\t\\tstack.push(\\\"{\\\" + f[1].map(mapper).join(\\\";\\\") + \\\"}\\\");\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t/* 2.2.2.5 Mem Tokens */\\n\\t\\t\\t/* 2.5.198.70 TODO: confirm this is a non-display */\\n\\t\\t\\tcase 'PtgMemArea':\\n\\t\\t\\t\\t//stack.push(\\\"(\\\" + f[2].map(encode_range).join(\\\",\\\") + \\\")\\\");\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t/* 2.5.198.38 TODO */\\n\\t\\t\\tcase 'PtgAttrSpace': break;\\n\\n\\t\\t\\t/* 2.5.198.92 TODO */\\n\\t\\t\\tcase 'PtgTbl': break;\\n\\n\\t\\t\\t/* 2.5.198.71 */\\n\\t\\t\\tcase 'PtgMemErr': break;\\n\\n\\t\\t\\t/* 2.5.198.74 */\\n\\t\\t\\tcase 'PtgMissArg':\\n\\t\\t\\t\\tstack.push(\\\"\\\");\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t/* 2.5.198.29 TODO */\\n\\t\\t\\tcase 'PtgAreaErr': break;\\n\\n\\t\\t\\t/* 2.5.198.31 TODO */\\n\\t\\t\\tcase 'PtgAreaN': stack.push(\\\"\\\"); break;\\n\\n\\t\\t\\t/* 2.5.198.87 TODO */\\n\\t\\t\\tcase 'PtgRefErr3d': break;\\n\\n\\t\\t\\t/* 2.5.198.72 TODO */\\n\\t\\t\\tcase 'PtgMemFunc': break;\\n\\n\\t\\t\\tdefault: throw 'Unrecognized Formula Token: ' + f;\\n\\t\\t}\\n\\t\\t//console.log(\\\"::\\\",f, stack)\\n\\t}\\n\\t//console.log(\\\"--\\\",stack);\\n\\treturn stack[0];\\n}\\n\\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula TODO: use similar logic to js-xls */\\nfunction parse_XLSBCellParsedFormula(data, length) {\\n\\tvar cce = data.read_shift(4);\\n\\treturn parsenoop(data, length-4);\\n}\\n/* [MS-XLS] 2.5.198.44 */\\nvar PtgDataType = {\\n\\t0x1: \\\"REFERENCE\\\", // reference to range\\n\\t0x2: \\\"VALUE\\\", // single value\\n\\t0x3: \\\"ARRAY\\\" // array of values\\n};\\n\\n/* [MS-XLS] 2.5.198.4 */\\nvar Cetab = {\\n\\t0x0000: 'BEEP',\\n\\t0x0001: 'OPEN',\\n\\t0x0002: 'OPEN.LINKS',\\n\\t0x0003: 'CLOSE.ALL',\\n\\t0x0004: 'SAVE',\\n\\t0x0005: 'SAVE.AS',\\n\\t0x0006: 'FILE.DELETE',\\n\\t0x0007: 'PAGE.SETUP',\\n\\t0x0008: 'PRINT',\\n\\t0x0009: 'PRINTER.SETUP',\\n\\t0x000A: 'QUIT',\\n\\t0x000B: 'NEW.WINDOW',\\n\\t0x000C: 'ARRANGE.ALL',\\n\\t0x000D: 'WINDOW.SIZE',\\n\\t0x000E: 'WINDOW.MOVE',\\n\\t0x000F: 'FULL',\\n\\t0x0010: 'CLOSE',\\n\\t0x0011: 'RUN',\\n\\t0x0016: 'SET.PRINT.AREA',\\n\\t0x0017: 'SET.PRINT.TITLES',\\n\\t0x0018: 'SET.PAGE.BREAK',\\n\\t0x0019: 'REMOVE.PAGE.BREAK',\\n\\t0x001A: 'FONT',\\n\\t0x001B: 'DISPLAY',\\n\\t0x001C: 'PROTECT.DOCUMENT',\\n\\t0x001D: 'PRECISION',\\n\\t0x001E: 'A1.R1C1',\\n\\t0x001F: 'CALCULATE.NOW',\\n\\t0x0020: 'CALCULATION',\\n\\t0x0022: 'DATA.FIND',\\n\\t0x0023: 'EXTRACT',\\n\\t0x0024: 'DATA.DELETE',\\n\\t0x0025: 'SET.DATABASE',\\n\\t0x0026: 'SET.CRITERIA',\\n\\t0x0027: 'SORT',\\n\\t0x0028: 'DATA.SERIES',\\n\\t0x0029: 'TABLE',\\n\\t0x002A: 'FORMAT.NUMBER',\\n\\t0x002B: 'ALIGNMENT',\\n\\t0x002C: 'STYLE',\\n\\t0x002D: 'BORDER',\\n\\t0x002E: 'CELL.PROTECTION',\\n\\t0x002F: 'COLUMN.WIDTH',\\n\\t0x0030: 'UNDO',\\n\\t0x0031: 'CUT',\\n\\t0x0032: 'COPY',\\n\\t0x0033: 'PASTE',\\n\\t0x0034: 'CLEAR',\\n\\t0x0035: 'PASTE.SPECIAL',\\n\\t0x0036: 'EDIT.DELETE',\\n\\t0x0037: 'INSERT',\\n\\t0x0038: 'FILL.RIGHT',\\n\\t0x0039: 'FILL.DOWN',\\n\\t0x003D: 'DEFINE.NAME',\\n\\t0x003E: 'CREATE.NAMES',\\n\\t0x003F: 'FORMULA.GOTO',\\n\\t0x0040: 'FORMULA.FIND',\\n\\t0x0041: 'SELECT.LAST.CELL',\\n\\t0x0042: 'SHOW.ACTIVE.CELL',\\n\\t0x0043: 'GALLERY.AREA',\\n\\t0x0044: 'GALLERY.BAR',\\n\\t0x0045: 'GALLERY.COLUMN',\\n\\t0x0046: 'GALLERY.LINE',\\n\\t0x0047: 'GALLERY.PIE',\\n\\t0x0048: 'GALLERY.SCATTER',\\n\\t0x0049: 'COMBINATION',\\n\\t0x004A: 'PREFERRED',\\n\\t0x004B: 'ADD.OVERLAY',\\n\\t0x004C: 'GRIDLINES',\\n\\t0x004D: 'SET.PREFERRED',\\n\\t0x004E: 'AXES',\\n\\t0x004F: 'LEGEND',\\n\\t0x0050: 'ATTACH.TEXT',\\n\\t0x0051: 'ADD.ARROW',\\n\\t0x0052: 'SELECT.CHART',\\n\\t0x0053: 'SELECT.PLOT.AREA',\\n\\t0x0054: 'PATTERNS',\\n\\t0x0055: 'MAIN.CHART',\\n\\t0x0056: 'OVERLAY',\\n\\t0x0057: 'SCALE',\\n\\t0x0058: 'FORMAT.LEGEND',\\n\\t0x0059: 'FORMAT.TEXT',\\n\\t0x005A: 'EDIT.REPEAT',\\n\\t0x005B: 'PARSE',\\n\\t0x005C: 'JUSTIFY',\\n\\t0x005D: 'HIDE',\\n\\t0x005E: 'UNHIDE',\\n\\t0x005F: 'WORKSPACE',\\n\\t0x0060: 'FORMULA',\\n\\t0x0061: 'FORMULA.FILL',\\n\\t0x0062: 'FORMULA.ARRAY',\\n\\t0x0063: 'DATA.FIND.NEXT',\\n\\t0x0064: 'DATA.FIND.PREV',\\n\\t0x0065: 'FORMULA.FIND.NEXT',\\n\\t0x0066: 'FORMULA.FIND.PREV',\\n\\t0x0067: 'ACTIVATE',\\n\\t0x0068: 'ACTIVATE.NEXT',\\n\\t0x0069: 'ACTIVATE.PREV',\\n\\t0x006A: 'UNLOCKED.NEXT',\\n\\t0x006B: 'UNLOCKED.PREV',\\n\\t0x006C: 'COPY.PICTURE',\\n\\t0x006D: 'SELECT',\\n\\t0x006E: 'DELETE.NAME',\\n\\t0x006F: 'DELETE.FORMAT',\\n\\t0x0070: 'VLINE',\\n\\t0x0071: 'HLINE',\\n\\t0x0072: 'VPAGE',\\n\\t0x0073: 'HPAGE',\\n\\t0x0074: 'VSCROLL',\\n\\t0x0075: 'HSCROLL',\\n\\t0x0076: 'ALERT',\\n\\t0x0077: 'NEW',\\n\\t0x0078: 'CANCEL.COPY',\\n\\t0x0079: 'SHOW.CLIPBOARD',\\n\\t0x007A: 'MESSAGE',\\n\\t0x007C: 'PASTE.LINK',\\n\\t0x007D: 'APP.ACTIVATE',\\n\\t0x007E: 'DELETE.ARROW',\\n\\t0x007F: 'ROW.HEIGHT',\\n\\t0x0080: 'FORMAT.MOVE',\\n\\t0x0081: 'FORMAT.SIZE',\\n\\t0x0082: 'FORMULA.REPLACE',\\n\\t0x0083: 'SEND.KEYS',\\n\\t0x0084: 'SELECT.SPECIAL',\\n\\t0x0085: 'APPLY.NAMES',\\n\\t0x0086: 'REPLACE.FONT',\\n\\t0x0087: 'FREEZE.PANES',\\n\\t0x0088: 'SHOW.INFO',\\n\\t0x0089: 'SPLIT',\\n\\t0x008A: 'ON.WINDOW',\\n\\t0x008B: 'ON.DATA',\\n\\t0x008C: 'DISABLE.INPUT',\\n\\t0x008E: 'OUTLINE',\\n\\t0x008F: 'LIST.NAMES',\\n\\t0x0090: 'FILE.CLOSE',\\n\\t0x0091: 'SAVE.WORKBOOK',\\n\\t0x0092: 'DATA.FORM',\\n\\t0x0093: 'COPY.CHART',\\n\\t0x0094: 'ON.TIME',\\n\\t0x0095: 'WAIT',\\n\\t0x0096: 'FORMAT.FONT',\\n\\t0x0097: 'FILL.UP',\\n\\t0x0098: 'FILL.LEFT',\\n\\t0x0099: 'DELETE.OVERLAY',\\n\\t0x009B: 'SHORT.MENUS',\\n\\t0x009F: 'SET.UPDATE.STATUS',\\n\\t0x00A1: 'COLOR.PALETTE',\\n\\t0x00A2: 'DELETE.STYLE',\\n\\t0x00A3: 'WINDOW.RESTORE',\\n\\t0x00A4: 'WINDOW.MAXIMIZE',\\n\\t0x00A6: 'CHANGE.LINK',\\n\\t0x00A7: 'CALCULATE.DOCUMENT',\\n\\t0x00A8: 'ON.KEY',\\n\\t0x00A9: 'APP.RESTORE',\\n\\t0x00AA: 'APP.MOVE',\\n\\t0x00AB: 'APP.SIZE',\\n\\t0x00AC: 'APP.MINIMIZE',\\n\\t0x00AD: 'APP.MAXIMIZE',\\n\\t0x00AE: 'BRING.TO.FRONT',\\n\\t0x00AF: 'SEND.TO.BACK',\\n\\t0x00B9: 'MAIN.CHART.TYPE',\\n\\t0x00BA: 'OVERLAY.CHART.TYPE',\\n\\t0x00BB: 'SELECT.END',\\n\\t0x00BC: 'OPEN.MAIL',\\n\\t0x00BD: 'SEND.MAIL',\\n\\t0x00BE: 'STANDARD.FONT',\\n\\t0x00BF: 'CONSOLIDATE',\\n\\t0x00C0: 'SORT.SPECIAL',\\n\\t0x00C1: 'GALLERY.3D.AREA',\\n\\t0x00C2: 'GALLERY.3D.COLUMN',\\n\\t0x00C3: 'GALLERY.3D.LINE',\\n\\t0x00C4: 'GALLERY.3D.PIE',\\n\\t0x00C5: 'VIEW.3D',\\n\\t0x00C6: 'GOAL.SEEK',\\n\\t0x00C7: 'WORKGROUP',\\n\\t0x00C8: 'FILL.GROUP',\\n\\t0x00C9: 'UPDATE.LINK',\\n\\t0x00CA: 'PROMOTE',\\n\\t0x00CB: 'DEMOTE',\\n\\t0x00CC: 'SHOW.DETAIL',\\n\\t0x00CE: 'UNGROUP',\\n\\t0x00CF: 'OBJECT.PROPERTIES',\\n\\t0x00D0: 'SAVE.NEW.OBJECT',\\n\\t0x00D1: 'SHARE',\\n\\t0x00D2: 'SHARE.NAME',\\n\\t0x00D3: 'DUPLICATE',\\n\\t0x00D4: 'APPLY.STYLE',\\n\\t0x00D5: 'ASSIGN.TO.OBJECT',\\n\\t0x00D6: 'OBJECT.PROTECTION',\\n\\t0x00D7: 'HIDE.OBJECT',\\n\\t0x00D8: 'SET.EXTRACT',\\n\\t0x00D9: 'CREATE.PUBLISHER',\\n\\t0x00DA: 'SUBSCRIBE.TO',\\n\\t0x00DB: 'ATTRIBUTES',\\n\\t0x00DC: 'SHOW.TOOLBAR',\\n\\t0x00DE: 'PRINT.PREVIEW',\\n\\t0x00DF: 'EDIT.COLOR',\\n\\t0x00E0: 'SHOW.LEVELS',\\n\\t0x00E1: 'FORMAT.MAIN',\\n\\t0x00E2: 'FORMAT.OVERLAY',\\n\\t0x00E3: 'ON.RECALC',\\n\\t0x00E4: 'EDIT.SERIES',\\n\\t0x00E5: 'DEFINE.STYLE',\\n\\t0x00F0: 'LINE.PRINT',\\n\\t0x00F3: 'ENTER.DATA',\\n\\t0x00F9: 'GALLERY.RADAR',\\n\\t0x00FA: 'MERGE.STYLES',\\n\\t0x00FB: 'EDITION.OPTIONS',\\n\\t0x00FC: 'PASTE.PICTURE',\\n\\t0x00FD: 'PASTE.PICTURE.LINK',\\n\\t0x00FE: 'SPELLING',\\n\\t0x0100: 'ZOOM',\\n\\t0x0103: 'INSERT.OBJECT',\\n\\t0x0104: 'WINDOW.MINIMIZE',\\n\\t0x0109: 'SOUND.NOTE',\\n\\t0x010A: 'SOUND.PLAY',\\n\\t0x010B: 'FORMAT.SHAPE',\\n\\t0x010C: 'EXTEND.POLYGON',\\n\\t0x010D: 'FORMAT.AUTO',\\n\\t0x0110: 'GALLERY.3D.BAR',\\n\\t0x0111: 'GALLERY.3D.SURFACE',\\n\\t0x0112: 'FILL.AUTO',\\n\\t0x0114: 'CUSTOMIZE.TOOLBAR',\\n\\t0x0115: 'ADD.TOOL',\\n\\t0x0116: 'EDIT.OBJECT',\\n\\t0x0117: 'ON.DOUBLECLICK',\\n\\t0x0118: 'ON.ENTRY',\\n\\t0x0119: 'WORKBOOK.ADD',\\n\\t0x011A: 'WORKBOOK.MOVE',\\n\\t0x011B: 'WORKBOOK.COPY',\\n\\t0x011C: 'WORKBOOK.OPTIONS',\\n\\t0x011D: 'SAVE.WORKSPACE',\\n\\t0x0120: 'CHART.WIZARD',\\n\\t0x0121: 'DELETE.TOOL',\\n\\t0x0122: 'MOVE.TOOL',\\n\\t0x0123: 'WORKBOOK.SELECT',\\n\\t0x0124: 'WORKBOOK.ACTIVATE',\\n\\t0x0125: 'ASSIGN.TO.TOOL',\\n\\t0x0127: 'COPY.TOOL',\\n\\t0x0128: 'RESET.TOOL',\\n\\t0x0129: 'CONSTRAIN.NUMERIC',\\n\\t0x012A: 'PASTE.TOOL',\\n\\t0x012E: 'WORKBOOK.NEW',\\n\\t0x0131: 'SCENARIO.CELLS',\\n\\t0x0132: 'SCENARIO.DELETE',\\n\\t0x0133: 'SCENARIO.ADD',\\n\\t0x0134: 'SCENARIO.EDIT',\\n\\t0x0135: 'SCENARIO.SHOW',\\n\\t0x0136: 'SCENARIO.SHOW.NEXT',\\n\\t0x0137: 'SCENARIO.SUMMARY',\\n\\t0x0138: 'PIVOT.TABLE.WIZARD',\\n\\t0x0139: 'PIVOT.FIELD.PROPERTIES',\\n\\t0x013A: 'PIVOT.FIELD',\\n\\t0x013B: 'PIVOT.ITEM',\\n\\t0x013C: 'PIVOT.ADD.FIELDS',\\n\\t0x013E: 'OPTIONS.CALCULATION',\\n\\t0x013F: 'OPTIONS.EDIT',\\n\\t0x0140: 'OPTIONS.VIEW',\\n\\t0x0141: 'ADDIN.MANAGER',\\n\\t0x0142: 'MENU.EDITOR',\\n\\t0x0143: 'ATTACH.TOOLBARS',\\n\\t0x0144: 'VBAActivate',\\n\\t0x0145: 'OPTIONS.CHART',\\n\\t0x0148: 'VBA.INSERT.FILE',\\n\\t0x014A: 'VBA.PROCEDURE.DEFINITION',\\n\\t0x0150: 'ROUTING.SLIP',\\n\\t0x0152: 'ROUTE.DOCUMENT',\\n\\t0x0153: 'MAIL.LOGON',\\n\\t0x0156: 'INSERT.PICTURE',\\n\\t0x0157: 'EDIT.TOOL',\\n\\t0x0158: 'GALLERY.DOUGHNUT',\\n\\t0x015E: 'CHART.TREND',\\n\\t0x0160: 'PIVOT.ITEM.PROPERTIES',\\n\\t0x0162: 'WORKBOOK.INSERT',\\n\\t0x0163: 'OPTIONS.TRANSITION',\\n\\t0x0164: 'OPTIONS.GENERAL',\\n\\t0x0172: 'FILTER.ADVANCED',\\n\\t0x0175: 'MAIL.ADD.MAILER',\\n\\t0x0176: 'MAIL.DELETE.MAILER',\\n\\t0x0177: 'MAIL.REPLY',\\n\\t0x0178: 'MAIL.REPLY.ALL',\\n\\t0x0179: 'MAIL.FORWARD',\\n\\t0x017A: 'MAIL.NEXT.LETTER',\\n\\t0x017B: 'DATA.LABEL',\\n\\t0x017C: 'INSERT.TITLE',\\n\\t0x017D: 'FONT.PROPERTIES',\\n\\t0x017E: 'MACRO.OPTIONS',\\n\\t0x017F: 'WORKBOOK.HIDE',\\n\\t0x0180: 'WORKBOOK.UNHIDE',\\n\\t0x0181: 'WORKBOOK.DELETE',\\n\\t0x0182: 'WORKBOOK.NAME',\\n\\t0x0184: 'GALLERY.CUSTOM',\\n\\t0x0186: 'ADD.CHART.AUTOFORMAT',\\n\\t0x0187: 'DELETE.CHART.AUTOFORMAT',\\n\\t0x0188: 'CHART.ADD.DATA',\\n\\t0x0189: 'AUTO.OUTLINE',\\n\\t0x018A: 'TAB.ORDER',\\n\\t0x018B: 'SHOW.DIALOG',\\n\\t0x018C: 'SELECT.ALL',\\n\\t0x018D: 'UNGROUP.SHEETS',\\n\\t0x018E: 'SUBTOTAL.CREATE',\\n\\t0x018F: 'SUBTOTAL.REMOVE',\\n\\t0x0190: 'RENAME.OBJECT',\\n\\t0x019C: 'WORKBOOK.SCROLL',\\n\\t0x019D: 'WORKBOOK.NEXT',\\n\\t0x019E: 'WORKBOOK.PREV',\\n\\t0x019F: 'WORKBOOK.TAB.SPLIT',\\n\\t0x01A0: 'FULL.SCREEN',\\n\\t0x01A1: 'WORKBOOK.PROTECT',\\n\\t0x01A4: 'SCROLLBAR.PROPERTIES',\\n\\t0x01A5: 'PIVOT.SHOW.PAGES',\\n\\t0x01A6: 'TEXT.TO.COLUMNS',\\n\\t0x01A7: 'FORMAT.CHARTTYPE',\\n\\t0x01A8: 'LINK.FORMAT',\\n\\t0x01A9: 'TRACER.DISPLAY',\\n\\t0x01AE: 'TRACER.NAVIGATE',\\n\\t0x01AF: 'TRACER.CLEAR',\\n\\t0x01B0: 'TRACER.ERROR',\\n\\t0x01B1: 'PIVOT.FIELD.GROUP',\\n\\t0x01B2: 'PIVOT.FIELD.UNGROUP',\\n\\t0x01B3: 'CHECKBOX.PROPERTIES',\\n\\t0x01B4: 'LABEL.PROPERTIES',\\n\\t0x01B5: 'LISTBOX.PROPERTIES',\\n\\t0x01B6: 'EDITBOX.PROPERTIES',\\n\\t0x01B7: 'PIVOT.REFRESH',\\n\\t0x01B8: 'LINK.COMBO',\\n\\t0x01B9: 'OPEN.TEXT',\\n\\t0x01BA: 'HIDE.DIALOG',\\n\\t0x01BB: 'SET.DIALOG.FOCUS',\\n\\t0x01BC: 'ENABLE.OBJECT',\\n\\t0x01BD: 'PUSHBUTTON.PROPERTIES',\\n\\t0x01BE: 'SET.DIALOG.DEFAULT',\\n\\t0x01BF: 'FILTER',\\n\\t0x01C0: 'FILTER.SHOW.ALL',\\n\\t0x01C1: 'CLEAR.OUTLINE',\\n\\t0x01C2: 'FUNCTION.WIZARD',\\n\\t0x01C3: 'ADD.LIST.ITEM',\\n\\t0x01C4: 'SET.LIST.ITEM',\\n\\t0x01C5: 'REMOVE.LIST.ITEM',\\n\\t0x01C6: 'SELECT.LIST.ITEM',\\n\\t0x01C7: 'SET.CONTROL.VALUE',\\n\\t0x01C8: 'SAVE.COPY.AS',\\n\\t0x01CA: 'OPTIONS.LISTS.ADD',\\n\\t0x01CB: 'OPTIONS.LISTS.DELETE',\\n\\t0x01CC: 'SERIES.AXES',\\n\\t0x01CD: 'SERIES.X',\\n\\t0x01CE: 'SERIES.Y',\\n\\t0x01CF: 'ERRORBAR.X',\\n\\t0x01D0: 'ERRORBAR.Y',\\n\\t0x01D1: 'FORMAT.CHART',\\n\\t0x01D2: 'SERIES.ORDER',\\n\\t0x01D3: 'MAIL.LOGOFF',\\n\\t0x01D4: 'CLEAR.ROUTING.SLIP',\\n\\t0x01D5: 'APP.ACTIVATE.MICROSOFT',\\n\\t0x01D6: 'MAIL.EDIT.MAILER',\\n\\t0x01D7: 'ON.SHEET',\\n\\t0x01D8: 'STANDARD.WIDTH',\\n\\t0x01D9: 'SCENARIO.MERGE',\\n\\t0x01DA: 'SUMMARY.INFO',\\n\\t0x01DB: 'FIND.FILE',\\n\\t0x01DC: 'ACTIVE.CELL.FONT',\\n\\t0x01DD: 'ENABLE.TIPWIZARD',\\n\\t0x01DE: 'VBA.MAKE.ADDIN',\\n\\t0x01E0: 'INSERTDATATABLE',\\n\\t0x01E1: 'WORKGROUP.OPTIONS',\\n\\t0x01E2: 'MAIL.SEND.MAILER',\\n\\t0x01E5: 'AUTOCORRECT',\\n\\t0x01E9: 'POST.DOCUMENT',\\n\\t0x01EB: 'PICKLIST',\\n\\t0x01ED: 'VIEW.SHOW',\\n\\t0x01EE: 'VIEW.DEFINE',\\n\\t0x01EF: 'VIEW.DELETE',\\n\\t0x01FD: 'SHEET.BACKGROUND',\\n\\t0x01FE: 'INSERT.MAP.OBJECT',\\n\\t0x01FF: 'OPTIONS.MENONO',\\n\\t0x0205: 'MSOCHECKS',\\n\\t0x0206: 'NORMAL',\\n\\t0x0207: 'LAYOUT',\\n\\t0x0208: 'RM.PRINT.AREA',\\n\\t0x0209: 'CLEAR.PRINT.AREA',\\n\\t0x020A: 'ADD.PRINT.AREA',\\n\\t0x020B: 'MOVE.BRK',\\n\\t0x0221: 'HIDECURR.NOTE',\\n\\t0x0222: 'HIDEALL.NOTES',\\n\\t0x0223: 'DELETE.NOTE',\\n\\t0x0224: 'TRAVERSE.NOTES',\\n\\t0x0225: 'ACTIVATE.NOTES',\\n\\t0x026C: 'PROTECT.REVISIONS',\\n\\t0x026D: 'UNPROTECT.REVISIONS',\\n\\t0x0287: 'OPTIONS.ME',\\n\\t0x028D: 'WEB.PUBLISH',\\n\\t0x029B: 'NEWWEBQUERY',\\n\\t0x02A1: 'PIVOT.TABLE.CHART',\\n\\t0x02F1: 'OPTIONS.SAVE',\\n\\t0x02F3: 'OPTIONS.SPELL',\\n\\t0x0328: 'HIDEALL.INKANNOTS'\\n};\\n\\n/* [MS-XLS] 2.5.198.17 */\\nvar Ftab = {\\n\\t0x0000: 'COUNT',\\n\\t0x0001: 'IF',\\n\\t0x0002: 'ISNA',\\n\\t0x0003: 'ISERROR',\\n\\t0x0004: 'SUM',\\n\\t0x0005: 'AVERAGE',\\n\\t0x0006: 'MIN',\\n\\t0x0007: 'MAX',\\n\\t0x0008: 'ROW',\\n\\t0x0009: 'COLUMN',\\n\\t0x000A: 'NA',\\n\\t0x000B: 'NPV',\\n\\t0x000C: 'STDEV',\\n\\t0x000D: 'DOLLAR',\\n\\t0x000E: 'FIXED',\\n\\t0x000F: 'SIN',\\n\\t0x0010: 'COS',\\n\\t0x0011: 'TAN',\\n\\t0x0012: 'ATAN',\\n\\t0x0013: 'PI',\\n\\t0x0014: 'SQRT',\\n\\t0x0015: 'EXP',\\n\\t0x0016: 'LN',\\n\\t0x0017: 'LOG10',\\n\\t0x0018: 'ABS',\\n\\t0x0019: 'INT',\\n\\t0x001A: 'SIGN',\\n\\t0x001B: 'ROUND',\\n\\t0x001C: 'LOOKUP',\\n\\t0x001D: 'INDEX',\\n\\t0x001E: 'REPT',\\n\\t0x001F: 'MID',\\n\\t0x0020: 'LEN',\\n\\t0x0021: 'VALUE',\\n\\t0x0022: 'TRUE',\\n\\t0x0023: 'FALSE',\\n\\t0x0024: 'AND',\\n\\t0x0025: 'OR',\\n\\t0x0026: 'NOT',\\n\\t0x0027: 'MOD',\\n\\t0x0028: 'DCOUNT',\\n\\t0x0029: 'DSUM',\\n\\t0x002A: 'DAVERAGE',\\n\\t0x002B: 'DMIN',\\n\\t0x002C: 'DMAX',\\n\\t0x002D: 'DSTDEV',\\n\\t0x002E: 'VAR',\\n\\t0x002F: 'DVAR',\\n\\t0x0030: 'TEXT',\\n\\t0x0031: 'LINEST',\\n\\t0x0032: 'TREND',\\n\\t0x0033: 'LOGEST',\\n\\t0x0034: 'GROWTH',\\n\\t0x0035: 'GOTO',\\n\\t0x0036: 'HALT',\\n\\t0x0037: 'RETURN',\\n\\t0x0038: 'PV',\\n\\t0x0039: 'FV',\\n\\t0x003A: 'NPER',\\n\\t0x003B: 'PMT',\\n\\t0x003C: 'RATE',\\n\\t0x003D: 'MIRR',\\n\\t0x003E: 'IRR',\\n\\t0x003F: 'RAND',\\n\\t0x0040: 'MATCH',\\n\\t0x0041: 'DATE',\\n\\t0x0042: 'TIME',\\n\\t0x0043: 'DAY',\\n\\t0x0044: 'MONTH',\\n\\t0x0045: 'YEAR',\\n\\t0x0046: 'WEEKDAY',\\n\\t0x0047: 'HOUR',\\n\\t0x0048: 'MINUTE',\\n\\t0x0049: 'SECOND',\\n\\t0x004A: 'NOW',\\n\\t0x004B: 'AREAS',\\n\\t0x004C: 'ROWS',\\n\\t0x004D: 'COLUMNS',\\n\\t0x004E: 'OFFSET',\\n\\t0x004F: 'ABSREF',\\n\\t0x0050: 'RELREF',\\n\\t0x0051: 'ARGUMENT',\\n\\t0x0052: 'SEARCH',\\n\\t0x0053: 'TRANSPOSE',\\n\\t0x0054: 'ERROR',\\n\\t0x0055: 'STEP',\\n\\t0x0056: 'TYPE',\\n\\t0x0057: 'ECHO',\\n\\t0x0058: 'SET.NAME',\\n\\t0x0059: 'CALLER',\\n\\t0x005A: 'DEREF',\\n\\t0x005B: 'WINDOWS',\\n\\t0x005C: 'SERIES',\\n\\t0x005D: 'DOCUMENTS',\\n\\t0x005E: 'ACTIVE.CELL',\\n\\t0x005F: 'SELECTION',\\n\\t0x0060: 'RESULT',\\n\\t0x0061: 'ATAN2',\\n\\t0x0062: 'ASIN',\\n\\t0x0063: 'ACOS',\\n\\t0x0064: 'CHOOSE',\\n\\t0x0065: 'HLOOKUP',\\n\\t0x0066: 'VLOOKUP',\\n\\t0x0067: 'LINKS',\\n\\t0x0068: 'INPUT',\\n\\t0x0069: 'ISREF',\\n\\t0x006A: 'GET.FORMULA',\\n\\t0x006B: 'GET.NAME',\\n\\t0x006C: 'SET.VALUE',\\n\\t0x006D: 'LOG',\\n\\t0x006E: 'EXEC',\\n\\t0x006F: 'CHAR',\\n\\t0x0070: 'LOWER',\\n\\t0x0071: 'UPPER',\\n\\t0x0072: 'PROPER',\\n\\t0x0073: 'LEFT',\\n\\t0x0074: 'RIGHT',\\n\\t0x0075: 'EXACT',\\n\\t0x0076: 'TRIM',\\n\\t0x0077: 'REPLACE',\\n\\t0x0078: 'SUBSTITUTE',\\n\\t0x0079: 'CODE',\\n\\t0x007A: 'NAMES',\\n\\t0x007B: 'DIRECTORY',\\n\\t0x007C: 'FIND',\\n\\t0x007D: 'CELL',\\n\\t0x007E: 'ISERR',\\n\\t0x007F: 'ISTEXT',\\n\\t0x0080: 'ISNUMBER',\\n\\t0x0081: 'ISBLANK',\\n\\t0x0082: 'T',\\n\\t0x0083: 'N',\\n\\t0x0084: 'FOPEN',\\n\\t0x0085: 'FCLOSE',\\n\\t0x0086: 'FSIZE',\\n\\t0x0087: 'FREADLN',\\n\\t0x0088: 'FREAD',\\n\\t0x0089: 'FWRITELN',\\n\\t0x008A: 'FWRITE',\\n\\t0x008B: 'FPOS',\\n\\t0x008C: 'DATEVALUE',\\n\\t0x008D: 'TIMEVALUE',\\n\\t0x008E: 'SLN',\\n\\t0x008F: 'SYD',\\n\\t0x0090: 'DDB',\\n\\t0x0091: 'GET.DEF',\\n\\t0x0092: 'REFTEXT',\\n\\t0x0093: 'TEXTREF',\\n\\t0x0094: 'INDIRECT',\\n\\t0x0095: 'REGISTER',\\n\\t0x0096: 'CALL',\\n\\t0x0097: 'ADD.BAR',\\n\\t0x0098: 'ADD.MENU',\\n\\t0x0099: 'ADD.COMMAND',\\n\\t0x009A: 'ENABLE.COMMAND',\\n\\t0x009B: 'CHECK.COMMAND',\\n\\t0x009C: 'RENAME.COMMAND',\\n\\t0x009D: 'SHOW.BAR',\\n\\t0x009E: 'DELETE.MENU',\\n\\t0x009F: 'DELETE.COMMAND',\\n\\t0x00A0: 'GET.CHART.ITEM',\\n\\t0x00A1: 'DIALOG.BOX',\\n\\t0x00A2: 'CLEAN',\\n\\t0x00A3: 'MDETERM',\\n\\t0x00A4: 'MINVERSE',\\n\\t0x00A5: 'MMULT',\\n\\t0x00A6: 'FILES',\\n\\t0x00A7: 'IPMT',\\n\\t0x00A8: 'PPMT',\\n\\t0x00A9: 'COUNTA',\\n\\t0x00AA: 'CANCEL.KEY',\\n\\t0x00AB: 'FOR',\\n\\t0x00AC: 'WHILE',\\n\\t0x00AD: 'BREAK',\\n\\t0x00AE: 'NEXT',\\n\\t0x00AF: 'INITIATE',\\n\\t0x00B0: 'REQUEST',\\n\\t0x00B1: 'POKE',\\n\\t0x00B2: 'EXECUTE',\\n\\t0x00B3: 'TERMINATE',\\n\\t0x00B4: 'RESTART',\\n\\t0x00B5: 'HELP',\\n\\t0x00B6: 'GET.BAR',\\n\\t0x00B7: 'PRODUCT',\\n\\t0x00B8: 'FACT',\\n\\t0x00B9: 'GET.CELL',\\n\\t0x00BA: 'GET.WORKSPACE',\\n\\t0x00BB: 'GET.WINDOW',\\n\\t0x00BC: 'GET.DOCUMENT',\\n\\t0x00BD: 'DPRODUCT',\\n\\t0x00BE: 'ISNONTEXT',\\n\\t0x00BF: 'GET.NOTE',\\n\\t0x00C0: 'NOTE',\\n\\t0x00C1: 'STDEVP',\\n\\t0x00C2: 'VARP',\\n\\t0x00C3: 'DSTDEVP',\\n\\t0x00C4: 'DVARP',\\n\\t0x00C5: 'TRUNC',\\n\\t0x00C6: 'ISLOGICAL',\\n\\t0x00C7: 'DCOUNTA',\\n\\t0x00C8: 'DELETE.BAR',\\n\\t0x00C9: 'UNREGISTER',\\n\\t0x00CC: 'USDOLLAR',\\n\\t0x00CD: 'FINDB',\\n\\t0x00CE: 'SEARCHB',\\n\\t0x00CF: 'REPLACEB',\\n\\t0x00D0: 'LEFTB',\\n\\t0x00D1: 'RIGHTB',\\n\\t0x00D2: 'MIDB',\\n\\t0x00D3: 'LENB',\\n\\t0x00D4: 'ROUNDUP',\\n\\t0x00D5: 'ROUNDDOWN',\\n\\t0x00D6: 'ASC',\\n\\t0x00D7: 'DBCS',\\n\\t0x00D8: 'RANK',\\n\\t0x00DB: 'ADDRESS',\\n\\t0x00DC: 'DAYS360',\\n\\t0x00DD: 'TODAY',\\n\\t0x00DE: 'VDB',\\n\\t0x00DF: 'ELSE',\\n\\t0x00E0: 'ELSE.IF',\\n\\t0x00E1: 'END.IF',\\n\\t0x00E2: 'FOR.CELL',\\n\\t0x00E3: 'MEDIAN',\\n\\t0x00E4: 'SUMPRODUCT',\\n\\t0x00E5: 'SINH',\\n\\t0x00E6: 'COSH',\\n\\t0x00E7: 'TANH',\\n\\t0x00E8: 'ASINH',\\n\\t0x00E9: 'ACOSH',\\n\\t0x00EA: 'ATANH',\\n\\t0x00EB: 'DGET',\\n\\t0x00EC: 'CREATE.OBJECT',\\n\\t0x00ED: 'VOLATILE',\\n\\t0x00EE: 'LAST.ERROR',\\n\\t0x00EF: 'CUSTOM.UNDO',\\n\\t0x00F0: 'CUSTOM.REPEAT',\\n\\t0x00F1: 'FORMULA.CONVERT',\\n\\t0x00F2: 'GET.LINK.INFO',\\n\\t0x00F3: 'TEXT.BOX',\\n\\t0x00F4: 'INFO',\\n\\t0x00F5: 'GROUP',\\n\\t0x00F6: 'GET.OBJECT',\\n\\t0x00F7: 'DB',\\n\\t0x00F8: 'PAUSE',\\n\\t0x00FB: 'RESUME',\\n\\t0x00FC: 'FREQUENCY',\\n\\t0x00FD: 'ADD.TOOLBAR',\\n\\t0x00FE: 'DELETE.TOOLBAR',\\n\\t0x00FF: 'User',\\n\\t0x0100: 'RESET.TOOLBAR',\\n\\t0x0101: 'EVALUATE',\\n\\t0x0102: 'GET.TOOLBAR',\\n\\t0x0103: 'GET.TOOL',\\n\\t0x0104: 'SPELLING.CHECK',\\n\\t0x0105: 'ERROR.TYPE',\\n\\t0x0106: 'APP.TITLE',\\n\\t0x0107: 'WINDOW.TITLE',\\n\\t0x0108: 'SAVE.TOOLBAR',\\n\\t0x0109: 'ENABLE.TOOL',\\n\\t0x010A: 'PRESS.TOOL',\\n\\t0x010B: 'REGISTER.ID',\\n\\t0x010C: 'GET.WORKBOOK',\\n\\t0x010D: 'AVEDEV',\\n\\t0x010E: 'BETADIST',\\n\\t0x010F: 'GAMMALN',\\n\\t0x0110: 'BETAINV',\\n\\t0x0111: 'BINOMDIST',\\n\\t0x0112: 'CHIDIST',\\n\\t0x0113: 'CHIINV',\\n\\t0x0114: 'COMBIN',\\n\\t0x0115: 'CONFIDENCE',\\n\\t0x0116: 'CRITBINOM',\\n\\t0x0117: 'EVEN',\\n\\t0x0118: 'EXPONDIST',\\n\\t0x0119: 'FDIST',\\n\\t0x011A: 'FINV',\\n\\t0x011B: 'FISHER',\\n\\t0x011C: 'FISHERINV',\\n\\t0x011D: 'FLOOR',\\n\\t0x011E: 'GAMMADIST',\\n\\t0x011F: 'GAMMAINV',\\n\\t0x0120: 'CEILING',\\n\\t0x0121: 'HYPGEOMDIST',\\n\\t0x0122: 'LOGNORMDIST',\\n\\t0x0123: 'LOGINV',\\n\\t0x0124: 'NEGBINOMDIST',\\n\\t0x0125: 'NORMDIST',\\n\\t0x0126: 'NORMSDIST',\\n\\t0x0127: 'NORMINV',\\n\\t0x0128: 'NORMSINV',\\n\\t0x0129: 'STANDARDIZE',\\n\\t0x012A: 'ODD',\\n\\t0x012B: 'PERMUT',\\n\\t0x012C: 'POISSON',\\n\\t0x012D: 'TDIST',\\n\\t0x012E: 'WEIBULL',\\n\\t0x012F: 'SUMXMY2',\\n\\t0x0130: 'SUMX2MY2',\\n\\t0x0131: 'SUMX2PY2',\\n\\t0x0132: 'CHITEST',\\n\\t0x0133: 'CORREL',\\n\\t0x0134: 'COVAR',\\n\\t0x0135: 'FORECAST',\\n\\t0x0136: 'FTEST',\\n\\t0x0137: 'INTERCEPT',\\n\\t0x0138: 'PEARSON',\\n\\t0x0139: 'RSQ',\\n\\t0x013A: 'STEYX',\\n\\t0x013B: 'SLOPE',\\n\\t0x013C: 'TTEST',\\n\\t0x013D: 'PROB',\\n\\t0x013E: 'DEVSQ',\\n\\t0x013F: 'GEOMEAN',\\n\\t0x0140: 'HARMEAN',\\n\\t0x0141: 'SUMSQ',\\n\\t0x0142: 'KURT',\\n\\t0x0143: 'SKEW',\\n\\t0x0144: 'ZTEST',\\n\\t0x0145: 'LARGE',\\n\\t0x0146: 'SMALL',\\n\\t0x0147: 'QUARTILE',\\n\\t0x0148: 'PERCENTILE',\\n\\t0x0149: 'PERCENTRANK',\\n\\t0x014A: 'MODE',\\n\\t0x014B: 'TRIMMEAN',\\n\\t0x014C: 'TINV',\\n\\t0x014E: 'MOVIE.COMMAND',\\n\\t0x014F: 'GET.MOVIE',\\n\\t0x0150: 'CONCATENATE',\\n\\t0x0151: 'POWER',\\n\\t0x0152: 'PIVOT.ADD.DATA',\\n\\t0x0153: 'GET.PIVOT.TABLE',\\n\\t0x0154: 'GET.PIVOT.FIELD',\\n\\t0x0155: 'GET.PIVOT.ITEM',\\n\\t0x0156: 'RADIANS',\\n\\t0x0157: 'DEGREES',\\n\\t0x0158: 'SUBTOTAL',\\n\\t0x0159: 'SUMIF',\\n\\t0x015A: 'COUNTIF',\\n\\t0x015B: 'COUNTBLANK',\\n\\t0x015C: 'SCENARIO.GET',\\n\\t0x015D: 'OPTIONS.LISTS.GET',\\n\\t0x015E: 'ISPMT',\\n\\t0x015F: 'DATEDIF',\\n\\t0x0160: 'DATESTRING',\\n\\t0x0161: 'NUMBERSTRING',\\n\\t0x0162: 'ROMAN',\\n\\t0x0163: 'OPEN.DIALOG',\\n\\t0x0164: 'SAVE.DIALOG',\\n\\t0x0165: 'VIEW.GET',\\n\\t0x0166: 'GETPIVOTDATA',\\n\\t0x0167: 'HYPERLINK',\\n\\t0x0168: 'PHONETIC',\\n\\t0x0169: 'AVERAGEA',\\n\\t0x016A: 'MAXA',\\n\\t0x016B: 'MINA',\\n\\t0x016C: 'STDEVPA',\\n\\t0x016D: 'VARPA',\\n\\t0x016E: 'STDEVA',\\n\\t0x016F: 'VARA',\\n\\t0x0170: 'BAHTTEXT',\\n\\t0x0171: 'THAIDAYOFWEEK',\\n\\t0x0172: 'THAIDIGIT',\\n\\t0x0173: 'THAIMONTHOFYEAR',\\n\\t0x0174: 'THAINUMSOUND',\\n\\t0x0175: 'THAINUMSTRING',\\n\\t0x0176: 'THAISTRINGLENGTH',\\n\\t0x0177: 'ISTHAIDIGIT',\\n\\t0x0178: 'ROUNDBAHTDOWN',\\n\\t0x0179: 'ROUNDBAHTUP',\\n\\t0x017A: 'THAIYEAR',\\n\\t0x017B: 'RTD'\\n};\\nvar FtabArgc = {\\n\\t0x0002: 1, /* ISNA */\\n\\t0x0003: 1, /* ISERROR */\\n\\t0x000F: 1, /* SIN */\\n\\t0x0010: 1, /* COS */\\n\\t0x0011: 1, /* TAN */\\n\\t0x0012: 1, /* ATAN */\\n\\t0x0014: 1, /* SQRT */\\n\\t0x0015: 1, /* EXP */\\n\\t0x0016: 1, /* LN */\\n\\t0x0017: 1, /* LOG10 */\\n\\t0x0018: 1, /* ABS */\\n\\t0x0019: 1, /* INT */\\n\\t0x001A: 1, /* SIGN */\\n\\t0x001B: 2, /* ROUND */\\n\\t0x001E: 2, /* REPT */\\n\\t0x001F: 3, /* MID */\\n\\t0x0020: 1, /* LEN */\\n\\t0x0021: 1, /* VALUE */\\n\\t0x0026: 1, /* NOT */\\n\\t0x0027: 2, /* MOD */\\n\\t0x0028: 3, /* DCOUNT */\\n\\t0x0029: 3, /* DSUM */\\n\\t0x002A: 3, /* DAVERAGE */\\n\\t0x002B: 3, /* DMIN */\\n\\t0x002C: 3, /* DMAX */\\n\\t0x002D: 3, /* DSTDEV */\\n\\t0x002F: 3, /* DVAR */\\n\\t0x0030: 2, /* TEXT */\\n\\t0x0035: 1, /* GOTO */\\n\\t0x003D: 3, /* MIRR */\\n\\t0x0041: 3, /* DATE */\\n\\t0x0042: 3, /* TIME */\\n\\t0x0043: 1, /* DAY */\\n\\t0x0044: 1, /* MONTH */\\n\\t0x0045: 1, /* YEAR */\\n\\t0x0047: 1, /* HOUR */\\n\\t0x0048: 1, /* MINUTE */\\n\\t0x0049: 1, /* SECOND */\\n\\t0x004B: 1, /* AREAS */\\n\\t0x004C: 1, /* ROWS */\\n\\t0x004D: 1, /* COLUMNS */\\n\\t0x004F: 2, /* ABSREF */\\n\\t0x0050: 2, /* RELREF */\\n\\t0x0053: 1, /* TRANSPOSE */\\n\\t0x0056: 1, /* TYPE */\\n\\t0x005A: 1, /* DEREF */\\n\\t0x0061: 2, /* ATAN2 */\\n\\t0x0062: 1, /* ASIN */\\n\\t0x0063: 1, /* ACOS */\\n\\t0x0069: 1, /* ISREF */\\n\\t0x006F: 1, /* CHAR */\\n\\t0x0070: 1, /* LOWER */\\n\\t0x0071: 1, /* UPPER */\\n\\t0x0072: 1, /* PROPER */\\n\\t0x0075: 2, /* EXACT */\\n\\t0x0076: 1, /* TRIM */\\n\\t0x0077: 4, /* REPLACE */\\n\\t0x0079: 1, /* CODE */\\n\\t0x007E: 1, /* ISERR */\\n\\t0x007F: 1, /* ISTEXT */\\n\\t0x0080: 1, /* ISNUMBER */\\n\\t0x0081: 1, /* ISBLANK */\\n\\t0x0082: 1, /* T */\\n\\t0x0083: 1, /* N */\\n\\t0x0085: 1, /* FCLOSE */\\n\\t0x0086: 1, /* FSIZE */\\n\\t0x0087: 1, /* FREADLN */\\n\\t0x0088: 2, /* FREAD */\\n\\t0x0089: 2, /* FWRITELN */\\n\\t0x008A: 2, /* FWRITE */\\n\\t0x008C: 1, /* DATEVALUE */\\n\\t0x008D: 1, /* TIMEVALUE */\\n\\t0x008E: 3, /* SLN */\\n\\t0x008F: 4, /* SYD */\\n\\t0x00A2: 1, /* CLEAN */\\n\\t0x00A3: 1, /* MDETERM */\\n\\t0x00A4: 1, /* MINVERSE */\\n\\t0x00A5: 2, /* MMULT */\\n\\t0x00AC: 1, /* WHILE */\\n\\t0x00AF: 2, /* INITIATE */\\n\\t0x00B0: 2, /* REQUEST */\\n\\t0x00B1: 3, /* POKE */\\n\\t0x00B2: 2, /* EXECUTE */\\n\\t0x00B3: 1, /* TERMINATE */\\n\\t0x00B8: 1, /* FACT */\\n\\t0x00BD: 3, /* DPRODUCT */\\n\\t0x00BE: 1, /* ISNONTEXT */\\n\\t0x00C3: 3, /* DSTDEVP */\\n\\t0x00C4: 3, /* DVARP */\\n\\t0x00C6: 1, /* ISLOGICAL */\\n\\t0x00C7: 3, /* DCOUNTA */\\n\\t0x00C9: 1, /* UNREGISTER */\\n\\t0x00CF: 4, /* REPLACEB */\\n\\t0x00D2: 3, /* MIDB */\\n\\t0x00D3: 1, /* LENB */\\n\\t0x00D4: 2, /* ROUNDUP */\\n\\t0x00D5: 2, /* ROUNDDOWN */\\n\\t0x00D6: 1, /* ASC */\\n\\t0x00D7: 1, /* DBCS */\\n\\t0x00E5: 1, /* SINH */\\n\\t0x00E6: 1, /* COSH */\\n\\t0x00E7: 1, /* TANH */\\n\\t0x00E8: 1, /* ASINH */\\n\\t0x00E9: 1, /* ACOSH */\\n\\t0x00EA: 1, /* ATANH */\\n\\t0x00EB: 3, /* DGET */\\n\\t0x00F4: 1, /* INFO */\\n\\t0x00FC: 2, /* FREQUENCY */\\n\\t0x0101: 1, /* EVALUATE */\\n\\t0x0105: 1, /* ERROR.TYPE */\\n\\t0x010F: 1, /* GAMMALN */\\n\\t0x0111: 4, /* BINOMDIST */\\n\\t0x0112: 2, /* CHIDIST */\\n\\t0x0113: 2, /* CHIINV */\\n\\t0x0114: 2, /* COMBIN */\\n\\t0x0115: 3, /* CONFIDENCE */\\n\\t0x0116: 3, /* CRITBINOM */\\n\\t0x0117: 1, /* EVEN */\\n\\t0x0118: 3, /* EXPONDIST */\\n\\t0x0119: 3, /* FDIST */\\n\\t0x011A: 3, /* FINV */\\n\\t0x011B: 1, /* FISHER */\\n\\t0x011C: 1, /* FISHERINV */\\n\\t0x011D: 2, /* FLOOR */\\n\\t0x011E: 4, /* GAMMADIST */\\n\\t0x011F: 3, /* GAMMAINV */\\n\\t0x0120: 2, /* CEILING */\\n\\t0x0121: 4, /* HYPGEOMDIST */\\n\\t0x0122: 3, /* LOGNORMDIST */\\n\\t0x0123: 3, /* LOGINV */\\n\\t0x0124: 3, /* NEGBINOMDIST */\\n\\t0x0125: 4, /* NORMDIST */\\n\\t0x0126: 1, /* NORMSDIST */\\n\\t0x0127: 3, /* NORMINV */\\n\\t0x0128: 1, /* NORMSINV */\\n\\t0x0129: 3, /* STANDARDIZE */\\n\\t0x012A: 1, /* ODD */\\n\\t0x012B: 2, /* PERMUT */\\n\\t0x012C: 3, /* POISSON */\\n\\t0x012D: 3, /* TDIST */\\n\\t0x012E: 4, /* WEIBULL */\\n\\t0x012F: 2, /* SUMXMY2 */\\n\\t0x0130: 2, /* SUMX2MY2 */\\n\\t0x0131: 2, /* SUMX2PY2 */\\n\\t0x0132: 2, /* CHITEST */\\n\\t0x0133: 2, /* CORREL */\\n\\t0x0134: 2, /* COVAR */\\n\\t0x0135: 3, /* FORECAST */\\n\\t0x0136: 2, /* FTEST */\\n\\t0x0137: 2, /* INTERCEPT */\\n\\t0x0138: 2, /* PEARSON */\\n\\t0x0139: 2, /* RSQ */\\n\\t0x013A: 2, /* STEYX */\\n\\t0x013B: 2, /* SLOPE */\\n\\t0x013C: 4, /* TTEST */\\n\\t0x0145: 2, /* LARGE */\\n\\t0x0146: 2, /* SMALL */\\n\\t0x0147: 2, /* QUARTILE */\\n\\t0x0148: 2, /* PERCENTILE */\\n\\t0x014B: 2, /* TRIMMEAN */\\n\\t0x014C: 2, /* TINV */\\n\\t0x0151: 2, /* POWER */\\n\\t0x0156: 1, /* RADIANS */\\n\\t0x0157: 1, /* DEGREES */\\n\\t0x015A: 2, /* COUNTIF */\\n\\t0x015B: 1, /* COUNTBLANK */\\n\\t0x015E: 4, /* ISPMT */\\n\\t0x015F: 3, /* DATEDIF */\\n\\t0x0160: 1, /* DATESTRING */\\n\\t0x0161: 2, /* NUMBERSTRING */\\n\\t0x0168: 1, /* PHONETIC */\\n\\t0x0170: 1, /* BAHTTEXT */\\n\\t0x0171: 1, /* THAIDAYOFWEEK */\\n\\t0x0172: 1, /* THAIDIGIT */\\n\\t0x0173: 1, /* THAIMONTHOFYEAR */\\n\\t0x0174: 1, /* THAINUMSOUND */\\n\\t0x0175: 1, /* THAINUMSTRING */\\n\\t0x0176: 1, /* THAISTRINGLENGTH */\\n\\t0x0177: 1, /* ISTHAIDIGIT */\\n\\t0x0178: 1, /* ROUNDBAHTDOWN */\\n\\t0x0179: 1, /* ROUNDBAHTUP */\\n\\t0x017A: 1, /* THAIYEAR */\\n\\t0xFFFF: 0\\n};\\n/* [MS-XLSX] 2.2.3 Functions */\\nvar XLSXFutureFunctions = {\\n\\t\\\"_xlfn.ACOT\\\": \\\"ACOT\\\",\\n\\t\\\"_xlfn.ACOTH\\\": \\\"ACOTH\\\",\\n\\t\\\"_xlfn.AGGREGATE\\\": \\\"AGGREGATE\\\",\\n\\t\\\"_xlfn.ARABIC\\\": \\\"ARABIC\\\",\\n\\t\\\"_xlfn.AVERAGEIF\\\": \\\"AVERAGEIF\\\",\\n\\t\\\"_xlfn.AVERAGEIFS\\\": \\\"AVERAGEIFS\\\",\\n\\t\\\"_xlfn.BASE\\\": \\\"BASE\\\",\\n\\t\\\"_xlfn.BETA.DIST\\\": \\\"BETA.DIST\\\",\\n\\t\\\"_xlfn.BETA.INV\\\": \\\"BETA.INV\\\",\\n\\t\\\"_xlfn.BINOM.DIST\\\": \\\"BINOM.DIST\\\",\\n\\t\\\"_xlfn.BINOM.DIST.RANGE\\\": \\\"BINOM.DIST.RANGE\\\",\\n\\t\\\"_xlfn.BINOM.INV\\\": \\\"BINOM.INV\\\",\\n\\t\\\"_xlfn.BITAND\\\": \\\"BITAND\\\",\\n\\t\\\"_xlfn.BITLSHIFT\\\": \\\"BITLSHIFT\\\",\\n\\t\\\"_xlfn.BITOR\\\": \\\"BITOR\\\",\\n\\t\\\"_xlfn.BITRSHIFT\\\": \\\"BITRSHIFT\\\",\\n\\t\\\"_xlfn.BITXOR\\\": \\\"BITXOR\\\",\\n\\t\\\"_xlfn.CEILING.MATH\\\": \\\"CEILING.MATH\\\",\\n\\t\\\"_xlfn.CEILING.PRECISE\\\": \\\"CEILING.PRECISE\\\",\\n\\t\\\"_xlfn.CHISQ.DIST\\\": \\\"CHISQ.DIST\\\",\\n\\t\\\"_xlfn.CHISQ.DIST.RT\\\": \\\"CHISQ.DIST.RT\\\",\\n\\t\\\"_xlfn.CHISQ.INV\\\": \\\"CHISQ.INV\\\",\\n\\t\\\"_xlfn.CHISQ.INV.RT\\\": \\\"CHISQ.INV.RT\\\",\\n\\t\\\"_xlfn.CHISQ.TEST\\\": \\\"CHISQ.TEST\\\",\\n\\t\\\"_xlfn.COMBINA\\\": \\\"COMBINA\\\",\\n\\t\\\"_xlfn.CONFIDENCE.NORM\\\": \\\"CONFIDENCE.NORM\\\",\\n\\t\\\"_xlfn.CONFIDENCE.T\\\": \\\"CONFIDENCE.T\\\",\\n\\t\\\"_xlfn.COT\\\": \\\"COT\\\",\\n\\t\\\"_xlfn.COTH\\\": \\\"COTH\\\",\\n\\t\\\"_xlfn.COUNTIFS\\\": \\\"COUNTIFS\\\",\\n\\t\\\"_xlfn.COVARIANCE.P\\\": \\\"COVARIANCE.P\\\",\\n\\t\\\"_xlfn.COVARIANCE.S\\\": \\\"COVARIANCE.S\\\",\\n\\t\\\"_xlfn.CSC\\\": \\\"CSC\\\",\\n\\t\\\"_xlfn.CSCH\\\": \\\"CSCH\\\",\\n\\t\\\"_xlfn.DAYS\\\": \\\"DAYS\\\",\\n\\t\\\"_xlfn.DECIMAL\\\": \\\"DECIMAL\\\",\\n\\t\\\"_xlfn.ECMA.CEILING\\\": \\\"ECMA.CEILING\\\",\\n\\t\\\"_xlfn.ERF.PRECISE\\\": \\\"ERF.PRECISE\\\",\\n\\t\\\"_xlfn.ERFC.PRECISE\\\": \\\"ERFC.PRECISE\\\",\\n\\t\\\"_xlfn.EXPON.DIST\\\": \\\"EXPON.DIST\\\",\\n\\t\\\"_xlfn.F.DIST\\\": \\\"F.DIST\\\",\\n\\t\\\"_xlfn.F.DIST.RT\\\": \\\"F.DIST.RT\\\",\\n\\t\\\"_xlfn.F.INV\\\": \\\"F.INV\\\",\\n\\t\\\"_xlfn.F.INV.RT\\\": \\\"F.INV.RT\\\",\\n\\t\\\"_xlfn.F.TEST\\\": \\\"F.TEST\\\",\\n\\t\\\"_xlfn.FILTERXML\\\": \\\"FILTERXML\\\",\\n\\t\\\"_xlfn.FLOOR.MATH\\\": \\\"FLOOR.MATH\\\",\\n\\t\\\"_xlfn.FLOOR.PRECISE\\\": \\\"FLOOR.PRECISE\\\",\\n\\t\\\"_xlfn.FORMULATEXT\\\": \\\"FORMULATEXT\\\",\\n\\t\\\"_xlfn.GAMMA\\\": \\\"GAMMA\\\",\\n\\t\\\"_xlfn.GAMMA.DIST\\\": \\\"GAMMA.DIST\\\",\\n\\t\\\"_xlfn.GAMMA.INV\\\": \\\"GAMMA.INV\\\",\\n\\t\\\"_xlfn.GAMMALN.PRECISE\\\": \\\"GAMMALN.PRECISE\\\",\\n\\t\\\"_xlfn.GAUSS\\\": \\\"GAUSS\\\",\\n\\t\\\"_xlfn.HYPGEOM.DIST\\\": \\\"HYPGEOM.DIST\\\",\\n\\t\\\"_xlfn.IFNA\\\": \\\"IFNA\\\",\\n\\t\\\"_xlfn.IFERROR\\\": \\\"IFERROR\\\",\\n\\t\\\"_xlfn.IMCOSH\\\": \\\"IMCOSH\\\",\\n\\t\\\"_xlfn.IMCOT\\\": \\\"IMCOT\\\",\\n\\t\\\"_xlfn.IMCSC\\\": \\\"IMCSC\\\",\\n\\t\\\"_xlfn.IMCSCH\\\": \\\"IMCSCH\\\",\\n\\t\\\"_xlfn.IMSEC\\\": \\\"IMSEC\\\",\\n\\t\\\"_xlfn.IMSECH\\\": \\\"IMSECH\\\",\\n\\t\\\"_xlfn.IMSINH\\\": \\\"IMSINH\\\",\\n\\t\\\"_xlfn.IMTAN\\\": \\\"IMTAN\\\",\\n\\t\\\"_xlfn.ISFORMULA\\\": \\\"ISFORMULA\\\",\\n\\t\\\"_xlfn.ISO.CEILING\\\": \\\"ISO.CEILING\\\",\\n\\t\\\"_xlfn.ISOWEEKNUM\\\": \\\"ISOWEEKNUM\\\",\\n\\t\\\"_xlfn.LOGNORM.DIST\\\": \\\"LOGNORM.DIST\\\",\\n\\t\\\"_xlfn.LOGNORM.INV\\\": \\\"LOGNORM.INV\\\",\\n\\t\\\"_xlfn.MODE.MULT\\\": \\\"MODE.MULT\\\",\\n\\t\\\"_xlfn.MODE.SNGL\\\": \\\"MODE.SNGL\\\",\\n\\t\\\"_xlfn.MUNIT\\\": \\\"MUNIT\\\",\\n\\t\\\"_xlfn.NEGBINOM.DIST\\\": \\\"NEGBINOM.DIST\\\",\\n\\t\\\"_xlfn.NETWORKDAYS.INTL\\\": \\\"NETWORKDAYS.INTL\\\",\\n\\t\\\"_xlfn.NIGBINOM\\\": \\\"NIGBINOM\\\",\\n\\t\\\"_xlfn.NORM.DIST\\\": \\\"NORM.DIST\\\",\\n\\t\\\"_xlfn.NORM.INV\\\": \\\"NORM.INV\\\",\\n\\t\\\"_xlfn.NORM.S.DIST\\\": \\\"NORM.S.DIST\\\",\\n\\t\\\"_xlfn.NORM.S.INV\\\": \\\"NORM.S.INV\\\",\\n\\t\\\"_xlfn.NUMBERVALUE\\\": \\\"NUMBERVALUE\\\",\\n\\t\\\"_xlfn.PDURATION\\\": \\\"PDURATION\\\",\\n\\t\\\"_xlfn.PERCENTILE.EXC\\\": \\\"PERCENTILE.EXC\\\",\\n\\t\\\"_xlfn.PERCENTILE.INC\\\": \\\"PERCENTILE.INC\\\",\\n\\t\\\"_xlfn.PERCENTRANK.EXC\\\": \\\"PERCENTRANK.EXC\\\",\\n\\t\\\"_xlfn.PERCENTRANK.INC\\\": \\\"PERCENTRANK.INC\\\",\\n\\t\\\"_xlfn.PERMUTATIONA\\\": \\\"PERMUTATIONA\\\",\\n\\t\\\"_xlfn.PHI\\\": \\\"PHI\\\",\\n\\t\\\"_xlfn.POISSON.DIST\\\": \\\"POISSON.DIST\\\",\\n\\t\\\"_xlfn.QUARTILE.EXC\\\": \\\"QUARTILE.EXC\\\",\\n\\t\\\"_xlfn.QUARTILE.INC\\\": \\\"QUARTILE.INC\\\",\\n\\t\\\"_xlfn.QUERYSTRING\\\": \\\"QUERYSTRING\\\",\\n\\t\\\"_xlfn.RANK.AVG\\\": \\\"RANK.AVG\\\",\\n\\t\\\"_xlfn.RANK.EQ\\\": \\\"RANK.EQ\\\",\\n\\t\\\"_xlfn.RRI\\\": \\\"RRI\\\",\\n\\t\\\"_xlfn.SEC\\\": \\\"SEC\\\",\\n\\t\\\"_xlfn.SECH\\\": \\\"SECH\\\",\\n\\t\\\"_xlfn.SHEET\\\": \\\"SHEET\\\",\\n\\t\\\"_xlfn.SHEETS\\\": \\\"SHEETS\\\",\\n\\t\\\"_xlfn.SKEW.P\\\": \\\"SKEW.P\\\",\\n\\t\\\"_xlfn.STDEV.P\\\": \\\"STDEV.P\\\",\\n\\t\\\"_xlfn.STDEV.S\\\": \\\"STDEV.S\\\",\\n\\t\\\"_xlfn.SUMIFS\\\": \\\"SUMIFS\\\",\\n\\t\\\"_xlfn.T.DIST\\\": \\\"T.DIST\\\",\\n\\t\\\"_xlfn.T.DIST.2T\\\": \\\"T.DIST.2T\\\",\\n\\t\\\"_xlfn.T.DIST.RT\\\": \\\"T.DIST.RT\\\",\\n\\t\\\"_xlfn.T.INV\\\": \\\"T.INV\\\",\\n\\t\\\"_xlfn.T.INV.2T\\\": \\\"T.INV.2T\\\",\\n\\t\\\"_xlfn.T.TEST\\\": \\\"T.TEST\\\",\\n\\t\\\"_xlfn.UNICHAR\\\": \\\"UNICHAR\\\",\\n\\t\\\"_xlfn.UNICODE\\\": \\\"UNICODE\\\",\\n\\t\\\"_xlfn.VAR.P\\\": \\\"VAR.P\\\",\\n\\t\\\"_xlfn.VAR.S\\\": \\\"VAR.S\\\",\\n\\t\\\"_xlfn.WEBSERVICE\\\": \\\"WEBSERVICE\\\",\\n\\t\\\"_xlfn.WEIBULL.DIST\\\": \\\"WEIBULL.DIST\\\",\\n\\t\\\"_xlfn.WORKDAY.INTL\\\": \\\"WORKDAY.INTL\\\",\\n\\t\\\"_xlfn.XOR\\\": \\\"XOR\\\",\\n\\t\\\"_xlfn.Z.TEST\\\": \\\"Z.TEST\\\"\\n};\\n\\nvar strs = {}; // shared strings\\nvar _ssfopts = {}; // spreadsheet formatting options\\n\\nRELS.WS = \\\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\\\";\\n\\nfunction get_sst_id(sst, str) {\\n\\tfor(var i = 0, len = sst.length; i < len; ++i) if(sst[i].t === str) { sst.Count ++; return i; }\\n\\tsst[len] = {t:str}; sst.Count ++; sst.Unique ++; return len;\\n}\\n\\nfunction get_cell_style(styles, cell, opts) {\\n\\tvar z = opts.revssf[cell.z != null ? cell.z : \\\"General\\\"];\\n\\tfor(var i = 0, len = styles.length; i != len; ++i) if(styles[i].numFmtId === z) return i;\\n\\tstyles[len] = {\\n\\t\\tnumFmtId:z,\\n\\t\\tfontId:0,\\n\\t\\tfillId:0,\\n\\t\\tborderId:0,\\n\\t\\txfId:0,\\n\\t\\tapplyNumberFormat:1\\n\\t};\\n\\treturn len;\\n}\\n\\nfunction safe_format(p, fmtid, fillid, opts) {\\n\\ttry {\\n\\t\\tif(p.t === 'e') p.w = p.w || BErr[p.v];\\n\\t\\telse if(fmtid === 0) {\\n\\t\\t\\tif(p.t === 'n') {\\n\\t\\t\\t\\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v,_ssfopts);\\n\\t\\t\\t\\telse p.w = SSF._general_num(p.v,_ssfopts);\\n\\t\\t\\t}\\n\\t\\t\\telse if(p.t === 'd') {\\n\\t\\t\\t\\tvar dd = datenum(p.v);\\n\\t\\t\\t\\tif((dd|0) === dd) p.w = SSF._general_int(dd,_ssfopts);\\n\\t\\t\\t\\telse p.w = SSF._general_num(dd,_ssfopts);\\n\\t\\t\\t}\\n\\t\\t\\telse if(p.v === undefined) return \\\"\\\";\\n\\t\\t\\telse p.w = SSF._general(p.v,_ssfopts);\\n\\t\\t}\\n\\t\\telse if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts);\\n\\t\\telse p.w = SSF.format(fmtid,p.v,_ssfopts);\\n\\t\\tif(opts.cellNF) p.z = SSF._table[fmtid];\\n\\t} catch(e) { if(opts.WTF) throw e; }\\n\\tif(fillid) try {\\n\\t\\tp.s = styles.Fills[fillid];\\n\\t\\tif (p.s.fgColor && p.s.fgColor.theme) {\\n\\t\\t\\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\\n\\t\\t\\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\\n\\t\\t}\\n\\t\\tif (p.s.bgColor && p.s.bgColor.theme) {\\n\\t\\t\\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\\n\\t\\t\\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\\n\\t\\t}\\n\\t} catch(e) { if(opts.WTF) throw e; }\\n}\\nfunction parse_ws_xml_dim(ws, s) {\\n\\tvar d = safe_decode_range(s);\\n\\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\\\"!ref\\\"] = encode_range(d);\\n}\\nvar mergecregex = /<mergeCell ref=\\\"[A-Z0-9:]+\\\"\\\\s*\\\\/>/g;\\nvar sheetdataregex = /<(?:\\\\w+:)?sheetData>([^\\\\u2603]*)<\\\\/(?:\\\\w+:)?sheetData>/;\\nvar hlinkregex = /<hyperlink[^>]*\\\\/>/g;\\nvar dimregex = /\\\"(\\\\w*:\\\\w*)\\\"/;\\nvar colregex = /<col[^>]*\\\\/>/g;\\n/* 18.3 Worksheets */\\nfunction parse_ws_xml(data, opts, rels) {\\n\\tif(!data) return data;\\n\\t/* 18.3.1.99 worksheet CT_Worksheet */\\n\\tvar s = {};\\n\\n\\t/* 18.3.1.35 dimension CT_SheetDimension ? */\\n\\tvar ridx = data.indexOf(\\\"<dimension\\\");\\n\\tif(ridx > 0) {\\n\\t\\tvar ref = data.substr(ridx,50).match(dimregex);\\n\\t\\tif(ref != null) parse_ws_xml_dim(s, ref[1]);\\n\\t}\\n\\n\\t/* 18.3.1.55 mergeCells CT_MergeCells */\\n\\tvar mergecells = [];\\n\\tif(data.indexOf(\\\"</mergeCells>\\\")!==-1) {\\n\\t\\tvar merges = data.match(mergecregex);\\n\\t\\tfor(ridx = 0; ridx != merges.length; ++ridx)\\n\\t\\t\\tmergecells[ridx] = safe_decode_range(merges[ridx].substr(merges[ridx].indexOf(\\\"\\\\\\\"\\\")+1));\\n\\t}\\n\\n\\t/* 18.3.1.17 cols CT_Cols */\\n\\tvar columns = [];\\n\\tif(opts.cellStyles && data.indexOf(\\\"</cols>\\\")!==-1) {\\n\\t\\t/* 18.3.1.13 col CT_Col */\\n\\t\\tvar cols = data.match(colregex);\\n\\t\\tparse_ws_xml_cols(columns, cols);\\n\\t}\\n\\n\\tvar refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };\\n\\n\\t/* 18.3.1.80 sheetData CT_SheetData ? */\\n\\tvar mtch=data.match(sheetdataregex);\\n\\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess);\\n\\n\\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\\n\\tif(data.indexOf(\\\"</hyperlinks>\\\")!==-1) parse_ws_xml_hlinks(s, data.match(hlinkregex), rels);\\n\\n\\tif(!s[\\\"!ref\\\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\\\"!ref\\\"] = encode_range(refguess);\\n\\tif(opts.sheetRows > 0 && s[\\\"!ref\\\"]) {\\n\\t\\tvar tmpref = safe_decode_range(s[\\\"!ref\\\"]);\\n\\t\\tif(opts.sheetRows < +tmpref.e.r) {\\n\\t\\t\\ttmpref.e.r = opts.sheetRows - 1;\\n\\t\\t\\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\\n\\t\\t\\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\\n\\t\\t\\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\\n\\t\\t\\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\\n\\t\\t\\ts[\\\"!fullref\\\"] = s[\\\"!ref\\\"];\\n\\t\\t\\ts[\\\"!ref\\\"] = encode_range(tmpref);\\n\\t\\t}\\n\\t}\\n\\tif(mergecells.length > 0) s[\\\"!merges\\\"] = mergecells;\\n\\tif(columns.length > 0) s[\\\"!cols\\\"] = columns;\\n\\treturn s;\\n}\\n\\nfunction write_ws_xml_merges(merges) {\\n\\tif(merges.length == 0) return \\\"\\\";\\n\\tvar o = '<mergeCells count=\\\"' + merges.length + '\\\">';\\n\\tfor(var i = 0; i != merges.length; ++i) o += '<mergeCell ref=\\\"' + encode_range(merges[i]) + '\\\"/>';\\n\\treturn o + '</mergeCells>';\\n}\\n\\nfunction parse_ws_xml_hlinks(s, data, rels) {\\n\\tfor(var i = 0; i != data.length; ++i) {\\n\\t\\tvar val = parsexmltag(data[i], true);\\n\\t\\tif(!val.ref) return;\\n\\t\\tvar rel = rels ? rels['!id'][val.id] : null;\\n\\t\\tif(rel) {\\n\\t\\t\\tval.Target = rel.Target;\\n\\t\\t\\tif(val.location) val.Target += \\\"#\\\"+val.location;\\n\\t\\t\\tval.Rel = rel;\\n\\t\\t} else {\\n\\t\\t\\tval.Target = val.location;\\n\\t\\t\\trel = {Target: val.location, TargetMode: 'Internal'};\\n\\t\\t\\tval.Rel = rel;\\n\\t\\t}\\n\\t\\tvar rng = safe_decode_range(val.ref);\\n\\t\\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\\n\\t\\t\\tvar addr = encode_cell({c:C,r:R});\\n\\t\\t\\tif(!s[addr]) s[addr] = {t:\\\"stub\\\",v:undefined};\\n\\t\\t\\ts[addr].l = val;\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction parse_ws_xml_cols(columns, cols) {\\n\\tvar seencol = false;\\n\\tfor(var coli = 0; coli != cols.length; ++coli) {\\n\\t\\tvar coll = parsexmltag(cols[coli], true);\\n\\t\\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\\n\\t\\tdelete coll.min; delete coll.max;\\n\\t\\tif(!seencol && coll.width) { seencol = true; find_mdw(+coll.width, coll); }\\n\\t\\tif(coll.width) {\\n\\t\\t\\tcoll.wpx = width2px(+coll.width);\\n\\t\\t\\tcoll.wch = px2char(coll.wpx);\\n\\t\\t\\tcoll.MDW = MDW;\\n\\t\\t}\\n\\t\\twhile(colm <= colM) columns[colm++] = coll;\\n\\t}\\n}\\n\\nfunction write_ws_xml_cols(ws, cols) {\\n\\tvar o = [\\\"<cols>\\\"], col, width;\\n\\tfor(var i = 0; i != cols.length; ++i) {\\n\\t\\tif(!(col = cols[i])) continue;\\n\\t\\tvar p = {min:i+1,max:i+1};\\n\\t\\t/* wch (chars), wpx (pixels) */\\n\\t\\twidth = -1;\\n\\t\\tif(col.wpx) width = px2char(col.wpx);\\n\\t\\telse if(col.wch) width = col.wch;\\n\\t\\tif(width > -1) { p.width = char2width(width); p.customWidth= 1; }\\n\\t\\to[o.length] = (writextag('col', null, p));\\n\\t}\\n\\to[o.length] = \\\"</cols>\\\";\\n\\treturn o.join(\\\"\\\");\\n}\\n\\nfunction write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {\\n\\tif(cell.v === undefined) return \\\"\\\";\\n\\tvar vv = \\\"\\\";\\n\\tvar oldt = cell.t, oldv = cell.v;\\n\\tswitch(cell.t) {\\n\\t\\tcase 'b': vv = cell.v ? \\\"1\\\" : \\\"0\\\"; break;\\n\\t\\tcase 'n': vv = ''+cell.v; break;\\n\\t\\tcase 'e': vv = BErr[cell.v]; break;\\n\\t\\tcase 'd':\\n\\t\\t\\tif(opts.cellDates) vv = new Date(cell.v).toISOString();\\n\\t\\t\\telse {\\n\\t\\t\\t\\tcell.t = 'n';\\n\\t\\t\\t\\tvv = ''+(cell.v = datenum(cell.v));\\n\\t\\t\\t\\tif(typeof cell.z === 'undefined') cell.z = SSF._table[14];\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tdefault: vv = cell.v; break;\\n\\t}\\n\\tvar v = writetag('v', escapexml(vv)), o = {r:ref};\\n\\t/* TODO: cell style */\\n\\tvar os = get_cell_style(opts.cellXfs, cell, opts);\\n\\tif(os !== 0) o.s = os;\\n\\tswitch(cell.t) {\\n\\t\\tcase 'n': break;\\n\\t\\tcase 'd': o.t = \\\"d\\\"; break;\\n\\t\\tcase 'b': o.t = \\\"b\\\"; break;\\n\\t\\tcase 'e': o.t = \\\"e\\\"; break;\\n\\t\\tdefault:\\n\\t\\t\\tif(opts.bookSST) {\\n\\t\\t\\t\\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v));\\n\\t\\t\\t\\to.t = \\\"s\\\"; break;\\n\\t\\t\\t}\\n\\t\\t\\to.t = \\\"str\\\"; break;\\n\\t}\\n\\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\\n\\treturn writextag('c', v, o);\\n}\\n\\nvar parse_ws_xml_data = (function parse_ws_xml_data_factory() {\\n\\tvar cellregex = /<(?:\\\\w+:)?c[ >]/, rowregex = /<\\\\/(?:\\\\w+:)?row>/;\\n\\tvar rregex = /r=[\\\"']([^\\\"']*)[\\\"']/, isregex = /<is>([\\\\S\\\\s]*?)<\\\\/is>/;\\n\\tvar match_v = matchtag(\\\"v\\\"), match_f = matchtag(\\\"f\\\");\\n\\nreturn function parse_ws_xml_data(sdata, s, opts, guess) {\\n\\tvar ri = 0, x = \\\"\\\", cells = [], cref = [], idx = 0, i=0, cc=0, d=\\\"\\\", p;\\n\\tvar tag, tagr = 0, tagc = 0;\\n\\tvar sstr;\\n\\tvar fmtid = 0, fillid = 0, do_format = Array.isArray(styles.CellXf), cf;\\n\\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\\n\\t\\tx = marr[mt].trim();\\n\\t\\tvar xlen = x.length;\\n\\t\\tif(xlen === 0) continue;\\n\\n\\t\\t/* 18.3.1.73 row CT_Row */\\n\\t\\tfor(ri = 0; ri < xlen; ++ri) if(x.charCodeAt(ri) === 62) break; ++ri;\\n\\t\\ttag = parsexmltag(x.substr(0,ri), true);\\n\\t\\t/* SpreadSheetGear uses implicit r/c */\\n\\t\\ttagr = typeof tag.r !== 'undefined' ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\\n\\t\\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\\n\\t\\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\\n\\t\\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\\n\\n\\t\\t/* 18.3.1.4 c CT_Cell */\\n\\t\\tcells = x.substr(ri).split(cellregex);\\n\\t\\tfor(ri = typeof tag.r === 'undefined' ? 0 : 1; ri != cells.length; ++ri) {\\n\\t\\t\\tx = cells[ri].trim();\\n\\t\\t\\tif(x.length === 0) continue;\\n\\t\\t\\tcref = x.match(rregex); idx = ri; i=0; cc=0;\\n\\t\\t\\tx = \\\"<c \\\" + (x.substr(0,1)==\\\"<\\\"?\\\">\\\":\\\"\\\") + x;\\n\\t\\t\\tif(cref !== null && cref.length === 2) {\\n\\t\\t\\t\\tidx = 0; d=cref[1];\\n\\t\\t\\t\\tfor(i=0; i != d.length; ++i) {\\n\\t\\t\\t\\t\\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\\n\\t\\t\\t\\t\\tidx = 26*idx + cc;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t--idx;\\n\\t\\t\\t\\ttagc = idx;\\n\\t\\t\\t} else ++tagc;\\n\\t\\t\\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\\n\\t\\t\\ttag = parsexmltag(x.substr(0,i), true);\\n\\t\\t\\tif(!tag.r) tag.r = utils.encode_cell({r:tagr-1, c:tagc});\\n\\t\\t\\td = x.substr(i);\\n\\t\\t\\tp = {t:\\\"\\\"};\\n\\n\\t\\t\\tif((cref=d.match(match_v))!== null && cref[1] !== '') p.v=unescapexml(cref[1]);\\n\\t\\t\\tif(opts.cellFormula && (cref=d.match(match_f))!== null) p.f=unescapexml(cref[1]);\\n\\n\\t\\t\\t/* SCHEMA IS ACTUALLY INCORRECT HERE. IF A CELL HAS NO T, EMIT \\\"\\\" */\\n\\t\\t\\tif(tag.t === undefined && p.v === undefined) {\\n\\t\\t\\t\\tif(!opts.sheetStubs) continue;\\n\\t\\t\\t\\tp.t = \\\"stub\\\";\\n\\t\\t\\t}\\n\\t\\t\\telse p.t = tag.t || \\\"n\\\";\\n\\t\\t\\tif(guess.s.c > idx) guess.s.c = idx;\\n\\t\\t\\tif(guess.e.c < idx) guess.e.c = idx;\\n\\t\\t\\t/* 18.18.11 t ST_CellType */\\n\\t\\t\\tswitch(p.t) {\\n\\t\\t\\t\\tcase 'n': p.v = parseFloat(p.v); break;\\n\\t\\t\\t\\tcase 's':\\n\\t\\t\\t\\t\\tsstr = strs[parseInt(p.v, 10)];\\n\\t\\t\\t\\t\\tp.v = sstr.t;\\n\\t\\t\\t\\t\\tp.r = sstr.r;\\n\\t\\t\\t\\t\\tif(opts.cellHTML) p.h = sstr.h;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase 'str':\\n\\t\\t\\t\\t\\tp.t = \\\"s\\\";\\n\\t\\t\\t\\t\\tp.v = (p.v!=null) ? utf8read(p.v) : '';\\n\\t\\t\\t\\t\\tif(opts.cellHTML) p.h = p.v;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase 'inlineStr':\\n\\t\\t\\t\\t\\tcref = d.match(isregex);\\n\\t\\t\\t\\t\\tp.t = 's';\\n\\t\\t\\t\\t\\tif(cref !== null) { sstr = parse_si(cref[1]); p.v = sstr.t; } else p.v = \\\"\\\";\\n\\t\\t\\t\\t\\tbreak; // inline string\\n\\t\\t\\t\\tcase 'b': p.v = parsexmlbool(p.v); break;\\n\\t\\t\\t\\tcase 'd':\\n\\t\\t\\t\\t\\tif(!opts.cellDates) { p.v = datenum(p.v); p.t = 'n'; }\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t/* error string in .v, number in .v */\\n\\t\\t\\t\\tcase 'e': p.w = p.v; p.v = RBErr[p.v]; break;\\n\\t\\t\\t}\\n\\t\\t\\t/* formatting */\\n\\t\\t\\tfmtid = fillid = 0;\\n\\t\\t\\tif(do_format && tag.s !== undefined) {\\n\\t\\t\\t\\tcf = styles.CellXf[tag.s];\\n\\t\\t\\t\\tif(cf != null) {\\n\\t\\t\\t\\t\\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\\n\\t\\t\\t\\t\\tif(opts.cellStyles && cf.fillId != null) fillid = cf.fillId;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tsafe_format(p, fmtid, fillid, opts);\\n\\t\\t\\ts[tag.r] = p;\\n\\t\\t}\\n\\t}\\n}; })();\\n\\nfunction write_ws_xml_data(ws, opts, idx, wb) {\\n\\tvar o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = \\\"\\\", cols = [], R, C;\\n\\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\\n\\tfor(R = range.s.r; R <= range.e.r; ++R) {\\n\\t\\tr = [];\\n\\t\\trr = encode_row(R);\\n\\t\\tfor(C = range.s.c; C <= range.e.c; ++C) {\\n\\t\\t\\tref = cols[C] + rr;\\n\\t\\t\\tif(ws[ref] === undefined) continue;\\n\\t\\t\\tif((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);\\n\\t\\t}\\n\\t\\tif(r.length > 0) o[o.length] = (writextag('row', r.join(\\\"\\\"), {r:rr}));\\n\\t}\\n\\treturn o.join(\\\"\\\");\\n}\\n\\nvar WS_XML_ROOT = writextag('worksheet', null, {\\n\\t'xmlns': XMLNS.main[0],\\n\\t'xmlns:r': XMLNS.r\\n});\\n\\nfunction write_ws_xml(idx, opts, wb) {\\n\\tvar o = [XML_HEADER, WS_XML_ROOT];\\n\\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \\\"\\\";\\n\\tvar ws = wb.Sheets[s];\\n\\tif(ws === undefined) ws = {};\\n\\tvar ref = ws['!ref']; if(ref === undefined) ref = 'A1';\\n\\to[o.length] = (writextag('dimension', null, {'ref': ref}));\\n\\n\\tif(ws['!cols'] !== undefined && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\\n\\to[sidx = o.length] = '<sheetData/>';\\n\\tif(ws['!ref'] !== undefined) {\\n\\t\\trdata = write_ws_xml_data(ws, opts, idx, wb);\\n\\t\\tif(rdata.length > 0) o[o.length] = (rdata);\\n\\t}\\n\\tif(o.length>sidx+1) { o[o.length] = ('</sheetData>'); o[sidx]=o[sidx].replace(\\\"/>\\\",\\\">\\\"); }\\n\\n\\tif(ws['!merges'] !== undefined && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\\n\\n\\tif(o.length>2) { o[o.length] = ('</worksheet>'); o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\n\\n/* [MS-XLSB] 2.4.718 BrtRowHdr */\\nfunction parse_BrtRowHdr(data, length) {\\n\\tvar z = [];\\n\\tz.r = data.read_shift(4);\\n\\tdata.l += length-4;\\n\\treturn z;\\n}\\n\\n/* [MS-XLSB] 2.4.812 BrtWsDim */\\nvar parse_BrtWsDim = parse_UncheckedRfX;\\nvar write_BrtWsDim = write_UncheckedRfX;\\n\\n/* [MS-XLSB] 2.4.815 BrtWsProp */\\nfunction parse_BrtWsProp(data, length) {\\n\\tvar z = {};\\n\\t/* TODO: pull flags */\\n\\tdata.l += 19;\\n\\tz.name = parse_XLSBCodeName(data, length - 19);\\n\\treturn z;\\n}\\n\\n/* [MS-XLSB] 2.4.303 BrtCellBlank */\\nfunction parse_BrtCellBlank(data, length) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\treturn [cell];\\n}\\nfunction write_BrtCellBlank(cell, val, o) {\\n\\tif(o == null) o = new_buf(8);\\n\\treturn write_XLSBCell(val, o);\\n}\\n\\n\\n/* [MS-XLSB] 2.4.304 BrtCellBool */\\nfunction parse_BrtCellBool(data, length) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar fBool = data.read_shift(1);\\n\\treturn [cell, fBool, 'b'];\\n}\\n\\n/* [MS-XLSB] 2.4.305 BrtCellError */\\nfunction parse_BrtCellError(data, length) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar fBool = data.read_shift(1);\\n\\treturn [cell, fBool, 'e'];\\n}\\n\\n/* [MS-XLSB] 2.4.308 BrtCellIsst */\\nfunction parse_BrtCellIsst(data, length) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar isst = data.read_shift(4);\\n\\treturn [cell, isst, 's'];\\n}\\n\\n/* [MS-XLSB] 2.4.310 BrtCellReal */\\nfunction parse_BrtCellReal(data, length) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar value = parse_Xnum(data);\\n\\treturn [cell, value, 'n'];\\n}\\n\\n/* [MS-XLSB] 2.4.311 BrtCellRk */\\nfunction parse_BrtCellRk(data, length) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar value = parse_RkNumber(data);\\n\\treturn [cell, value, 'n'];\\n}\\n\\n/* [MS-XLSB] 2.4.314 BrtCellSt */\\nfunction parse_BrtCellSt(data, length) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar value = parse_XLWideString(data);\\n\\treturn [cell, value, 'str'];\\n}\\n\\n/* [MS-XLSB] 2.4.647 BrtFmlaBool */\\nfunction parse_BrtFmlaBool(data, length, opts) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar value = data.read_shift(1);\\n\\tvar o = [cell, value, 'b'];\\n\\tif(opts.cellFormula) {\\n\\t\\tvar formula = parse_XLSBCellParsedFormula(data, length-9);\\n\\t\\to[3] = \\\"\\\"; /* TODO */\\n\\t}\\n\\telse data.l += length-9;\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.4.648 BrtFmlaError */\\nfunction parse_BrtFmlaError(data, length, opts) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar value = data.read_shift(1);\\n\\tvar o = [cell, value, 'e'];\\n\\tif(opts.cellFormula) {\\n\\t\\tvar formula = parse_XLSBCellParsedFormula(data, length-9);\\n\\t\\to[3] = \\\"\\\"; /* TODO */\\n\\t}\\n\\telse data.l += length-9;\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.4.649 BrtFmlaNum */\\nfunction parse_BrtFmlaNum(data, length, opts) {\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar value = parse_Xnum(data);\\n\\tvar o = [cell, value, 'n'];\\n\\tif(opts.cellFormula) {\\n\\t\\tvar formula = parse_XLSBCellParsedFormula(data, length - 16);\\n\\t\\to[3] = \\\"\\\"; /* TODO */\\n\\t}\\n\\telse data.l += length-16;\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.4.650 BrtFmlaString */\\nfunction parse_BrtFmlaString(data, length, opts) {\\n\\tvar start = data.l;\\n\\tvar cell = parse_XLSBCell(data);\\n\\tvar value = parse_XLWideString(data);\\n\\tvar o = [cell, value, 'str'];\\n\\tif(opts.cellFormula) {\\n\\t\\tvar formula = parse_XLSBCellParsedFormula(data, start + length - data.l);\\n\\t}\\n\\telse data.l = start + length;\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.4.676 BrtMergeCell */\\nvar parse_BrtMergeCell = parse_UncheckedRfX;\\n\\n/* [MS-XLSB] 2.4.656 BrtHLink */\\nfunction parse_BrtHLink(data, length, opts) {\\n\\tvar end = data.l + length;\\n\\tvar rfx = parse_UncheckedRfX(data, 16);\\n\\tvar relId = parse_XLNullableWideString(data);\\n\\tvar loc = parse_XLWideString(data);\\n\\tvar tooltip = parse_XLWideString(data);\\n\\tvar display = parse_XLWideString(data);\\n\\tdata.l = end;\\n\\treturn {rfx:rfx, relId:relId, loc:loc, tooltip:tooltip, display:display};\\n}\\n\\n/* [MS-XLSB] 2.1.7.61 Worksheet */\\nfunction parse_ws_bin(data, opts, rels) {\\n\\tif(!data) return data;\\n\\tif(!rels) rels = {'!id':{}};\\n\\tvar s = {};\\n\\n\\tvar ref;\\n\\tvar refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };\\n\\n\\tvar pass = false, end = false;\\n\\tvar row, p, cf, R, C, addr, sstr, rr;\\n\\tvar mergecells = [];\\n\\trecordhopper(data, function ws_parse(val, R) {\\n\\t\\tif(end) return;\\n\\t\\tswitch(R.n) {\\n\\t\\t\\tcase 'BrtWsDim': ref = val; break;\\n\\t\\t\\tcase 'BrtRowHdr':\\n\\t\\t\\t\\trow = val;\\n\\t\\t\\t\\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\\n\\t\\t\\t\\trr = encode_row(row.r);\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\tcase 'BrtFmlaBool':\\n\\t\\t\\tcase 'BrtFmlaError':\\n\\t\\t\\tcase 'BrtFmlaNum':\\n\\t\\t\\tcase 'BrtFmlaString':\\n\\t\\t\\tcase 'BrtCellBool':\\n\\t\\t\\tcase 'BrtCellError':\\n\\t\\t\\tcase 'BrtCellIsst':\\n\\t\\t\\tcase 'BrtCellReal':\\n\\t\\t\\tcase 'BrtCellRk':\\n\\t\\t\\tcase 'BrtCellSt':\\n\\t\\t\\t\\tp = {t:val[2]};\\n\\t\\t\\t\\tswitch(val[2]) {\\n\\t\\t\\t\\t\\tcase 'n': p.v = val[1]; break;\\n\\t\\t\\t\\t\\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\\n\\t\\t\\t\\t\\tcase 'b': p.v = val[1] ? true : false; break;\\n\\t\\t\\t\\t\\tcase 'e': p.v = val[1]; p.w = BErr[p.v]; break;\\n\\t\\t\\t\\t\\tcase 'str': p.t = 's'; p.v = utf8read(val[1]); break;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(opts.cellFormula && val.length > 3) p.f = val[3];\\n\\t\\t\\t\\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.ifmt,null,opts);\\n\\t\\t\\t\\ts[encode_col(C=val[0].c) + rr] = p;\\n\\t\\t\\t\\tif(refguess.s.r > row.r) refguess.s.r = row.r;\\n\\t\\t\\t\\tif(refguess.s.c > C) refguess.s.c = C;\\n\\t\\t\\t\\tif(refguess.e.r < row.r) refguess.e.r = row.r;\\n\\t\\t\\t\\tif(refguess.e.c < C) refguess.e.c = C;\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\tcase 'BrtCellBlank': if(!opts.sheetStubs) break;\\n\\t\\t\\t\\tp = {t:'s',v:undefined};\\n\\t\\t\\t\\ts[encode_col(C=val[0].c) + rr] = p;\\n\\t\\t\\t\\tif(refguess.s.r > row.r) refguess.s.r = row.r;\\n\\t\\t\\t\\tif(refguess.s.c > C) refguess.s.c = C;\\n\\t\\t\\t\\tif(refguess.e.r < row.r) refguess.e.r = row.r;\\n\\t\\t\\t\\tif(refguess.e.c < C) refguess.e.c = C;\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t/* Merge Cells */\\n\\t\\t\\tcase 'BrtBeginMergeCells': break;\\n\\t\\t\\tcase 'BrtEndMergeCells': break;\\n\\t\\t\\tcase 'BrtMergeCell': mergecells.push(val); break;\\n\\n\\t\\t\\tcase 'BrtHLink':\\n\\t\\t\\t\\tvar rel = rels['!id'][val.relId];\\n\\t\\t\\t\\tif(rel) {\\n\\t\\t\\t\\t\\tval.Target = rel.Target;\\n\\t\\t\\t\\t\\tif(val.loc) val.Target += \\\"#\\\"+val.loc;\\n\\t\\t\\t\\t\\tval.Rel = rel;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\\n\\t\\t\\t\\t\\taddr = encode_cell({c:C,r:R});\\n\\t\\t\\t\\t\\tif(!s[addr]) s[addr] = {t:'s',v:undefined};\\n\\t\\t\\t\\t\\ts[addr].l = val;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\tcase 'BrtArrFmla': break; // TODO\\n\\t\\t\\tcase 'BrtShrFmla': break; // TODO\\n\\t\\t\\tcase 'BrtBeginSheet': break;\\n\\t\\t\\tcase 'BrtWsProp': break; // TODO\\n\\t\\t\\tcase 'BrtSheetCalcProp': break; // TODO\\n\\t\\t\\tcase 'BrtBeginWsViews': break; // TODO\\n\\t\\t\\tcase 'BrtBeginWsView': break; // TODO\\n\\t\\t\\tcase 'BrtPane': break; // TODO\\n\\t\\t\\tcase 'BrtSel': break; // TODO\\n\\t\\t\\tcase 'BrtEndWsView': break; // TODO\\n\\t\\t\\tcase 'BrtEndWsViews': break; // TODO\\n\\t\\t\\tcase 'BrtACBegin': break; // TODO\\n\\t\\t\\tcase 'BrtRwDescent': break; // TODO\\n\\t\\t\\tcase 'BrtACEnd': break; // TODO\\n\\t\\t\\tcase 'BrtWsFmtInfoEx14': break; // TODO\\n\\t\\t\\tcase 'BrtWsFmtInfo': break; // TODO\\n\\t\\t\\tcase 'BrtBeginColInfos': break; // TODO\\n\\t\\t\\tcase 'BrtColInfo': break; // TODO\\n\\t\\t\\tcase 'BrtEndColInfos': break; // TODO\\n\\t\\t\\tcase 'BrtBeginSheetData': break; // TODO\\n\\t\\t\\tcase 'BrtEndSheetData': break; // TODO\\n\\t\\t\\tcase 'BrtSheetProtection': break; // TODO\\n\\t\\t\\tcase 'BrtPrintOptions': break; // TODO\\n\\t\\t\\tcase 'BrtMargins': break; // TODO\\n\\t\\t\\tcase 'BrtPageSetup': break; // TODO\\n\\t\\t\\tcase 'BrtFRTBegin': pass = true; break;\\n\\t\\t\\tcase 'BrtFRTEnd': pass = false; break;\\n\\t\\t\\tcase 'BrtEndSheet': break; // TODO\\n\\t\\t\\tcase 'BrtDrawing': break; // TODO\\n\\t\\t\\tcase 'BrtLegacyDrawing': break; // TODO\\n\\t\\t\\tcase 'BrtLegacyDrawingHF': break; // TODO\\n\\t\\t\\tcase 'BrtPhoneticInfo': break; // TODO\\n\\t\\t\\tcase 'BrtBeginHeaderFooter': break; // TODO\\n\\t\\t\\tcase 'BrtEndHeaderFooter': break; // TODO\\n\\t\\t\\tcase 'BrtBrk': break; // TODO\\n\\t\\t\\tcase 'BrtBeginRwBrk': break; // TODO\\n\\t\\t\\tcase 'BrtEndRwBrk': break; // TODO\\n\\t\\t\\tcase 'BrtBeginColBrk': break; // TODO\\n\\t\\t\\tcase 'BrtEndColBrk': break; // TODO\\n\\t\\t\\tcase 'BrtBeginUserShViews': break; // TODO\\n\\t\\t\\tcase 'BrtBeginUserShView': break; // TODO\\n\\t\\t\\tcase 'BrtEndUserShView': break; // TODO\\n\\t\\t\\tcase 'BrtEndUserShViews': break; // TODO\\n\\t\\t\\tcase 'BrtBkHim': break; // TODO\\n\\t\\t\\tcase 'BrtBeginOleObjects': break; // TODO\\n\\t\\t\\tcase 'BrtOleObject': break; // TODO\\n\\t\\t\\tcase 'BrtEndOleObjects': break; // TODO\\n\\t\\t\\tcase 'BrtBeginListParts': break; // TODO\\n\\t\\t\\tcase 'BrtListPart': break; // TODO\\n\\t\\t\\tcase 'BrtEndListParts': break; // TODO\\n\\t\\t\\tcase 'BrtBeginSortState': break; // TODO\\n\\t\\t\\tcase 'BrtBeginSortCond': break; // TODO\\n\\t\\t\\tcase 'BrtEndSortCond': break; // TODO\\n\\t\\t\\tcase 'BrtEndSortState': break; // TODO\\n\\t\\t\\tcase 'BrtBeginConditionalFormatting': break; // TODO\\n\\t\\t\\tcase 'BrtEndConditionalFormatting': break; // TODO\\n\\t\\t\\tcase 'BrtBeginCFRule': break; // TODO\\n\\t\\t\\tcase 'BrtEndCFRule': break; // TODO\\n\\t\\t\\tcase 'BrtBeginDVals': break; // TODO\\n\\t\\t\\tcase 'BrtDVal': break; // TODO\\n\\t\\t\\tcase 'BrtEndDVals': break; // TODO\\n\\t\\t\\tcase 'BrtRangeProtection': break; // TODO\\n\\t\\t\\tcase 'BrtBeginDCon': break; // TODO\\n\\t\\t\\tcase 'BrtEndDCon': break; // TODO\\n\\t\\t\\tcase 'BrtBeginDRefs': break;\\n\\t\\t\\tcase 'BrtDRef': break;\\n\\t\\t\\tcase 'BrtEndDRefs': break;\\n\\n\\t\\t\\t/* ActiveX */\\n\\t\\t\\tcase 'BrtBeginActiveXControls': break;\\n\\t\\t\\tcase 'BrtActiveX': break;\\n\\t\\t\\tcase 'BrtEndActiveXControls': break;\\n\\n\\t\\t\\t/* AutoFilter */\\n\\t\\t\\tcase 'BrtBeginAFilter': break;\\n\\t\\t\\tcase 'BrtEndAFilter': break;\\n\\t\\t\\tcase 'BrtBeginFilterColumn': break;\\n\\t\\t\\tcase 'BrtBeginFilters': break;\\n\\t\\t\\tcase 'BrtFilter': break;\\n\\t\\t\\tcase 'BrtEndFilters': break;\\n\\t\\t\\tcase 'BrtEndFilterColumn': break;\\n\\t\\t\\tcase 'BrtDynamicFilter': break;\\n\\t\\t\\tcase 'BrtTop10Filter': break;\\n\\t\\t\\tcase 'BrtBeginCustomFilters': break;\\n\\t\\t\\tcase 'BrtCustomFilter': break;\\n\\t\\t\\tcase 'BrtEndCustomFilters': break;\\n\\n\\t\\t\\t/* Smart Tags */\\n\\t\\t\\tcase 'BrtBeginSmartTags': break;\\n\\t\\t\\tcase 'BrtBeginCellSmartTags': break;\\n\\t\\t\\tcase 'BrtBeginCellSmartTag': break;\\n\\t\\t\\tcase 'BrtCellSmartTagProperty': break;\\n\\t\\t\\tcase 'BrtEndCellSmartTag': break;\\n\\t\\t\\tcase 'BrtEndCellSmartTags': break;\\n\\t\\t\\tcase 'BrtEndSmartTags': break;\\n\\n\\t\\t\\t/* Cell Watch */\\n\\t\\t\\tcase 'BrtBeginCellWatches': break;\\n\\t\\t\\tcase 'BrtCellWatch': break;\\n\\t\\t\\tcase 'BrtEndCellWatches': break;\\n\\n\\t\\t\\t/* Table */\\n\\t\\t\\tcase 'BrtTable': break;\\n\\n\\t\\t\\t/* Ignore Cell Errors */\\n\\t\\t\\tcase 'BrtBeginCellIgnoreECs': break;\\n\\t\\t\\tcase 'BrtCellIgnoreEC': break;\\n\\t\\t\\tcase 'BrtEndCellIgnoreECs': break;\\n\\n\\t\\t\\tdefault: if(!pass || opts.WTF) throw new Error(\\\"Unexpected record \\\" + R.n);\\n\\t\\t}\\n\\t}, opts);\\n\\tif(!s[\\\"!ref\\\"] && (refguess.s.r < 1000000 || ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0)) s[\\\"!ref\\\"] = encode_range(ref);\\n\\tif(opts.sheetRows && s[\\\"!ref\\\"]) {\\n\\t\\tvar tmpref = safe_decode_range(s[\\\"!ref\\\"]);\\n\\t\\tif(opts.sheetRows < +tmpref.e.r) {\\n\\t\\t\\ttmpref.e.r = opts.sheetRows - 1;\\n\\t\\t\\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\\n\\t\\t\\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\\n\\t\\t\\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\\n\\t\\t\\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\\n\\t\\t\\ts[\\\"!fullref\\\"] = s[\\\"!ref\\\"];\\n\\t\\t\\ts[\\\"!ref\\\"] = encode_range(tmpref);\\n\\t\\t}\\n\\t}\\n\\tif(mergecells.length > 0) s[\\\"!merges\\\"] = mergecells;\\n\\treturn s;\\n}\\n\\n/* TODO: something useful -- this is a stub */\\nfunction write_ws_bin_cell(ba, cell, R, C, opts) {\\n\\tif(cell.v === undefined) return \\\"\\\";\\n\\tvar vv = \\\"\\\";\\n\\tswitch(cell.t) {\\n\\t\\tcase 'b': vv = cell.v ? \\\"1\\\" : \\\"0\\\"; break;\\n\\t\\tcase 'n': case 'e': vv = ''+cell.v; break;\\n\\t\\tdefault: vv = cell.v; break;\\n\\t}\\n\\tvar o = {r:R, c:C};\\n\\t/* TODO: cell style */\\n\\to.s = get_cell_style(opts.cellXfs, cell, opts);\\n\\tswitch(cell.t) {\\n\\t\\tcase 's': case 'str':\\n\\t\\t\\tif(opts.bookSST) {\\n\\t\\t\\t\\tvv = get_sst_id(opts.Strings, cell.v);\\n\\t\\t\\t\\to.t = \\\"s\\\"; break;\\n\\t\\t\\t}\\n\\t\\t\\to.t = \\\"str\\\"; break;\\n\\t\\tcase 'n': break;\\n\\t\\tcase 'b': o.t = \\\"b\\\"; break;\\n\\t\\tcase 'e': o.t = \\\"e\\\"; break;\\n\\t}\\n\\twrite_record(ba, \\\"BrtCellBlank\\\", write_BrtCellBlank(cell, o));\\n}\\n\\nfunction write_CELLTABLE(ba, ws, idx, opts, wb) {\\n\\tvar range = safe_decode_range(ws['!ref'] || \\\"A1\\\"), ref, rr = \\\"\\\", cols = [];\\n\\twrite_record(ba, 'BrtBeginSheetData');\\n\\tfor(var R = range.s.r; R <= range.e.r; ++R) {\\n\\t\\trr = encode_row(R);\\n\\t\\t/* [ACCELLTABLE] */\\n\\t\\t/* BrtRowHdr */\\n\\t\\tfor(var C = range.s.c; C <= range.e.c; ++C) {\\n\\t\\t\\t/* *16384CELL */\\n\\t\\t\\tif(R === range.s.r) cols[C] = encode_col(C);\\n\\t\\t\\tref = cols[C] + rr;\\n\\t\\t\\tif(!ws[ref]) continue;\\n\\t\\t\\t/* write cell */\\n\\t\\t\\twrite_ws_bin_cell(ba, ws[ref], R, C, opts);\\n\\t\\t}\\n\\t}\\n\\twrite_record(ba, 'BrtEndSheetData');\\n}\\n\\nfunction write_ws_bin(idx, opts, wb) {\\n\\tvar ba = buf_array();\\n\\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\\n\\tvar r = safe_decode_range(ws['!ref'] || \\\"A1\\\");\\n\\twrite_record(ba, \\\"BrtBeginSheet\\\");\\n\\t/* [BrtWsProp] */\\n\\twrite_record(ba, \\\"BrtWsDim\\\", write_BrtWsDim(r));\\n\\t/* [WSVIEWS2] */\\n\\t/* [WSFMTINFO] */\\n\\t/* *COLINFOS */\\n\\twrite_CELLTABLE(ba, ws, idx, opts, wb);\\n\\t/* [BrtSheetCalcProp] */\\n\\t/* [[BrtSheetProtectionIso] BrtSheetProtection] */\\n\\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\\n\\t/* [SCENMAN] */\\n\\t/* [AUTOFILTER] */\\n\\t/* [SORTSTATE] */\\n\\t/* [DCON] */\\n\\t/* [USERSHVIEWS] */\\n\\t/* [MERGECELLS] */\\n\\t/* [BrtPhoneticInfo] */\\n\\t/* *CONDITIONALFORMATTING */\\n\\t/* [DVALS] */\\n\\t/* *BrtHLink */\\n\\t/* [BrtPrintOptions] */\\n\\t/* [BrtMargins] */\\n\\t/* [BrtPageSetup] */\\n\\t/* [HEADERFOOTER] */\\n\\t/* [RWBRK] */\\n\\t/* [COLBRK] */\\n\\t/* *BrtBigName */\\n\\t/* [CELLWATCHES] */\\n\\t/* [IGNOREECS] */\\n\\t/* [SMARTTAGS] */\\n\\t/* [BrtDrawing] */\\n\\t/* [BrtLegacyDrawing] */\\n\\t/* [BrtLegacyDrawingHF] */\\n\\t/* [BrtBkHim] */\\n\\t/* [OLEOBJECTS] */\\n\\t/* [ACTIVEXCONTROLS] */\\n\\t/* [WEBPUBITEMS] */\\n\\t/* [LISTPARTS] */\\n\\t/* FRTWORKSHEET */\\n\\twrite_record(ba, \\\"BrtEndSheet\\\");\\n\\treturn ba.end();\\n}\\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\\nvar WBPropsDef = [\\n\\t['allowRefreshQuery', '0'],\\n\\t['autoCompressPictures', '1'],\\n\\t['backupFile', '0'],\\n\\t['checkCompatibility', '0'],\\n\\t['codeName', ''],\\n\\t['date1904', '0'],\\n\\t['dateCompatibility', '1'],\\n\\t//['defaultThemeVersion', '0'],\\n\\t['filterPrivacy', '0'],\\n\\t['hidePivotFieldList', '0'],\\n\\t['promptedSolutions', '0'],\\n\\t['publishItems', '0'],\\n\\t['refreshAllConnections', false],\\n\\t['saveExternalLinkValues', '1'],\\n\\t['showBorderUnselectedTables', '1'],\\n\\t['showInkAnnotation', '1'],\\n\\t['showObjects', 'all'],\\n\\t['showPivotChartFilter', '0']\\n\\t//['updateLinks', 'userSet']\\n];\\n\\n/* 18.2.30 (CT_BookView) Defaults */\\nvar WBViewDef = [\\n\\t['activeTab', '0'],\\n\\t['autoFilterDateGrouping', '1'],\\n\\t['firstSheet', '0'],\\n\\t['minimized', '0'],\\n\\t['showHorizontalScroll', '1'],\\n\\t['showSheetTabs', '1'],\\n\\t['showVerticalScroll', '1'],\\n\\t['tabRatio', '600'],\\n\\t['visibility', 'visible']\\n\\t//window{Height,Width}, {x,y}Window\\n];\\n\\n/* 18.2.19 (CT_Sheet) Defaults */\\nvar SheetDef = [\\n\\t['state', 'visible']\\n];\\n\\n/* 18.2.2 (CT_CalcPr) Defaults */\\nvar CalcPrDef = [\\n\\t['calcCompleted', 'true'],\\n\\t['calcMode', 'auto'],\\n\\t['calcOnSave', 'true'],\\n\\t['concurrentCalc', 'true'],\\n\\t['fullCalcOnLoad', 'false'],\\n\\t['fullPrecision', 'true'],\\n\\t['iterate', 'false'],\\n\\t['iterateCount', '100'],\\n\\t['iterateDelta', '0.001'],\\n\\t['refMode', 'A1']\\n];\\n\\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\\nvar CustomWBViewDef = [\\n\\t['autoUpdate', 'false'],\\n\\t['changesSavedWin', 'false'],\\n\\t['includeHiddenRowCol', 'true'],\\n\\t['includePrintSettings', 'true'],\\n\\t['maximized', 'false'],\\n\\t['minimized', 'false'],\\n\\t['onlySync', 'false'],\\n\\t['personalView', 'false'],\\n\\t['showComments', 'commIndicator'],\\n\\t['showFormulaBar', 'true'],\\n\\t['showHorizontalScroll', 'true'],\\n\\t['showObjects', 'all'],\\n\\t['showSheetTabs', 'true'],\\n\\t['showStatusbar', 'true'],\\n\\t['showVerticalScroll', 'true'],\\n\\t['tabRatio', '600'],\\n\\t['xWindow', '0'],\\n\\t['yWindow', '0']\\n];\\n\\nfunction push_defaults_array(target, defaults) {\\n\\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\\n\\t\\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\\n\\t\\t\\tif(w[z[0]] == null) w[z[0]] = z[1];\\n\\t\\t}\\n\\t}\\n}\\nfunction push_defaults(target, defaults) {\\n\\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\\n\\t\\tif(target[z[0]] == null) target[z[0]] = z[1];\\n\\t}\\n}\\n\\nfunction parse_wb_defaults(wb) {\\n\\tpush_defaults(wb.WBProps, WBPropsDef);\\n\\tpush_defaults(wb.CalcPr, CalcPrDef);\\n\\n\\tpush_defaults_array(wb.WBView, WBViewDef);\\n\\tpush_defaults_array(wb.Sheets, SheetDef);\\n\\n\\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');\\n}\\n/* 18.2 Workbook */\\nvar wbnsregex = /<\\\\w+:workbook/;\\nfunction parse_wb_xml(data, opts) {\\n\\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \\\"\\\" };\\n\\tvar pass = false, xmlns = \\\"xmlns\\\";\\n\\tdata.match(tagregex).forEach(function xml_wb(x) {\\n\\t\\tvar y = parsexmltag(x);\\n\\t\\tswitch(strip_ns(y[0])) {\\n\\t\\t\\tcase '<?xml': break;\\n\\n\\t\\t\\t/* 18.2.27 workbook CT_Workbook 1 */\\n\\t\\t\\tcase '<workbook':\\n\\t\\t\\t\\tif(x.match(wbnsregex)) xmlns = \\\"xmlns\\\" + x.match(/<(\\\\w+):/)[1];\\n\\t\\t\\t\\twb.xmlns = y[xmlns];\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase '</workbook>': break;\\n\\n\\t\\t\\t/* 18.2.13 fileVersion CT_FileVersion ? */\\n\\t\\t\\tcase '<fileVersion': delete y[0]; wb.AppVersion = y; break;\\n\\t\\t\\tcase '<fileVersion/>': break;\\n\\n\\t\\t\\t/* 18.2.12 fileSharing CT_FileSharing ? */\\n\\t\\t\\tcase '<fileSharing': case '<fileSharing/>': break;\\n\\n\\t\\t\\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\\n\\t\\t\\tcase '<workbookPr': delete y[0]; wb.WBProps = y; break;\\n\\t\\t\\tcase '<workbookPr/>': delete y[0]; wb.WBProps = y; break;\\n\\n\\t\\t\\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\\n\\t\\t\\tcase '<workbookProtection': break;\\n\\t\\t\\tcase '<workbookProtection/>': break;\\n\\n\\t\\t\\t/* 18.2.1 bookViews CT_BookViews ? */\\n\\t\\t\\tcase '<bookViews>': case '</bookViews>': break;\\n\\t\\t\\t/* 18.2.30 workbookView CT_BookView + */\\n\\t\\t\\tcase '<workbookView': delete y[0]; wb.WBView.push(y); break;\\n\\n\\t\\t\\t/* 18.2.20 sheets CT_Sheets 1 */\\n\\t\\t\\tcase '<sheets>': case '</sheets>': break; // aggregate sheet\\n\\t\\t\\t/* 18.2.19 sheet CT_Sheet + */\\n\\t\\t\\tcase '<sheet': delete y[0]; y.name = utf8read(y.name); wb.Sheets.push(y); break;\\n\\n\\t\\t\\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\\n\\t\\t\\tcase '<functionGroups': case '<functionGroups/>': break;\\n\\t\\t\\t/* 18.2.14 functionGroup CT_FunctionGroup + */\\n\\t\\t\\tcase '<functionGroup': break;\\n\\n\\t\\t\\t/* 18.2.9 externalReferences CT_ExternalReferences ? */\\n\\t\\t\\tcase '<externalReferences': case '</externalReferences>': case '<externalReferences>': break;\\n\\t\\t\\t/* 18.2.8 externalReference CT_ExternalReference + */\\n\\t\\t\\tcase '<externalReference': break;\\n\\n\\t\\t\\t/* 18.2.6 definedNames CT_DefinedNames ? */\\n\\t\\t\\tcase '<definedNames/>': break;\\n\\t\\t\\tcase '<definedNames>': case '<definedNames': pass=true; break;\\n\\t\\t\\tcase '</definedNames>': pass=false; break;\\n\\t\\t\\t/* 18.2.5 definedName CT_DefinedName + */\\n\\t\\t\\tcase '<definedName': case '<definedName/>': case '</definedName>': break;\\n\\n\\t\\t\\t/* 18.2.2 calcPr CT_CalcPr ? */\\n\\t\\t\\tcase '<calcPr': delete y[0]; wb.CalcPr = y; break;\\n\\t\\t\\tcase '<calcPr/>': delete y[0]; wb.CalcPr = y; break;\\n\\n\\t\\t\\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\\n\\t\\t\\tcase '<oleSize': break;\\n\\n\\t\\t\\t/* 18.2.4 customWorkbookViews CT_CustomWorkbookViews ? */\\n\\t\\t\\tcase '<customWorkbookViews>': case '</customWorkbookViews>': case '<customWorkbookViews': break;\\n\\t\\t\\t/* 18.2.3 customWorkbookView CT_CustomWorkbookView + */\\n\\t\\t\\tcase '<customWorkbookView': case '</customWorkbookView>': break;\\n\\n\\t\\t\\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\\n\\t\\t\\tcase '<pivotCaches>': case '</pivotCaches>': case '<pivotCaches': break;\\n\\t\\t\\t/* 18.2.17 pivotCache CT_PivotCache ? */\\n\\t\\t\\tcase '<pivotCache': break;\\n\\n\\t\\t\\t/* 18.2.21 smartTagPr CT_SmartTagPr ? */\\n\\t\\t\\tcase '<smartTagPr': case '<smartTagPr/>': break;\\n\\n\\t\\t\\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\\n\\t\\t\\tcase '<smartTagTypes': case '<smartTagTypes>': case '</smartTagTypes>': break;\\n\\t\\t\\t/* 18.2.22 smartTagType CT_SmartTagType ? */\\n\\t\\t\\tcase '<smartTagType': break;\\n\\n\\t\\t\\t/* 18.2.24 webPublishing CT_WebPublishing ? */\\n\\t\\t\\tcase '<webPublishing': case '<webPublishing/>': break;\\n\\n\\t\\t\\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\\n\\t\\t\\tcase '<fileRecoveryPr': case '<fileRecoveryPr/>': break;\\n\\n\\t\\t\\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\\n\\t\\t\\tcase '<webPublishObjects>': case '<webPublishObjects': case '</webPublishObjects>': break;\\n\\t\\t\\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\\n\\t\\t\\tcase '<webPublishObject': break;\\n\\n\\t\\t\\t/* 18.2.10 extLst CT_ExtensionList ? */\\n\\t\\t\\tcase '<extLst>': case '</extLst>': case '<extLst/>': break;\\n\\t\\t\\t/* 18.2.7 ext CT_Extension + */\\n\\t\\t\\tcase '<ext': pass=true; break; //TODO: check with versions of excel\\n\\t\\t\\tcase '</ext>': pass=false; break;\\n\\n\\t\\t\\t/* Others */\\n\\t\\t\\tcase '<ArchID': break;\\n\\t\\t\\tcase '<AlternateContent': pass=true; break;\\n\\t\\t\\tcase '</AlternateContent>': pass=false; break;\\n\\n\\t\\t\\tdefault: if(!pass && opts.WTF) throw 'unrecognized ' + y[0] + ' in workbook';\\n\\t\\t}\\n\\t});\\n\\tif(XMLNS.main.indexOf(wb.xmlns) === -1) throw new Error(\\\"Unknown Namespace: \\\" + wb.xmlns);\\n\\n\\tparse_wb_defaults(wb);\\n\\n\\treturn wb;\\n}\\n\\nvar WB_XML_ROOT = writextag('workbook', null, {\\n\\t'xmlns': XMLNS.main[0],\\n\\t//'xmlns:mx': XMLNS.mx,\\n\\t//'xmlns:s': XMLNS.main[0],\\n\\t'xmlns:r': XMLNS.r\\n});\\n\\nfunction safe1904(wb) {\\n\\t/* TODO: store date1904 somewhere else */\\n\\ttry { return parsexmlbool(wb.Workbook.WBProps.date1904) ? \\\"true\\\" : \\\"false\\\"; } catch(e) { return \\\"false\\\"; }\\n}\\n\\nfunction write_wb_xml(wb, opts) {\\n\\tvar o = [XML_HEADER];\\n\\to[o.length] = WB_XML_ROOT;\\n\\to[o.length] = (writextag('workbookPr', null, {date1904:safe1904(wb)}));\\n\\to[o.length] = \\\"<sheets>\\\";\\n\\tfor(var i = 0; i != wb.SheetNames.length; ++i)\\n\\t\\to[o.length] = (writextag('sheet',null,{name:wb.SheetNames[i].substr(0,31), sheetId:\\\"\\\"+(i+1), \\\"r:id\\\":\\\"rId\\\"+(i+1)}));\\n\\to[o.length] = \\\"</sheets>\\\";\\n\\tif(o.length>2){ o[o.length] = '</workbook>'; o[1]=o[1].replace(\\\"/>\\\",\\\">\\\"); }\\n\\treturn o.join(\\\"\\\");\\n}\\n/* [MS-XLSB] 2.4.301 BrtBundleSh */\\nfunction parse_BrtBundleSh(data, length) {\\n\\tvar z = {};\\n\\tz.hsState = data.read_shift(4); //ST_SheetState\\n\\tz.iTabID = data.read_shift(4);\\n\\tz.strRelID = parse_RelID(data,length-8);\\n\\tz.name = parse_XLWideString(data);\\n\\treturn z;\\n}\\nfunction write_BrtBundleSh(data, o) {\\n\\tif(!o) o = new_buf(127);\\n\\to.write_shift(4, data.hsState);\\n\\to.write_shift(4, data.iTabID);\\n\\twrite_RelID(data.strRelID, o);\\n\\twrite_XLWideString(data.name.substr(0,31), o);\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.4.807 BrtWbProp */\\nfunction parse_BrtWbProp(data, length) {\\n\\tdata.read_shift(4);\\n\\tvar dwThemeVersion = data.read_shift(4);\\n\\tvar strName = (length > 8) ? parse_XLWideString(data) : \\\"\\\";\\n\\treturn [dwThemeVersion, strName];\\n}\\nfunction write_BrtWbProp(data, o) {\\n\\tif(!o) o = new_buf(8);\\n\\to.write_shift(4, 0);\\n\\to.write_shift(4, 0);\\n\\treturn o;\\n}\\n\\nfunction parse_BrtFRTArchID$(data, length) {\\n\\tvar o = {};\\n\\tdata.read_shift(4);\\n\\to.ArchID = data.read_shift(4);\\n\\tdata.l += length - 8;\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.1.7.60 Workbook */\\nfunction parse_wb_bin(data, opts) {\\n\\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \\\"\\\" };\\n\\tvar pass = false, z;\\n\\n\\trecordhopper(data, function hopper_wb(val, R) {\\n\\t\\tswitch(R.n) {\\n\\t\\t\\tcase 'BrtBundleSh': wb.Sheets.push(val); break;\\n\\n\\t\\t\\tcase 'BrtBeginBook': break;\\n\\t\\t\\tcase 'BrtFileVersion': break;\\n\\t\\t\\tcase 'BrtWbProp': break;\\n\\t\\t\\tcase 'BrtACBegin': break;\\n\\t\\t\\tcase 'BrtAbsPath15': break;\\n\\t\\t\\tcase 'BrtACEnd': break;\\n\\t\\t\\tcase 'BrtWbFactoid': break;\\n\\t\\t\\t/*case 'BrtBookProtectionIso': break;*/\\n\\t\\t\\tcase 'BrtBookProtection': break;\\n\\t\\t\\tcase 'BrtBeginBookViews': break;\\n\\t\\t\\tcase 'BrtBookView': break;\\n\\t\\t\\tcase 'BrtEndBookViews': break;\\n\\t\\t\\tcase 'BrtBeginBundleShs': break;\\n\\t\\t\\tcase 'BrtEndBundleShs': break;\\n\\t\\t\\tcase 'BrtBeginFnGroup': break;\\n\\t\\t\\tcase 'BrtEndFnGroup': break;\\n\\t\\t\\tcase 'BrtBeginExternals': break;\\n\\t\\t\\tcase 'BrtSupSelf': break;\\n\\t\\t\\tcase 'BrtSupBookSrc': break;\\n\\t\\t\\tcase 'BrtExternSheet': break;\\n\\t\\t\\tcase 'BrtEndExternals': break;\\n\\t\\t\\tcase 'BrtName': break;\\n\\t\\t\\tcase 'BrtCalcProp': break;\\n\\t\\t\\tcase 'BrtUserBookView': break;\\n\\t\\t\\tcase 'BrtBeginPivotCacheIDs': break;\\n\\t\\t\\tcase 'BrtBeginPivotCacheID': break;\\n\\t\\t\\tcase 'BrtEndPivotCacheID': break;\\n\\t\\t\\tcase 'BrtEndPivotCacheIDs': break;\\n\\t\\t\\tcase 'BrtWebOpt': break;\\n\\t\\t\\tcase 'BrtFileRecover': break;\\n\\t\\t\\tcase 'BrtFileSharing': break;\\n\\t\\t\\t/*case 'BrtBeginWebPubItems': break;\\n\\t\\t\\tcase 'BrtBeginWebPubItem': break;\\n\\t\\t\\tcase 'BrtEndWebPubItem': break;\\n\\t\\t\\tcase 'BrtEndWebPubItems': break;*/\\n\\n\\t\\t\\t/* Smart Tags */\\n\\t\\t\\tcase 'BrtBeginSmartTagTypes': break;\\n\\t\\t\\tcase 'BrtSmartTagType': break;\\n\\t\\t\\tcase 'BrtEndSmartTagTypes': break;\\n\\n\\t\\t\\tcase 'BrtFRTBegin': pass = true; break;\\n\\t\\t\\tcase 'BrtFRTArchID$': break;\\n\\t\\t\\tcase 'BrtWorkBookPr15': break;\\n\\t\\t\\tcase 'BrtFRTEnd': pass = false; break;\\n\\t\\t\\tcase 'BrtEndBook': break;\\n\\t\\t\\tdefault: if(!pass || opts.WTF) throw new Error(\\\"Unexpected record \\\" + R.n);\\n\\t\\t}\\n\\t});\\n\\n\\tparse_wb_defaults(wb);\\n\\n\\treturn wb;\\n}\\n\\n/* [MS-XLSB] 2.1.7.60 Workbook */\\nfunction write_BUNDLESHS(ba, wb, opts) {\\n\\twrite_record(ba, \\\"BrtBeginBundleShs\\\");\\n\\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\\n\\t\\tvar d = { hsState: 0, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\\n\\t\\twrite_record(ba, \\\"BrtBundleSh\\\", write_BrtBundleSh(d));\\n\\t}\\n\\twrite_record(ba, \\\"BrtEndBundleShs\\\");\\n}\\n\\n/* [MS-XLSB] 2.4.643 BrtFileVersion */\\nfunction write_BrtFileVersion(data, o) {\\n\\tif(!o) o = new_buf(127);\\n\\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\\n\\twrite_XLWideString(\\\"SheetJS\\\", o);\\n\\twrite_XLWideString(XLSX.version, o);\\n\\twrite_XLWideString(XLSX.version, o);\\n\\twrite_XLWideString(\\\"7262\\\", o);\\n\\to.length = o.l;\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.1.7.60 Workbook */\\nfunction write_BOOKVIEWS(ba, wb, opts) {\\n\\twrite_record(ba, \\\"BrtBeginBookViews\\\");\\n\\t/* 1*(BrtBookView *FRT) */\\n\\twrite_record(ba, \\\"BrtEndBookViews\\\");\\n}\\n\\n/* [MS-XLSB] 2.4.302 BrtCalcProp */\\nfunction write_BrtCalcProp(data, o) {\\n\\tif(!o) o = new_buf(26);\\n\\to.write_shift(4,0); /* force recalc */\\n\\to.write_shift(4,1);\\n\\to.write_shift(4,0);\\n\\twrite_Xnum(0, o);\\n\\to.write_shift(-4, 1023);\\n\\to.write_shift(1, 0x33);\\n\\to.write_shift(1, 0x00);\\n\\treturn o;\\n}\\n\\nfunction write_BrtFileRecover(data, o) {\\n\\tif(!o) o = new_buf(1);\\n\\to.write_shift(1,0);\\n\\treturn o;\\n}\\n\\n/* [MS-XLSB] 2.1.7.60 Workbook */\\nfunction write_wb_bin(wb, opts) {\\n\\tvar ba = buf_array();\\n\\twrite_record(ba, \\\"BrtBeginBook\\\");\\n\\twrite_record(ba, \\\"BrtFileVersion\\\", write_BrtFileVersion());\\n\\t/* [[BrtFileSharingIso] BrtFileSharing] */\\n\\twrite_record(ba, \\\"BrtWbProp\\\", write_BrtWbProp());\\n\\t/* [ACABSPATH] */\\n\\t/* [[BrtBookProtectionIso] BrtBookProtection] */\\n\\twrite_BOOKVIEWS(ba, wb, opts);\\n\\twrite_BUNDLESHS(ba, wb, opts);\\n\\t/* [FNGROUP] */\\n\\t/* [EXTERNALS] */\\n\\t/* *BrtName */\\n\\twrite_record(ba, \\\"BrtCalcProp\\\", write_BrtCalcProp());\\n\\t/* [BrtOleSize] */\\n\\t/* *(BrtUserBookView *FRT) */\\n\\t/* [PIVOTCACHEIDS] */\\n\\t/* [BrtWbFactoid] */\\n\\t/* [SMARTTAGTYPES] */\\n\\t/* [BrtWebOpt] */\\n\\twrite_record(ba, \\\"BrtFileRecover\\\", write_BrtFileRecover());\\n\\t/* [WEBPUBITEMS] */\\n\\t/* [CRERRS] */\\n\\t/* FRTWORKBOOK */\\n\\twrite_record(ba, \\\"BrtEndBook\\\");\\n\\n\\treturn ba.end();\\n}\\nfunction parse_wb(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? parse_wb_bin : parse_wb_xml)(data, opts);\\n}\\n\\nfunction parse_ws(data, name, opts, rels) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? parse_ws_bin : parse_ws_xml)(data, opts, rels);\\n}\\n\\nfunction parse_sty(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? parse_sty_bin : parse_sty_xml)(data, opts);\\n}\\n\\nfunction parse_theme(data, name, opts) {\\n\\treturn parse_theme_xml(data, opts);\\n}\\n\\nfunction parse_sst(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? parse_sst_bin : parse_sst_xml)(data, opts);\\n}\\n\\nfunction parse_cmnt(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? parse_comments_bin : parse_comments_xml)(data, opts);\\n}\\n\\nfunction parse_cc(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? parse_cc_bin : parse_cc_xml)(data, opts);\\n}\\n\\nfunction write_wb(wb, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? write_wb_bin : write_wb_xml)(wb, opts);\\n}\\n\\nfunction write_ws(data, name, opts, wb) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? write_ws_bin : write_ws_xml)(data, opts, wb);\\n}\\n\\nfunction write_sty(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? write_sty_bin : write_sty_xml)(data, opts);\\n}\\n\\nfunction write_sst(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? write_sst_bin : write_sst_xml)(data, opts);\\n}\\n/*\\nfunction write_cmnt(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? write_comments_bin : write_comments_xml)(data, opts);\\n}\\n\\nfunction write_cc(data, name, opts) {\\n\\treturn (name.substr(-4)===\\\".bin\\\" ? write_cc_bin : write_cc_xml)(data, opts);\\n}\\n*/\\nvar attregexg2=/([\\\\w:]+)=((?:\\\")([^\\\"]*)(?:\\\")|(?:')([^']*)(?:'))/g;\\nvar attregex2=/([\\\\w:]+)=((?:\\\")(?:[^\\\"]*)(?:\\\")|(?:')(?:[^']*)(?:'))/;\\nvar _chr = function(c) { return String.fromCharCode(c); };\\nfunction xlml_parsexmltag(tag, skip_root) {\\n\\tvar words = tag.split(/\\\\s+/);\\n\\tvar z = []; if(!skip_root) z[0] = words[0];\\n\\tif(words.length === 1) return z;\\n\\tvar m = tag.match(attregexg2), y, j, w, i;\\n\\tif(m) for(i = 0; i != m.length; ++i) {\\n\\t\\ty = m[i].match(attregex2);\\n\\t\\tif((j=y[1].indexOf(\\\":\\\")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2);\\n\\t\\telse {\\n\\t\\t\\tif(y[1].substr(0,6) === \\\"xmlns:\\\") w = \\\"xmlns\\\"+y[1].substr(6);\\n\\t\\t\\telse w = y[1].substr(j+1);\\n\\t\\t\\tz[w] = y[2].substr(1,y[2].length-2);\\n\\t\\t}\\n\\t}\\n\\treturn z;\\n}\\nfunction xlml_parsexmltagobj(tag) {\\n\\tvar words = tag.split(/\\\\s+/);\\n\\tvar z = {};\\n\\tif(words.length === 1) return z;\\n\\tvar m = tag.match(attregexg2), y, j, w, i;\\n\\tif(m) for(i = 0; i != m.length; ++i) {\\n\\t\\ty = m[i].match(attregex2);\\n\\t\\tif((j=y[1].indexOf(\\\":\\\")) === -1) z[y[1]] = y[2].substr(1,y[2].length-2);\\n\\t\\telse {\\n\\t\\t\\tif(y[1].substr(0,6) === \\\"xmlns:\\\") w = \\\"xmlns\\\"+y[1].substr(6);\\n\\t\\t\\telse w = y[1].substr(j+1);\\n\\t\\t\\tz[w] = y[2].substr(1,y[2].length-2);\\n\\t\\t}\\n\\t}\\n\\treturn z;\\n}\\n\\n// ----\\n\\nfunction xlml_format(format, value) {\\n\\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\\n\\tif(fmt === \\\"General\\\") return SSF._general(value);\\n\\treturn SSF.format(fmt, value);\\n}\\n\\nfunction xlml_set_custprop(Custprops, Rn, cp, val) {\\n\\tswitch((cp[0].match(/dt:dt=\\\"([\\\\w.]+)\\\"/)||[\\\"\\\",\\\"\\\"])[1]) {\\n\\t\\tcase \\\"boolean\\\": val = parsexmlbool(val); break;\\n\\t\\tcase \\\"i2\\\": case \\\"int\\\": val = parseInt(val, 10); break;\\n\\t\\tcase \\\"r4\\\": case \\\"float\\\": val = parseFloat(val); break;\\n\\t\\tcase \\\"date\\\": case \\\"dateTime.tz\\\": val = new Date(val); break;\\n\\t\\tcase \\\"i8\\\": case \\\"string\\\": case \\\"fixed\\\": case \\\"uuid\\\": case \\\"bin.base64\\\": break;\\n\\t\\tdefault: throw \\\"bad custprop:\\\" + cp[0];\\n\\t}\\n\\tCustprops[unescapexml(Rn[3])] = val;\\n}\\n\\nfunction safe_format_xlml(cell, nf, o) {\\n\\ttry {\\n\\t\\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\\n\\t\\telse if(nf === \\\"General\\\") {\\n\\t\\t\\tif(cell.t === 'n') {\\n\\t\\t\\t\\tif((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v);\\n\\t\\t\\t\\telse cell.w = SSF._general_num(cell.v);\\n\\t\\t\\t}\\n\\t\\t\\telse cell.w = SSF._general(cell.v);\\n\\t\\t}\\n\\t\\telse cell.w = xlml_format(nf||\\\"General\\\", cell.v);\\n\\t\\tif(o.cellNF) cell.z = XLMLFormatMap[nf]||nf||\\\"General\\\";\\n\\t} catch(e) { if(o.WTF) throw e; }\\n}\\n\\nfunction process_style_xlml(styles, stag, opts) {\\n\\tif(opts.cellStyles) {\\n\\t\\tif(stag.Interior) {\\n\\t\\t\\tvar I = stag.Interior;\\n\\t\\t\\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\\n\\t\\t}\\n\\t}\\n\\tstyles[stag.ID] = stag;\\n}\\n\\n/* TODO: there must exist some form of OSP-blessed spec */\\nfunction parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, o) {\\n\\tvar nf = \\\"General\\\", sid = cell.StyleID, S = {}; o = o || {};\\n\\tvar interiors = [];\\n\\tif(sid === undefined && row) sid = row.StyleID;\\n\\tif(sid === undefined && csty) sid = csty.StyleID;\\n\\twhile(styles[sid] !== undefined) {\\n\\t\\tif(styles[sid].nf) nf = styles[sid].nf;\\n\\t\\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\\n\\t\\tif(!styles[sid].Parent) break;\\n\\t\\tsid = styles[sid].Parent;\\n\\t}\\n\\tswitch(data.Type) {\\n\\t\\tcase 'Boolean':\\n\\t\\t\\tcell.t = 'b';\\n\\t\\t\\tcell.v = parsexmlbool(xml);\\n\\t\\t\\tbreak;\\n\\t\\tcase 'String':\\n\\t\\t\\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\\n\\t\\t\\tcell.v = xml.indexOf(\\\"<\\\") > -1 ? ss : cell.r;\\n\\t\\t\\tbreak;\\n\\t\\tcase 'DateTime':\\n\\t\\t\\tcell.v = (Date.parse(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\\n\\t\\t\\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\\n\\t\\t\\telse if(cell.v >= 1 && cell.v<60) cell.v = cell.v -1;\\n\\t\\t\\tif(!nf || nf == \\\"General\\\") nf = \\\"yyyy-mm-dd\\\";\\n\\t\\t\\t/* falls through */\\n\\t\\tcase 'Number':\\n\\t\\t\\tif(cell.v === undefined) cell.v=+xml;\\n\\t\\t\\tif(!cell.t) cell.t = 'n';\\n\\t\\t\\tbreak;\\n\\t\\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; cell.w = xml; break;\\n\\t\\tdefault: cell.t = 's'; cell.v = xlml_fixstr(ss); break;\\n\\t}\\n\\tsafe_format_xlml(cell, nf, o);\\n\\tif(o.cellFormula != null && cell.Formula) {\\n\\t\\tcell.f = rc_to_a1(unescapexml(cell.Formula), base);\\n\\t\\tcell.Formula = undefined;\\n\\t}\\n\\tif(o.cellStyles) {\\n\\t\\tinteriors.forEach(function(x) {\\n\\t\\t\\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\\n\\t\\t});\\n\\t\\tcell.s = S;\\n\\t}\\n\\tcell.ixfe = cell.StyleID !== undefined ? cell.StyleID : 'Default';\\n}\\n\\nfunction xlml_clean_comment(comment) {\\n\\tcomment.t = comment.v;\\n\\tcomment.v = comment.w = comment.ixfe = undefined;\\n}\\n\\nfunction xlml_normalize(d) {\\n\\tif(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');\\n\\tif(typeof d === 'string') return d;\\n\\tthrow \\\"badf\\\";\\n}\\n\\n/* TODO: Everything */\\nvar xlmlregex = /<(\\\\/?)([a-z0-9]*:|)(\\\\w+)[^>]*>/mg;\\nfunction parse_xlml_xml(d, opts) {\\n\\tvar str = xlml_normalize(d);\\n\\tvar Rn;\\n\\tvar state = [], tmp;\\n\\tvar sheets = {}, sheetnames = [], cursheet = {}, sheetname = \\\"\\\";\\n\\tvar table = {}, cell = {}, row = {}, dtag, didx;\\n\\tvar c = 0, r = 0;\\n\\tvar refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };\\n\\tvar styles = {}, stag = {};\\n\\tvar ss = \\\"\\\", fidx = 0;\\n\\tvar mergecells = [];\\n\\tvar Props = {}, Custprops = {}, pidx = 0, cp = {};\\n\\tvar comments = [], comment = {};\\n\\tvar cstys = [], csty;\\n\\txlmlregex.lastIndex = 0;\\n\\twhile((Rn = xlmlregex.exec(str))) switch(Rn[3]) {\\n\\t\\tcase 'Data':\\n\\t\\t\\tif(state[state.length-1][1]) break;\\n\\t\\t\\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==\\\"Comment\\\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, opts);\\n\\t\\t\\telse { ss = \\\"\\\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\\n\\t\\t\\tbreak;\\n\\t\\tcase 'Cell':\\n\\t\\t\\tif(Rn[1]==='/'){\\n\\t\\t\\t\\tif(comments.length > 0) cell.c = comments;\\n\\t\\t\\t\\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) cursheet[encode_col(c) + encode_row(r)] = cell;\\n\\t\\t\\t\\tif(cell.HRef) {\\n\\t\\t\\t\\t\\tcell.l = {Target:cell.HRef, tooltip:cell.HRefScreenTip};\\n\\t\\t\\t\\t\\tcell.HRef = cell.HRefScreenTip = undefined;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(cell.MergeAcross || cell.MergeDown) {\\n\\t\\t\\t\\t\\tvar cc = c + (parseInt(cell.MergeAcross,10)|0);\\n\\t\\t\\t\\t\\tvar rr = r + (parseInt(cell.MergeDown,10)|0);\\n\\t\\t\\t\\t\\tmergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}});\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t++c;\\n\\t\\t\\t\\tif(cell.MergeAcross) c += +cell.MergeAcross;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcell = xlml_parsexmltagobj(Rn[0]);\\n\\t\\t\\t\\tif(cell.Index) c = +cell.Index - 1;\\n\\t\\t\\t\\tif(c < refguess.s.c) refguess.s.c = c;\\n\\t\\t\\t\\tif(c > refguess.e.c) refguess.e.c = c;\\n\\t\\t\\t\\tif(Rn[0].substr(-2) === \\\"/>\\\") ++c;\\n\\t\\t\\t\\tcomments = [];\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tcase 'Row':\\n\\t\\t\\tif(Rn[1]==='/' || Rn[0].substr(-2) === \\\"/>\\\") {\\n\\t\\t\\t\\tif(r < refguess.s.r) refguess.s.r = r;\\n\\t\\t\\t\\tif(r > refguess.e.r) refguess.e.r = r;\\n\\t\\t\\t\\tif(Rn[0].substr(-2) === \\\"/>\\\") {\\n\\t\\t\\t\\t\\trow = xlml_parsexmltag(Rn[0]);\\n\\t\\t\\t\\t\\tif(row.Index) r = +row.Index - 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tc = 0; ++r;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\trow = xlml_parsexmltag(Rn[0]);\\n\\t\\t\\t\\tif(row.Index) r = +row.Index - 1;\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tcase 'Worksheet': /* TODO: read range from FullRows/FullColumns */\\n\\t\\t\\tif(Rn[1]==='/'){\\n\\t\\t\\t\\tif((tmp=state.pop())[0]!==Rn[3]) throw \\\"Bad state: \\\"+tmp;\\n\\t\\t\\t\\tsheetnames.push(sheetname);\\n\\t\\t\\t\\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) cursheet[\\\"!ref\\\"] = encode_range(refguess);\\n\\t\\t\\t\\tif(mergecells.length) cursheet[\\\"!merges\\\"] = mergecells;\\n\\t\\t\\t\\tsheets[sheetname] = cursheet;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\trefguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };\\n\\t\\t\\t\\tr = c = 0;\\n\\t\\t\\t\\tstate.push([Rn[3], false]);\\n\\t\\t\\t\\ttmp = xlml_parsexmltag(Rn[0]);\\n\\t\\t\\t\\tsheetname = tmp.Name;\\n\\t\\t\\t\\tcursheet = {};\\n\\t\\t\\t\\tmergecells = [];\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tcase 'Table':\\n\\t\\t\\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \\\"Bad state: \\\"+tmp;}\\n\\t\\t\\telse if(Rn[0].slice(-2) == \\\"/>\\\") break;\\n\\t\\t\\telse {\\n\\t\\t\\t\\ttable = xlml_parsexmltag(Rn[0]);\\n\\t\\t\\t\\tstate.push([Rn[3], false]);\\n\\t\\t\\t\\tcstys = [];\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase 'Style':\\n\\t\\t\\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\\n\\t\\t\\telse stag = xlml_parsexmltag(Rn[0]);\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase 'NumberFormat':\\n\\t\\t\\tstag.nf = xlml_parsexmltag(Rn[0]).Format || \\\"General\\\";\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase 'Column':\\n\\t\\t\\tif(state[state.length-1][0] !== 'Table') break;\\n\\t\\t\\tcsty = xlml_parsexmltag(Rn[0]);\\n\\t\\t\\tcstys[(csty.Index-1||cstys.length)] = csty;\\n\\t\\t\\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = csty;\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase 'NamedRange': break;\\n\\t\\tcase 'NamedCell': break;\\n\\t\\tcase 'B': break;\\n\\t\\tcase 'I': break;\\n\\t\\tcase 'U': break;\\n\\t\\tcase 'S': break;\\n\\t\\tcase 'Sub': break;\\n\\t\\tcase 'Sup': break;\\n\\t\\tcase 'Span': break;\\n\\t\\tcase 'Border': break;\\n\\t\\tcase 'Alignment': break;\\n\\t\\tcase 'Borders': break;\\n\\t\\tcase 'Font':\\n\\t\\t\\tif(Rn[0].substr(-2) === \\\"/>\\\") break;\\n\\t\\t\\telse if(Rn[1]===\\\"/\\\") ss += str.slice(fidx, Rn.index);\\n\\t\\t\\telse fidx = Rn.index + Rn[0].length;\\n\\t\\t\\tbreak;\\n\\t\\tcase 'Interior':\\n\\t\\t\\tif(!opts.cellStyles) break;\\n\\t\\t\\tstag.Interior = xlml_parsexmltag(Rn[0]);\\n\\t\\t\\tbreak;\\n\\t\\tcase 'Protection': break;\\n\\n\\t\\tcase 'Author':\\n\\t\\tcase 'Title':\\n\\t\\tcase 'Description':\\n\\t\\tcase 'Created':\\n\\t\\tcase 'Keywords':\\n\\t\\tcase 'Subject':\\n\\t\\tcase 'Category':\\n\\t\\tcase 'Company':\\n\\t\\tcase 'LastAuthor':\\n\\t\\tcase 'LastSaved':\\n\\t\\tcase 'LastPrinted':\\n\\t\\tcase 'Version':\\n\\t\\tcase 'Revision':\\n\\t\\tcase 'TotalTime':\\n\\t\\tcase 'HyperlinkBase':\\n\\t\\tcase 'Manager':\\n\\t\\t\\tif(Rn[0].substr(-2) === \\\"/>\\\") break;\\n\\t\\t\\telse if(Rn[1]===\\\"/\\\") xlml_set_prop(Props, Rn[3], str.slice(pidx, Rn.index));\\n\\t\\t\\telse pidx = Rn.index + Rn[0].length;\\n\\t\\t\\tbreak;\\n\\t\\tcase 'Paragraphs': break;\\n\\n\\t\\tcase 'Styles':\\n\\t\\tcase 'Workbook':\\n\\t\\t\\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \\\"Bad state: \\\"+tmp;}\\n\\t\\t\\telse state.push([Rn[3], false]);\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase 'Comment':\\n\\t\\t\\tif(Rn[1]==='/'){\\n\\t\\t\\t\\tif((tmp=state.pop())[0]!==Rn[3]) throw \\\"Bad state: \\\"+tmp;\\n\\t\\t\\t\\txlml_clean_comment(comment);\\n\\t\\t\\t\\tcomments.push(comment);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tstate.push([Rn[3], false]);\\n\\t\\t\\t\\ttmp = xlml_parsexmltag(Rn[0]);\\n\\t\\t\\t\\tcomment = {a:tmp.Author};\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\n\\t\\tcase 'Name': break;\\n\\n\\t\\tcase 'ComponentOptions':\\n\\t\\tcase 'DocumentProperties':\\n\\t\\tcase 'CustomDocumentProperties':\\n\\t\\tcase 'OfficeDocumentSettings':\\n\\t\\tcase 'PivotTable':\\n\\t\\tcase 'PivotCache':\\n\\t\\tcase 'Names':\\n\\t\\tcase 'MapInfo':\\n\\t\\tcase 'PageBreaks':\\n\\t\\tcase 'QueryTable':\\n\\t\\tcase 'DataValidation':\\n\\t\\tcase 'AutoFilter':\\n\\t\\tcase 'Sorting':\\n\\t\\tcase 'Schema':\\n\\t\\tcase 'data':\\n\\t\\tcase 'ConditionalFormatting':\\n\\t\\tcase 'SmartTagType':\\n\\t\\tcase 'SmartTags':\\n\\t\\tcase 'ExcelWorkbook':\\n\\t\\tcase 'WorkbookOptions':\\n\\t\\tcase 'WorksheetOptions':\\n\\t\\t\\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \\\"Bad state: \\\"+tmp;}\\n\\t\\t\\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\\n\\t\\t\\tbreak;\\n\\n\\t\\tdefault:\\n\\t\\t\\tvar seen = true;\\n\\t\\t\\tswitch(state[state.length-1][0]) {\\n\\t\\t\\t\\t/* OfficeDocumentSettings */\\n\\t\\t\\t\\tcase 'OfficeDocumentSettings': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'AllowPNG': break;\\n\\t\\t\\t\\t\\tcase 'RemovePersonalInformation': break;\\n\\t\\t\\t\\t\\tcase 'DownloadComponents': break;\\n\\t\\t\\t\\t\\tcase 'LocationOfComponents': break;\\n\\t\\t\\t\\t\\tcase 'Colors': break;\\n\\t\\t\\t\\t\\tcase 'Color': break;\\n\\t\\t\\t\\t\\tcase 'Index': break;\\n\\t\\t\\t\\t\\tcase 'RGB': break;\\n\\t\\t\\t\\t\\tcase 'PixelsPerInch': break;\\n\\t\\t\\t\\t\\tcase 'TargetScreenSize': break;\\n\\t\\t\\t\\t\\tcase 'ReadOnlyRecommended': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* ComponentOptions */\\n\\t\\t\\t\\tcase 'ComponentOptions': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'Toolbar': break;\\n\\t\\t\\t\\t\\tcase 'HideOfficeLogo': break;\\n\\t\\t\\t\\t\\tcase 'SpreadsheetAutoFit': break;\\n\\t\\t\\t\\t\\tcase 'Label': break;\\n\\t\\t\\t\\t\\tcase 'Caption': break;\\n\\t\\t\\t\\t\\tcase 'MaxHeight': break;\\n\\t\\t\\t\\t\\tcase 'MaxWidth': break;\\n\\t\\t\\t\\t\\tcase 'NextSheetNumber': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* ExcelWorkbook */\\n\\t\\t\\t\\tcase 'ExcelWorkbook': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'WindowHeight': break;\\n\\t\\t\\t\\t\\tcase 'WindowWidth': break;\\n\\t\\t\\t\\t\\tcase 'WindowTopX': break;\\n\\t\\t\\t\\t\\tcase 'WindowTopY': break;\\n\\t\\t\\t\\t\\tcase 'TabRatio': break;\\n\\t\\t\\t\\t\\tcase 'ProtectStructure': break;\\n\\t\\t\\t\\t\\tcase 'ProtectWindows': break;\\n\\t\\t\\t\\t\\tcase 'ActiveSheet': break;\\n\\t\\t\\t\\t\\tcase 'DisplayInkNotes': break;\\n\\t\\t\\t\\t\\tcase 'FirstVisibleSheet': break;\\n\\t\\t\\t\\t\\tcase 'SupBook': break;\\n\\t\\t\\t\\t\\tcase 'SheetName': break;\\n\\t\\t\\t\\t\\tcase 'SheetIndex': break;\\n\\t\\t\\t\\t\\tcase 'SheetIndexFirst': break;\\n\\t\\t\\t\\t\\tcase 'SheetIndexLast': break;\\n\\t\\t\\t\\t\\tcase 'Dll': break;\\n\\t\\t\\t\\t\\tcase 'AcceptLabelsInFormulas': break;\\n\\t\\t\\t\\t\\tcase 'DoNotSaveLinkValues': break;\\n\\t\\t\\t\\t\\tcase 'Date1904': break;\\n\\t\\t\\t\\t\\tcase 'Iteration': break;\\n\\t\\t\\t\\t\\tcase 'MaxIterations': break;\\n\\t\\t\\t\\t\\tcase 'MaxChange': break;\\n\\t\\t\\t\\t\\tcase 'Path': break;\\n\\t\\t\\t\\t\\tcase 'Xct': break;\\n\\t\\t\\t\\t\\tcase 'Count': break;\\n\\t\\t\\t\\t\\tcase 'SelectedSheets': break;\\n\\t\\t\\t\\t\\tcase 'Calculation': break;\\n\\t\\t\\t\\t\\tcase 'Uncalced': break;\\n\\t\\t\\t\\t\\tcase 'StartupPrompt': break;\\n\\t\\t\\t\\t\\tcase 'Crn': break;\\n\\t\\t\\t\\t\\tcase 'ExternName': break;\\n\\t\\t\\t\\t\\tcase 'Formula': break;\\n\\t\\t\\t\\t\\tcase 'ColFirst': break;\\n\\t\\t\\t\\t\\tcase 'ColLast': break;\\n\\t\\t\\t\\t\\tcase 'WantAdvise': break;\\n\\t\\t\\t\\t\\tcase 'Boolean': break;\\n\\t\\t\\t\\t\\tcase 'Error': break;\\n\\t\\t\\t\\t\\tcase 'Text': break;\\n\\t\\t\\t\\t\\tcase 'OLE': break;\\n\\t\\t\\t\\t\\tcase 'NoAutoRecover': break;\\n\\t\\t\\t\\t\\tcase 'PublishObjects': break;\\n\\t\\t\\t\\t\\tcase 'DoNotCalculateBeforeSave': break;\\n\\t\\t\\t\\t\\tcase 'Number': break;\\n\\t\\t\\t\\t\\tcase 'RefModeR1C1': break;\\n\\t\\t\\t\\t\\tcase 'EmbedSaveSmartTags': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* WorkbookOptions */\\n\\t\\t\\t\\tcase 'WorkbookOptions': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'OWCVersion': break;\\n\\t\\t\\t\\t\\tcase 'Height': break;\\n\\t\\t\\t\\t\\tcase 'Width': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* WorksheetOptions */\\n\\t\\t\\t\\tcase 'WorksheetOptions': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'Unsynced': break;\\n\\t\\t\\t\\t\\tcase 'Visible': break;\\n\\t\\t\\t\\t\\tcase 'Print': break;\\n\\t\\t\\t\\t\\tcase 'Panes': break;\\n\\t\\t\\t\\t\\tcase 'Scale': break;\\n\\t\\t\\t\\t\\tcase 'Pane': break;\\n\\t\\t\\t\\t\\tcase 'Number': break;\\n\\t\\t\\t\\t\\tcase 'Layout': break;\\n\\t\\t\\t\\t\\tcase 'Header': break;\\n\\t\\t\\t\\t\\tcase 'Footer': break;\\n\\t\\t\\t\\t\\tcase 'PageSetup': break;\\n\\t\\t\\t\\t\\tcase 'PageMargins': break;\\n\\t\\t\\t\\t\\tcase 'Selected': break;\\n\\t\\t\\t\\t\\tcase 'ProtectObjects': break;\\n\\t\\t\\t\\t\\tcase 'EnableSelection': break;\\n\\t\\t\\t\\t\\tcase 'ProtectScenarios': break;\\n\\t\\t\\t\\t\\tcase 'ValidPrinterInfo': break;\\n\\t\\t\\t\\t\\tcase 'HorizontalResolution': break;\\n\\t\\t\\t\\t\\tcase 'VerticalResolution': break;\\n\\t\\t\\t\\t\\tcase 'NumberofCopies': break;\\n\\t\\t\\t\\t\\tcase 'ActiveRow': break;\\n\\t\\t\\t\\t\\tcase 'ActiveCol': break;\\n\\t\\t\\t\\t\\tcase 'ActivePane': break;\\n\\t\\t\\t\\t\\tcase 'TopRowVisible': break;\\n\\t\\t\\t\\t\\tcase 'TopRowBottomPane': break;\\n\\t\\t\\t\\t\\tcase 'LeftColumnVisible': break;\\n\\t\\t\\t\\t\\tcase 'LeftColumnRightPane': break;\\n\\t\\t\\t\\t\\tcase 'FitToPage': break;\\n\\t\\t\\t\\t\\tcase 'RangeSelection': break;\\n\\t\\t\\t\\t\\tcase 'PaperSizeIndex': break;\\n\\t\\t\\t\\t\\tcase 'PageLayoutZoom': break;\\n\\t\\t\\t\\t\\tcase 'PageBreakZoom': break;\\n\\t\\t\\t\\t\\tcase 'FilterOn': break;\\n\\t\\t\\t\\t\\tcase 'DoNotDisplayGridlines': break;\\n\\t\\t\\t\\t\\tcase 'SplitHorizontal': break;\\n\\t\\t\\t\\t\\tcase 'SplitVertical': break;\\n\\t\\t\\t\\t\\tcase 'FreezePanes': break;\\n\\t\\t\\t\\t\\tcase 'FrozenNoSplit': break;\\n\\t\\t\\t\\t\\tcase 'FitWidth': break;\\n\\t\\t\\t\\t\\tcase 'FitHeight': break;\\n\\t\\t\\t\\t\\tcase 'CommentsLayout': break;\\n\\t\\t\\t\\t\\tcase 'Zoom': break;\\n\\t\\t\\t\\t\\tcase 'LeftToRight': break;\\n\\t\\t\\t\\t\\tcase 'Gridlines': break;\\n\\t\\t\\t\\t\\tcase 'AllowSort': break;\\n\\t\\t\\t\\t\\tcase 'AllowFilter': break;\\n\\t\\t\\t\\t\\tcase 'AllowInsertRows': break;\\n\\t\\t\\t\\t\\tcase 'AllowDeleteRows': break;\\n\\t\\t\\t\\t\\tcase 'AllowInsertCols': break;\\n\\t\\t\\t\\t\\tcase 'AllowDeleteCols': break;\\n\\t\\t\\t\\t\\tcase 'AllowInsertHyperlinks': break;\\n\\t\\t\\t\\t\\tcase 'AllowFormatCells': break;\\n\\t\\t\\t\\t\\tcase 'AllowSizeCols': break;\\n\\t\\t\\t\\t\\tcase 'AllowSizeRows': break;\\n\\t\\t\\t\\t\\tcase 'NoSummaryRowsBelowDetail': break;\\n\\t\\t\\t\\t\\tcase 'TabColorIndex': break;\\n\\t\\t\\t\\t\\tcase 'DoNotDisplayHeadings': break;\\n\\t\\t\\t\\t\\tcase 'ShowPageLayoutZoom': break;\\n\\t\\t\\t\\t\\tcase 'NoSummaryColumnsRightDetail': break;\\n\\t\\t\\t\\t\\tcase 'BlackAndWhite': break;\\n\\t\\t\\t\\t\\tcase 'DoNotDisplayZeros': break;\\n\\t\\t\\t\\t\\tcase 'DisplayPageBreak': break;\\n\\t\\t\\t\\t\\tcase 'RowColHeadings': break;\\n\\t\\t\\t\\t\\tcase 'DoNotDisplayOutline': break;\\n\\t\\t\\t\\t\\tcase 'NoOrientation': break;\\n\\t\\t\\t\\t\\tcase 'AllowUsePivotTables': break;\\n\\t\\t\\t\\t\\tcase 'ZeroHeight': break;\\n\\t\\t\\t\\t\\tcase 'ViewableRange': break;\\n\\t\\t\\t\\t\\tcase 'Selection': break;\\n\\t\\t\\t\\t\\tcase 'ProtectContents': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* PivotTable */\\n\\t\\t\\t\\tcase 'PivotTable': case 'PivotCache': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'ImmediateItemsOnDrop': break;\\n\\t\\t\\t\\t\\tcase 'ShowPageMultipleItemLabel': break;\\n\\t\\t\\t\\t\\tcase 'CompactRowIndent': break;\\n\\t\\t\\t\\t\\tcase 'Location': break;\\n\\t\\t\\t\\t\\tcase 'PivotField': break;\\n\\t\\t\\t\\t\\tcase 'Orientation': break;\\n\\t\\t\\t\\t\\tcase 'LayoutForm': break;\\n\\t\\t\\t\\t\\tcase 'LayoutSubtotalLocation': break;\\n\\t\\t\\t\\t\\tcase 'LayoutCompactRow': break;\\n\\t\\t\\t\\t\\tcase 'Position': break;\\n\\t\\t\\t\\t\\tcase 'PivotItem': break;\\n\\t\\t\\t\\t\\tcase 'DataType': break;\\n\\t\\t\\t\\t\\tcase 'DataField': break;\\n\\t\\t\\t\\t\\tcase 'SourceName': break;\\n\\t\\t\\t\\t\\tcase 'ParentField': break;\\n\\t\\t\\t\\t\\tcase 'PTLineItems': break;\\n\\t\\t\\t\\t\\tcase 'PTLineItem': break;\\n\\t\\t\\t\\t\\tcase 'CountOfSameItems': break;\\n\\t\\t\\t\\t\\tcase 'Item': break;\\n\\t\\t\\t\\t\\tcase 'ItemType': break;\\n\\t\\t\\t\\t\\tcase 'PTSource': break;\\n\\t\\t\\t\\t\\tcase 'CacheIndex': break;\\n\\t\\t\\t\\t\\tcase 'ConsolidationReference': break;\\n\\t\\t\\t\\t\\tcase 'FileName': break;\\n\\t\\t\\t\\t\\tcase 'Reference': break;\\n\\t\\t\\t\\t\\tcase 'NoColumnGrand': break;\\n\\t\\t\\t\\t\\tcase 'NoRowGrand': break;\\n\\t\\t\\t\\t\\tcase 'BlankLineAfterItems': break;\\n\\t\\t\\t\\t\\tcase 'Hidden': break;\\n\\t\\t\\t\\t\\tcase 'Subtotal': break;\\n\\t\\t\\t\\t\\tcase 'BaseField': break;\\n\\t\\t\\t\\t\\tcase 'MapChildItems': break;\\n\\t\\t\\t\\t\\tcase 'Function': break;\\n\\t\\t\\t\\t\\tcase 'RefreshOnFileOpen': break;\\n\\t\\t\\t\\t\\tcase 'PrintSetTitles': break;\\n\\t\\t\\t\\t\\tcase 'MergeLabels': break;\\n\\t\\t\\t\\t\\tcase 'DefaultVersion': break;\\n\\t\\t\\t\\t\\tcase 'RefreshName': break;\\n\\t\\t\\t\\t\\tcase 'RefreshDate': break;\\n\\t\\t\\t\\t\\tcase 'RefreshDateCopy': break;\\n\\t\\t\\t\\t\\tcase 'VersionLastRefresh': break;\\n\\t\\t\\t\\t\\tcase 'VersionLastUpdate': break;\\n\\t\\t\\t\\t\\tcase 'VersionUpdateableMin': break;\\n\\t\\t\\t\\t\\tcase 'VersionRefreshableMin': break;\\n\\t\\t\\t\\t\\tcase 'Calculation': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* PageBreaks */\\n\\t\\t\\t\\tcase 'PageBreaks': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'ColBreaks': break;\\n\\t\\t\\t\\t\\tcase 'ColBreak': break;\\n\\t\\t\\t\\t\\tcase 'RowBreaks': break;\\n\\t\\t\\t\\t\\tcase 'RowBreak': break;\\n\\t\\t\\t\\t\\tcase 'ColStart': break;\\n\\t\\t\\t\\t\\tcase 'ColEnd': break;\\n\\t\\t\\t\\t\\tcase 'RowEnd': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* AutoFilter */\\n\\t\\t\\t\\tcase 'AutoFilter': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'AutoFilterColumn': break;\\n\\t\\t\\t\\t\\tcase 'AutoFilterCondition': break;\\n\\t\\t\\t\\t\\tcase 'AutoFilterAnd': break;\\n\\t\\t\\t\\t\\tcase 'AutoFilterOr': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* QueryTable */\\n\\t\\t\\t\\tcase 'QueryTable': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'Id': break;\\n\\t\\t\\t\\t\\tcase 'AutoFormatFont': break;\\n\\t\\t\\t\\t\\tcase 'AutoFormatPattern': break;\\n\\t\\t\\t\\t\\tcase 'QuerySource': break;\\n\\t\\t\\t\\t\\tcase 'QueryType': break;\\n\\t\\t\\t\\t\\tcase 'EnableRedirections': break;\\n\\t\\t\\t\\t\\tcase 'RefreshedInXl9': break;\\n\\t\\t\\t\\t\\tcase 'URLString': break;\\n\\t\\t\\t\\t\\tcase 'HTMLTables': break;\\n\\t\\t\\t\\t\\tcase 'Connection': break;\\n\\t\\t\\t\\t\\tcase 'CommandText': break;\\n\\t\\t\\t\\t\\tcase 'RefreshInfo': break;\\n\\t\\t\\t\\t\\tcase 'NoTitles': break;\\n\\t\\t\\t\\t\\tcase 'NextId': break;\\n\\t\\t\\t\\t\\tcase 'ColumnInfo': break;\\n\\t\\t\\t\\t\\tcase 'OverwriteCells': break;\\n\\t\\t\\t\\t\\tcase 'DoNotPromptForFile': break;\\n\\t\\t\\t\\t\\tcase 'TextWizardSettings': break;\\n\\t\\t\\t\\t\\tcase 'Source': break;\\n\\t\\t\\t\\t\\tcase 'Number': break;\\n\\t\\t\\t\\t\\tcase 'Decimal': break;\\n\\t\\t\\t\\t\\tcase 'ThousandSeparator': break;\\n\\t\\t\\t\\t\\tcase 'TrailingMinusNumbers': break;\\n\\t\\t\\t\\t\\tcase 'FormatSettings': break;\\n\\t\\t\\t\\t\\tcase 'FieldType': break;\\n\\t\\t\\t\\t\\tcase 'Delimiters': break;\\n\\t\\t\\t\\t\\tcase 'Tab': break;\\n\\t\\t\\t\\t\\tcase 'Comma': break;\\n\\t\\t\\t\\t\\tcase 'AutoFormatName': break;\\n\\t\\t\\t\\t\\tcase 'VersionLastEdit': break;\\n\\t\\t\\t\\t\\tcase 'VersionLastRefresh': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* Sorting */\\n\\t\\t\\t\\tcase 'Sorting':\\n\\t\\t\\t\\t/* ConditionalFormatting */\\n\\t\\t\\t\\tcase 'ConditionalFormatting':\\n\\t\\t\\t\\t/* DataValidation */\\n\\t\\t\\t\\tcase 'DataValidation': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'Range': break;\\n\\t\\t\\t\\t\\tcase 'Type': break;\\n\\t\\t\\t\\t\\tcase 'Min': break;\\n\\t\\t\\t\\t\\tcase 'Max': break;\\n\\t\\t\\t\\t\\tcase 'Sort': break;\\n\\t\\t\\t\\t\\tcase 'Descending': break;\\n\\t\\t\\t\\t\\tcase 'Order': break;\\n\\t\\t\\t\\t\\tcase 'CaseSensitive': break;\\n\\t\\t\\t\\t\\tcase 'Value': break;\\n\\t\\t\\t\\t\\tcase 'ErrorStyle': break;\\n\\t\\t\\t\\t\\tcase 'ErrorMessage': break;\\n\\t\\t\\t\\t\\tcase 'ErrorTitle': break;\\n\\t\\t\\t\\t\\tcase 'CellRangeList': break;\\n\\t\\t\\t\\t\\tcase 'InputMessage': break;\\n\\t\\t\\t\\t\\tcase 'InputTitle': break;\\n\\t\\t\\t\\t\\tcase 'ComboHide': break;\\n\\t\\t\\t\\t\\tcase 'InputHide': break;\\n\\t\\t\\t\\t\\tcase 'Condition': break;\\n\\t\\t\\t\\t\\tcase 'Qualifier': break;\\n\\t\\t\\t\\t\\tcase 'UseBlank': break;\\n\\t\\t\\t\\t\\tcase 'Value1': break;\\n\\t\\t\\t\\t\\tcase 'Value2': break;\\n\\t\\t\\t\\t\\tcase 'Format': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* MapInfo (schema) */\\n\\t\\t\\t\\tcase 'MapInfo': case 'Schema': case 'data': switch(Rn[3]) {\\n\\t\\t\\t\\t\\tcase 'Map': break;\\n\\t\\t\\t\\t\\tcase 'Entry': break;\\n\\t\\t\\t\\t\\tcase 'Range': break;\\n\\t\\t\\t\\t\\tcase 'XPath': break;\\n\\t\\t\\t\\t\\tcase 'Field': break;\\n\\t\\t\\t\\t\\tcase 'XSDType': break;\\n\\t\\t\\t\\t\\tcase 'FilterOn': break;\\n\\t\\t\\t\\t\\tcase 'Aggregate': break;\\n\\t\\t\\t\\t\\tcase 'ElementType': break;\\n\\t\\t\\t\\t\\tcase 'AttributeType': break;\\n\\t\\t\\t\\t/* These are from xsd (XML Schema Definition) */\\n\\t\\t\\t\\t\\tcase 'schema':\\n\\t\\t\\t\\t\\tcase 'element':\\n\\t\\t\\t\\t\\tcase 'complexType':\\n\\t\\t\\t\\t\\tcase 'datatype':\\n\\t\\t\\t\\t\\tcase 'all':\\n\\t\\t\\t\\t\\tcase 'attribute':\\n\\t\\t\\t\\t\\tcase 'extends': break;\\n\\n\\t\\t\\t\\t\\tcase 'row': break;\\n\\t\\t\\t\\t\\tdefault: seen = false;\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* SmartTags (can be anything) */\\n\\t\\t\\t\\tcase 'SmartTags': break;\\n\\n\\t\\t\\t\\tdefault: seen = false; break;\\n\\t\\t\\t}\\n\\t\\t\\tif(seen) break;\\n\\t\\t\\t/* CustomDocumentProperties */\\n\\t\\t\\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \\\"|\\\" + state.join(\\\"|\\\");\\n\\t\\t\\tif(state[state.length-1][0]==='CustomDocumentProperties') {\\n\\t\\t\\t\\tif(Rn[0].substr(-2) === \\\"/>\\\") break;\\n\\t\\t\\t\\telse if(Rn[1]===\\\"/\\\") xlml_set_custprop(Custprops, Rn, cp, str.slice(pidx, Rn.index));\\n\\t\\t\\t\\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t\\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \\\"|\\\" + state.join(\\\"|\\\");\\n\\t}\\n\\tvar out = {};\\n\\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\\n\\tout.SheetNames = sheetnames;\\n\\tout.SSF = SSF.get_table();\\n\\tout.Props = Props;\\n\\tout.Custprops = Custprops;\\n\\treturn out;\\n}\\n\\nfunction parse_xlml(data, opts) {\\n\\tfix_read_opts(opts=opts||{});\\n\\tswitch(opts.type||\\\"base64\\\") {\\n\\t\\tcase \\\"base64\\\": return parse_xlml_xml(Base64.decode(data), opts);\\n\\t\\tcase \\\"binary\\\": case \\\"buffer\\\": case \\\"file\\\": return parse_xlml_xml(data, opts);\\n\\t\\tcase \\\"array\\\": return parse_xlml_xml(data.map(_chr).join(\\\"\\\"), opts);\\n\\t}\\n}\\n\\nfunction write_xlml(wb, opts) { }\\n\\n/* [MS-OLEDS] 2.3.8 CompObjStream */\\nfunction parse_compobj(obj) {\\n\\tvar v = {};\\n\\tvar o = obj.content;\\n\\n\\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\\n\\tvar l = 28, m;\\n\\tm = __lpstr(o, l);\\n\\tl += 4 + __readUInt32LE(o,l);\\n\\tv.UserType = m;\\n\\n\\t/* [MS-OLEDS] 2.3.1 ClipboardFormatOrAnsiString */\\n\\tm = __readUInt32LE(o,l); l+= 4;\\n\\tswitch(m) {\\n\\t\\tcase 0x00000000: break;\\n\\t\\tcase 0xffffffff: case 0xfffffffe: l+=4; break;\\n\\t\\tdefault:\\n\\t\\t\\tif(m > 0x190) throw new Error(\\\"Unsupported Clipboard: \\\" + m.toString(16));\\n\\t\\t\\tl += m;\\n\\t}\\n\\n\\tm = __lpstr(o, l); l += m.length === 0 ? 0 : 5 + m.length; v.Reserved1 = m;\\n\\n\\tif((m = __readUInt32LE(o,l)) !== 0x71b2e9f4) return v;\\n\\tthrow \\\"Unsupported Unicode Extension\\\";\\n}\\n\\n/* 2.4.58 Continue logic */\\nfunction slurp(R, blob, length, opts) {\\n\\tvar l = length;\\n\\tvar bufs = [];\\n\\tvar d = blob.slice(blob.l,blob.l+l);\\n\\tif(opts && opts.enc && opts.enc.insitu_decrypt) switch(R.n) {\\n\\tcase 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break;\\n\\tdefault:\\n\\t\\tif(d.length === 0) break;\\n\\t\\topts.enc.insitu_decrypt(d);\\n\\t}\\n\\tbufs.push(d);\\n\\tblob.l += l;\\n\\tvar next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);\\n\\twhile(next != null && next.n === 'Continue') {\\n\\t\\tl = __readUInt16LE(blob,blob.l+2);\\n\\t\\tbufs.push(blob.slice(blob.l+4,blob.l+4+l));\\n\\t\\tblob.l += 4+l;\\n\\t\\tnext = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);\\n\\t}\\n\\tvar b = bconcat(bufs);\\n\\tprep_blob(b, 0);\\n\\tvar ll = 0; b.lens = [];\\n\\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\\n\\treturn R.f(b, b.length, opts);\\n}\\n\\nfunction safe_format_xf(p, opts, date1904) {\\n\\tif(!p.XF) return;\\n\\ttry {\\n\\t\\tvar fmtid = p.XF.ifmt||0;\\n\\t\\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\\n\\t\\telse if(fmtid === 0) {\\n\\t\\t\\tif(p.t === 'n') {\\n\\t\\t\\t\\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\\n\\t\\t\\t\\telse p.w = SSF._general_num(p.v);\\n\\t\\t\\t}\\n\\t\\t\\telse p.w = SSF._general(p.v);\\n\\t\\t}\\n\\t\\telse p.w = SSF.format(fmtid,p.v, {date1904:date1904||false});\\n\\t\\tif(opts.cellNF) p.z = SSF._table[fmtid];\\n\\t} catch(e) { if(opts.WTF) throw e; }\\n}\\n\\nfunction make_cell(val, ixfe, t) {\\n\\treturn {v:val, ixfe:ixfe, t:t};\\n}\\n\\n// 2.3.2\\nfunction parse_workbook(blob, options) {\\n\\tvar wb = {opts:{}};\\n\\tvar Sheets = {};\\n\\tvar out = {};\\n\\tvar Directory = {};\\n\\tvar found_sheet = false;\\n\\tvar range = {};\\n\\tvar last_formula = null;\\n\\tvar sst = [];\\n\\tvar cur_sheet = \\\"\\\";\\n\\tvar Preamble = {};\\n\\tvar lastcell, last_cell, cc, cmnt, rng, rngC, rngR;\\n\\tvar shared_formulae = {};\\n\\tvar array_formulae = []; /* TODO: something more clever */\\n\\tvar temp_val;\\n\\tvar country;\\n\\tvar cell_valid = true;\\n\\tvar XFs = []; /* XF records */\\n\\tvar palette = [];\\n\\tvar get_rgb = function getrgb(icv) {\\n\\t\\tif(icv < 8) return XLSIcv[icv];\\n\\t\\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\\n\\t\\treturn XLSIcv[icv];\\n\\t};\\n\\tvar process_cell_style = function pcs(cell, line) {\\n\\t\\tvar xfd = line.XF.data;\\n\\t\\tif(!xfd || !xfd.patternType) return;\\n\\t\\tline.s = {};\\n\\t\\tline.s.patternType = xfd.patternType;\\n\\t\\tvar t;\\n\\t\\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\\n\\t\\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\\n\\t};\\n\\tvar addcell = function addcell(cell, line, options) {\\n\\t\\tif(!cell_valid) return;\\n\\t\\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line);\\n\\t\\tlastcell = cell;\\n\\t\\tlast_cell = encode_cell(cell);\\n\\t\\tif(range.s) {\\n\\t\\t\\tif(cell.r < range.s.r) range.s.r = cell.r;\\n\\t\\t\\tif(cell.c < range.s.c) range.s.c = cell.c;\\n\\t\\t}\\n\\t\\tif(range.e) {\\n\\t\\t\\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\\n\\t\\t\\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\\n\\t\\t}\\n\\t\\tif(options.sheetRows && lastcell.r >= options.sheetRows) cell_valid = false;\\n\\t\\telse out[last_cell] = line;\\n\\t};\\n\\tvar opts = {\\n\\t\\tenc: false, // encrypted\\n\\t\\tsbcch: 0, // cch in the preceding SupBook\\n\\t\\tsnames: [], // sheetnames\\n\\t\\tsharedf: shared_formulae, // shared formulae by address\\n\\t\\tarrayf: array_formulae, // array formulae array\\n\\t\\trrtabid: [], // RRTabId\\n\\t\\tlastuser: \\\"\\\", // Last User from WriteAccess\\n\\t\\tbiff: 8, // BIFF version\\n\\t\\tcodepage: 0, // CP from CodePage record\\n\\t\\twinlocked: 0, // fLockWn from WinProtect\\n\\t\\twtf: false\\n\\t};\\n\\tif(options.password) opts.password = options.password;\\n\\tvar mergecells = [];\\n\\tvar objects = [];\\n\\tvar supbooks = [[]]; // 1-indexed, will hold extern names\\n\\tvar sbc = 0, sbci = 0, sbcli = 0;\\n\\tsupbooks.SheetNames = opts.snames;\\n\\tsupbooks.sharedf = opts.sharedf;\\n\\tsupbooks.arrayf = opts.arrayf;\\n\\tvar last_Rn = '';\\n\\tvar file_depth = 0; /* TODO: make a real stack */\\n\\n\\t/* explicit override for some broken writers */\\n\\topts.codepage = 1200;\\n\\tset_cp(1200);\\n\\n\\twhile(blob.l < blob.length - 1) {\\n\\t\\tvar s = blob.l;\\n\\t\\tvar RecordType = blob.read_shift(2);\\n\\t\\tif(RecordType === 0 && last_Rn === 'EOF') break;\\n\\t\\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2)), y;\\n\\t\\tvar R = XLSRecordEnum[RecordType];\\n\\t\\tif(R && R.f) {\\n\\t\\t\\tif(options.bookSheets) {\\n\\t\\t\\t\\tif(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;\\n\\t\\t\\t}\\n\\t\\t\\tlast_Rn = R.n;\\n\\t\\t\\tif(R.r === 2 || R.r == 12) {\\n\\t\\t\\t\\tvar rt = blob.read_shift(2); length -= 2;\\n\\t\\t\\t\\tif(!opts.enc && rt !== RecordType) throw \\\"rt mismatch\\\";\\n\\t\\t\\t\\tif(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT\\n\\t\\t\\t}\\n\\t\\t\\t//console.error(R,blob.l,length,blob.length);\\n\\t\\t\\tvar val;\\n\\t\\t\\tif(R.n === 'EOF') val = R.f(blob, length, opts);\\n\\t\\t\\telse val = slurp(R, blob, length, opts);\\n\\t\\t\\tvar Rn = R.n;\\n\\t\\t\\t/* BIFF5 overrides */\\n\\t\\t\\tif(opts.biff === 5 || opts.biff === 2) switch(Rn) {\\n\\t\\t\\t\\tcase 'Lbl': Rn = 'Label'; break;\\n\\t\\t\\t}\\n\\t\\t\\t/* nested switch statements to workaround V8 128 limit */\\n\\t\\t\\tswitch(Rn) {\\n\\t\\t\\t\\t/* Workbook Options */\\n\\t\\t\\t\\tcase 'Date1904': wb.opts.Date1904 = val; break;\\n\\t\\t\\t\\tcase 'WriteProtect': wb.opts.WriteProtect = true; break;\\n\\t\\t\\t\\tcase 'FilePass':\\n\\t\\t\\t\\t\\tif(!opts.enc) blob.l = 0;\\n\\t\\t\\t\\t\\topts.enc = val;\\n\\t\\t\\t\\t\\tif(opts.WTF) console.error(val);\\n\\t\\t\\t\\t\\tif(!options.password) throw new Error(\\\"File is password-protected\\\");\\n\\t\\t\\t\\t\\tif(val.Type !== 0) throw new Error(\\\"Encryption scheme unsupported\\\");\\n\\t\\t\\t\\t\\tif(!val.valid) throw new Error(\\\"Password is incorrect\\\");\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase 'WriteAccess': opts.lastuser = val; break;\\n\\t\\t\\t\\tcase 'FileSharing': break; //TODO\\n\\t\\t\\t\\tcase 'CodePage':\\n\\t\\t\\t\\t\\t/* overrides based on test cases */\\n\\t\\t\\t\\t\\tif(val === 0x5212) val = 1200;\\n\\t\\t\\t\\t\\telse if(val === 0x8001) val = 1252;\\n\\t\\t\\t\\t\\topts.codepage = val;\\n\\t\\t\\t\\t\\tset_cp(val);\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase 'RRTabId': opts.rrtabid = val; break;\\n\\t\\t\\t\\tcase 'WinProtect': opts.winlocked = val; break;\\n\\t\\t\\t\\tcase 'Template': break; // TODO\\n\\t\\t\\t\\tcase 'RefreshAll': wb.opts.RefreshAll = val; break;\\n\\t\\t\\t\\tcase 'BookBool': break; // TODO\\n\\t\\t\\t\\tcase 'UsesELFs': /* if(val) console.error(\\\"Unsupported ELFs\\\"); */ break;\\n\\t\\t\\t\\tcase 'MTRSettings': {\\n\\t\\t\\t\\t\\tif(val[0] && val[1]) throw \\\"Unsupported threads: \\\" + val;\\n\\t\\t\\t\\t} break; // TODO: actually support threads\\n\\t\\t\\t\\tcase 'CalcCount': wb.opts.CalcCount = val; break;\\n\\t\\t\\t\\tcase 'CalcDelta': wb.opts.CalcDelta = val; break;\\n\\t\\t\\t\\tcase 'CalcIter': wb.opts.CalcIter = val; break;\\n\\t\\t\\t\\tcase 'CalcMode': wb.opts.CalcMode = val; break;\\n\\t\\t\\t\\tcase 'CalcPrecision': wb.opts.CalcPrecision = val; break;\\n\\t\\t\\t\\tcase 'CalcSaveRecalc': wb.opts.CalcSaveRecalc = val; break;\\n\\t\\t\\t\\tcase 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1\\n\\t\\t\\t\\tcase 'Uncalced': break;\\n\\t\\t\\t\\tcase 'ForceFullCalculation': wb.opts.FullCalc = val; break;\\n\\t\\t\\t\\tcase 'WsBool': break; // TODO\\n\\t\\t\\t\\tcase 'XF': XFs.push(val); break;\\n\\t\\t\\t\\tcase 'ExtSST': break; // TODO\\n\\t\\t\\t\\tcase 'BookExt': break; // TODO\\n\\t\\t\\t\\tcase 'RichTextStream': break;\\n\\t\\t\\t\\tcase 'BkHim': break;\\n\\n\\t\\t\\t\\tcase 'SupBook': supbooks[++sbc] = [val]; sbci = 0; break;\\n\\t\\t\\t\\tcase 'ExternName': supbooks[sbc][++sbci] = val; break;\\n\\t\\t\\t\\tcase 'Index': break; // TODO\\n\\t\\t\\t\\tcase 'Lbl': supbooks[0][++sbcli] = val; break;\\n\\t\\t\\t\\tcase 'ExternSheet': supbooks[sbc] = supbooks[sbc].concat(val); sbci += val.length; break;\\n\\n\\t\\t\\t\\tcase 'Protect': out[\\\"!protect\\\"] = val; break; /* for sheet or book */\\n\\t\\t\\t\\tcase 'Password': if(val !== 0 && opts.WTF) console.error(\\\"Password verifier: \\\" + val); break;\\n\\t\\t\\t\\tcase 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/\\n\\n\\t\\t\\t\\tcase 'BoundSheet8': {\\n\\t\\t\\t\\t\\tDirectory[val.pos] = val;\\n\\t\\t\\t\\t\\topts.snames.push(val.name);\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'EOF': {\\n\\t\\t\\t\\t\\tif(--file_depth) break;\\n\\t\\t\\t\\t\\tif(range.e) {\\n\\t\\t\\t\\t\\t\\tout[\\\"!range\\\"] = range;\\n\\t\\t\\t\\t\\t\\tif(range.e.r > 0 && range.e.c > 0) {\\n\\t\\t\\t\\t\\t\\t\\trange.e.r--; range.e.c--;\\n\\t\\t\\t\\t\\t\\t\\tout[\\\"!ref\\\"] = encode_range(range);\\n\\t\\t\\t\\t\\t\\t\\trange.e.r++; range.e.c++;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tif(mergecells.length > 0) out[\\\"!merges\\\"] = mergecells;\\n\\t\\t\\t\\t\\t\\tif(objects.length > 0) out[\\\"!objects\\\"] = objects;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif(cur_sheet === \\\"\\\") Preamble = out; else Sheets[cur_sheet] = out;\\n\\t\\t\\t\\t\\tout = {};\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'BOF': {\\n\\t\\t\\t\\t\\tif(opts.biff !== 8);\\n\\t\\t\\t\\t\\telse if(val.BIFFVer === 0x0500) opts.biff = 5;\\n\\t\\t\\t\\t\\telse if(val.BIFFVer === 0x0002) opts.biff = 2;\\n\\t\\t\\t\\t\\telse if(val.BIFFVer === 0x0007) opts.biff = 2;\\n\\t\\t\\t\\t\\tif(file_depth++) break;\\n\\t\\t\\t\\t\\tcell_valid = true;\\n\\t\\t\\t\\t\\tout = {};\\n\\t\\t\\t\\t\\tif(opts.biff === 2) {\\n\\t\\t\\t\\t\\t\\tif(cur_sheet === \\\"\\\") cur_sheet = \\\"Sheet1\\\";\\n\\t\\t\\t\\t\\t\\trange = {s:{r:0,c:0},e:{r:0,c:0}};\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\telse cur_sheet = (Directory[s] || {name:\\\"\\\"}).name;\\n\\t\\t\\t\\t\\tmergecells = [];\\n\\t\\t\\t\\t\\tobjects = [];\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'Number': case 'BIFF2NUM': {\\n\\t\\t\\t\\t\\ttemp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:'n'};\\n\\t\\t\\t\\t\\tif(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);\\n\\t\\t\\t\\t\\taddcell({c:val.c, r:val.r}, temp_val, options);\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'BoolErr': {\\n\\t\\t\\t\\t\\ttemp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t};\\n\\t\\t\\t\\t\\tif(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);\\n\\t\\t\\t\\t\\taddcell({c:val.c, r:val.r}, temp_val, options);\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'RK': {\\n\\t\\t\\t\\t\\ttemp_val = {ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'};\\n\\t\\t\\t\\t\\tif(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);\\n\\t\\t\\t\\t\\taddcell({c:val.c, r:val.r}, temp_val, options);\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'MulRk': {\\n\\t\\t\\t\\t\\tfor(var j = val.c; j <= val.C; ++j) {\\n\\t\\t\\t\\t\\t\\tvar ixfe = val.rkrec[j-val.c][0];\\n\\t\\t\\t\\t\\t\\ttemp_val= {ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'};\\n\\t\\t\\t\\t\\t\\tif(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);\\n\\t\\t\\t\\t\\t\\taddcell({c:j, r:val.r}, temp_val, options);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'Formula': {\\n\\t\\t\\t\\t\\tswitch(val.val) {\\n\\t\\t\\t\\t\\t\\tcase 'String': last_formula = val; break;\\n\\t\\t\\t\\t\\t\\tcase 'Array Formula': throw \\\"Array Formula unsupported\\\";\\n\\t\\t\\t\\t\\t\\tdefault:\\n\\t\\t\\t\\t\\t\\t\\ttemp_val = {v:val.val, ixfe:val.cell.ixfe, t:val.tt};\\n\\t\\t\\t\\t\\t\\t\\ttemp_val.XF = XFs[temp_val.ixfe];\\n\\t\\t\\t\\t\\t\\t\\tif(options.cellFormula) temp_val.f = \\\"=\\\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\\n\\t\\t\\t\\t\\t\\t\\tif(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);\\n\\t\\t\\t\\t\\t\\t\\taddcell(val.cell, temp_val, options);\\n\\t\\t\\t\\t\\t\\t\\tlast_formula = val;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'String': {\\n\\t\\t\\t\\t\\tif(last_formula) {\\n\\t\\t\\t\\t\\t\\tlast_formula.val = val;\\n\\t\\t\\t\\t\\t\\ttemp_val = {v:last_formula.val, ixfe:last_formula.cell.ixfe, t:'s'};\\n\\t\\t\\t\\t\\t\\ttemp_val.XF = XFs[temp_val.ixfe];\\n\\t\\t\\t\\t\\t\\tif(options.cellFormula) temp_val.f = \\\"=\\\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\\n\\t\\t\\t\\t\\t\\tif(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);\\n\\t\\t\\t\\t\\t\\taddcell(last_formula.cell, temp_val, options);\\n\\t\\t\\t\\t\\t\\tlast_formula = null;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'Array': {\\n\\t\\t\\t\\t\\tarray_formulae.push(val);\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'ShrFmla': {\\n\\t\\t\\t\\t\\tif(!cell_valid) break;\\n\\t\\t\\t\\t\\t//if(options.cellFormula) out[last_cell].f = stringify_formula(val[0], range, lastcell, supbooks, opts);\\n\\t\\t\\t\\t\\t/* TODO: capture range */\\n\\t\\t\\t\\t\\tshared_formulae[encode_cell(last_formula.cell)]= val[0];\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'LabelSst':\\n\\t\\t\\t\\t\\t//temp_val={v:sst[val.isst].t, ixfe:val.ixfe, t:'s'};\\n\\t\\t\\t\\t\\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\\n\\t\\t\\t\\t\\ttemp_val.XF = XFs[temp_val.ixfe];\\n\\t\\t\\t\\t\\tif(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);\\n\\t\\t\\t\\t\\taddcell({c:val.c, r:val.r}, temp_val, options);\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase 'Label': case 'BIFF2STR':\\n\\t\\t\\t\\t\\t/* Some writers erroneously write Label */\\n\\t\\t\\t\\t\\ttemp_val=make_cell(val.val, val.ixfe, 's');\\n\\t\\t\\t\\t\\ttemp_val.XF = XFs[temp_val.ixfe];\\n\\t\\t\\t\\t\\tif(temp_val.XF) safe_format_xf(temp_val, options, wb.opts.Date1904);\\n\\t\\t\\t\\t\\taddcell({c:val.c, r:val.r}, temp_val, options);\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase 'Dimensions': {\\n\\t\\t\\t\\t\\tif(file_depth === 1) range = val; /* TODO: stack */\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'SST': {\\n\\t\\t\\t\\t\\tsst = val;\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'Format': { /* val = [id, fmt] */\\n\\t\\t\\t\\t\\tSSF.load(val[1], val[0]);\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\tcase 'MergeCells': mergecells = mergecells.concat(val); break;\\n\\n\\t\\t\\t\\tcase 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;\\n\\t\\t\\t\\tcase 'TxO': opts.lastobj.TxO = val; break;\\n\\n\\t\\t\\t\\tcase 'HLink': {\\n\\t\\t\\t\\t\\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\\n\\t\\t\\t\\t\\t\\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC)\\n\\t\\t\\t\\t\\t\\t\\tif(out[encode_cell({c:rngC,r:rngR})])\\n\\t\\t\\t\\t\\t\\t\\t\\tout[encode_cell({c:rngC,r:rngR})].l = val[1];\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'HLinkTooltip': {\\n\\t\\t\\t\\t\\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\\n\\t\\t\\t\\t\\t\\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC)\\n\\t\\t\\t\\t\\t\\t\\tif(out[encode_cell({c:rngC,r:rngR})])\\n\\t\\t\\t\\t\\t\\t\\t\\tout[encode_cell({c:rngC,r:rngR})].l.tooltip = val[1];\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* Comments */\\n\\t\\t\\t\\tcase 'Note': {\\n\\t\\t\\t\\t\\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\\n\\t\\t\\t\\t\\tcc = out[encode_cell(val[0])];\\n\\t\\t\\t\\t\\tvar noteobj = objects[val[2]];\\n\\t\\t\\t\\t\\tif(!cc) break;\\n\\t\\t\\t\\t\\tif(!cc.c) cc.c = [];\\n\\t\\t\\t\\t\\tcmnt = {a:val[1],t:noteobj.TxO.t};\\n\\t\\t\\t\\t\\tcc.c.push(cmnt);\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\tdefault: switch(R.n) { /* nested */\\n\\t\\t\\t\\tcase 'ClrtClient': break;\\n\\t\\t\\t\\tcase 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;\\n\\n\\t\\t\\t\\tcase 'NameCmt': break;\\n\\t\\t\\t\\tcase 'Header': break; // TODO\\n\\t\\t\\t\\tcase 'Footer': break; // TODO\\n\\t\\t\\t\\tcase 'HCenter': break; // TODO\\n\\t\\t\\t\\tcase 'VCenter': break; // TODO\\n\\t\\t\\t\\tcase 'Pls': break; // TODO\\n\\t\\t\\t\\tcase 'Setup': break; // TODO\\n\\t\\t\\t\\tcase 'DefColWidth': break; // TODO\\n\\t\\t\\t\\tcase 'GCW': break;\\n\\t\\t\\t\\tcase 'LHRecord': break;\\n\\t\\t\\t\\tcase 'ColInfo': break; // TODO\\n\\t\\t\\t\\tcase 'Row': break; // TODO\\n\\t\\t\\t\\tcase 'DBCell': break; // TODO\\n\\t\\t\\t\\tcase 'MulBlank': break; // TODO\\n\\t\\t\\t\\tcase 'EntExU2': break; // TODO\\n\\t\\t\\t\\tcase 'SxView': break; // TODO\\n\\t\\t\\t\\tcase 'Sxvd': break; // TODO\\n\\t\\t\\t\\tcase 'SXVI': break; // TODO\\n\\t\\t\\t\\tcase 'SXVDEx': break; // TODO\\n\\t\\t\\t\\tcase 'SxIvd': break; // TODO\\n\\t\\t\\t\\tcase 'SXDI': break; // TODO\\n\\t\\t\\t\\tcase 'SXLI': break; // TODO\\n\\t\\t\\t\\tcase 'SXEx': break; // TODO\\n\\t\\t\\t\\tcase 'QsiSXTag': break; // TODO\\n\\t\\t\\t\\tcase 'Selection': break;\\n\\t\\t\\t\\tcase 'Feat': break;\\n\\t\\t\\t\\tcase 'FeatHdr': case 'FeatHdr11': break;\\n\\t\\t\\t\\tcase 'Feature11': case 'Feature12': case 'List12': break;\\n\\t\\t\\t\\tcase 'Blank': break;\\n\\t\\t\\t\\tcase 'Country': country = val; break;\\n\\t\\t\\t\\tcase 'RecalcId': break;\\n\\t\\t\\t\\tcase 'DefaultRowHeight': case 'DxGCol': break; // TODO: htmlify\\n\\t\\t\\t\\tcase 'Fbi': case 'Fbi2': case 'GelFrame': break;\\n\\t\\t\\t\\tcase 'Font': break; // TODO\\n\\t\\t\\t\\tcase 'XFCRC': break; // TODO\\n\\t\\t\\t\\tcase 'Style': break; // TODO\\n\\t\\t\\t\\tcase 'StyleExt': break; // TODO\\n\\t\\t\\t\\tcase 'Palette': palette = val; break; // TODO\\n\\t\\t\\t\\tcase 'Theme': break; // TODO\\n\\t\\t\\t\\t/* Protection */\\n\\t\\t\\t\\tcase 'ScenarioProtect': break;\\n\\t\\t\\t\\tcase 'ObjProtect': break;\\n\\n\\t\\t\\t\\t/* Conditional Formatting */\\n\\t\\t\\t\\tcase 'CondFmt12': break;\\n\\n\\t\\t\\t\\t/* Table */\\n\\t\\t\\t\\tcase 'Table': break; // TODO\\n\\t\\t\\t\\tcase 'TableStyles': break; // TODO\\n\\t\\t\\t\\tcase 'TableStyle': break; // TODO\\n\\t\\t\\t\\tcase 'TableStyleElement': break; // TODO\\n\\n\\t\\t\\t\\t/* PivotTable */\\n\\t\\t\\t\\tcase 'SXStreamID': break; // TODO\\n\\t\\t\\t\\tcase 'SXVS': break; // TODO\\n\\t\\t\\t\\tcase 'DConRef': break; // TODO\\n\\t\\t\\t\\tcase 'SXAddl': break; // TODO\\n\\t\\t\\t\\tcase 'DConBin': break; // TODO\\n\\t\\t\\t\\tcase 'DConName': break; // TODO\\n\\t\\t\\t\\tcase 'SXPI': break; // TODO\\n\\t\\t\\t\\tcase 'SxFormat': break; // TODO\\n\\t\\t\\t\\tcase 'SxSelect': break; // TODO\\n\\t\\t\\t\\tcase 'SxRule': break; // TODO\\n\\t\\t\\t\\tcase 'SxFilt': break; // TODO\\n\\t\\t\\t\\tcase 'SxItm': break; // TODO\\n\\t\\t\\t\\tcase 'SxDXF': break; // TODO\\n\\n\\t\\t\\t\\t/* Scenario Manager */\\n\\t\\t\\t\\tcase 'ScenMan': break;\\n\\n\\t\\t\\t\\t/* Data Consolidation */\\n\\t\\t\\t\\tcase 'DCon': break;\\n\\n\\t\\t\\t\\t/* Watched Cell */\\n\\t\\t\\t\\tcase 'CellWatch': break;\\n\\n\\t\\t\\t\\t/* Print Settings */\\n\\t\\t\\t\\tcase 'PrintRowCol': break;\\n\\t\\t\\t\\tcase 'PrintGrid': break;\\n\\t\\t\\t\\tcase 'PrintSize': break;\\n\\n\\t\\t\\t\\tcase 'XCT': break;\\n\\t\\t\\t\\tcase 'CRN': break;\\n\\n\\t\\t\\t\\tcase 'Scl': {\\n\\t\\t\\t\\t\\t//console.log(\\\"Zoom Level:\\\", val[0]/val[1],val);\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'SheetExt': {\\n\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'SheetExtOptional': {\\n\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\t/* VBA */\\n\\t\\t\\t\\tcase 'ObNoMacros': {\\n\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'ObProj': {\\n\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'CodeName': {\\n\\n\\t\\t\\t\\t} break;\\n\\t\\t\\t\\tcase 'GUIDTypeLib': {\\n\\n\\t\\t\\t\\t} break;\\n\\n\\t\\t\\t\\tcase 'WOpt': break; // TODO: WTF?\\n\\t\\t\\t\\tcase 'PhoneticInfo': break;\\n\\n\\t\\t\\t\\tcase 'OleObjectSize': break;\\n\\n\\t\\t\\t\\t/* Differential Formatting */\\n\\t\\t\\t\\tcase 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;\\n\\n\\t\\t\\t\\t/* Data Validation */\\n\\t\\t\\t\\tcase 'Dv': case 'DVal': break;\\n\\n\\t\\t\\t\\t/* Data Series */\\n\\t\\t\\t\\tcase 'BRAI': case 'Series': case 'SeriesText': break;\\n\\n\\t\\t\\t\\t/* Data Connection */\\n\\t\\t\\t\\tcase 'DConn': break;\\n\\t\\t\\t\\tcase 'DbOrParamQry': break;\\n\\t\\t\\t\\tcase 'DBQueryExt': break;\\n\\n\\t\\t\\t\\t/* Formatting */\\n\\t\\t\\t\\tcase 'IFmtRecord': break;\\n\\t\\t\\t\\tcase 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;\\n\\n\\t\\t\\t\\t/* Explicitly Ignored */\\n\\t\\t\\t\\tcase 'Excel9File': break;\\n\\t\\t\\t\\tcase 'Units': break;\\n\\t\\t\\t\\tcase 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': case 'BuiltInFnGroupCount':\\n\\t\\t\\t\\t/* View Stuff */\\n\\t\\t\\t\\tcase 'Window1': case 'Window2': case 'HideObj': case 'GridSet': case 'Guts':\\n\\t\\t\\t\\tcase 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd':\\n\\t\\t\\t\\tcase 'Pane': break;\\n\\t\\t\\t\\tdefault: switch(R.n) { /* nested */\\n\\t\\t\\t\\t/* Chart */\\n\\t\\t\\t\\tcase 'Dat':\\n\\t\\t\\t\\tcase 'Begin': case 'End':\\n\\t\\t\\t\\tcase 'StartBlock': case 'EndBlock':\\n\\t\\t\\t\\tcase 'Frame': case 'Area':\\n\\t\\t\\t\\tcase 'Axis': case 'AxisLine': case 'Tick': break;\\n\\t\\t\\t\\tcase 'AxesUsed':\\n\\t\\t\\t\\tcase 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;\\n\\t\\t\\t\\tcase 'LineFormat': case 'AreaFormat':\\n\\t\\t\\t\\tcase 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;\\n\\t\\t\\t\\tcase 'PlotArea': case 'PlotGrowth': break;\\n\\t\\t\\t\\tcase 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;\\n\\t\\t\\t\\tcase 'DataFormat': case 'SerToCrt': case 'FontX': break;\\n\\t\\t\\t\\tcase 'CatSerRange': case 'AxcExt': case 'SerFmt': break;\\n\\t\\t\\t\\tcase 'ShtProps': break;\\n\\t\\t\\t\\tcase 'DefaultText': case 'Text': case 'CatLab': break;\\n\\t\\t\\t\\tcase 'DataLabExtContents': break;\\n\\t\\t\\t\\tcase 'Legend': case 'LegendException': break;\\n\\t\\t\\t\\tcase 'Pie': case 'Scatter': break;\\n\\t\\t\\t\\tcase 'PieFormat': case 'MarkerFormat': break;\\n\\t\\t\\t\\tcase 'StartObject': case 'EndObject': break;\\n\\t\\t\\t\\tcase 'AlRuns': case 'ObjectLink': break;\\n\\t\\t\\t\\tcase 'SIIndex': break;\\n\\t\\t\\t\\tcase 'AttachedLabel': case 'YMult': break;\\n\\n\\t\\t\\t\\t/* Chart Group */\\n\\t\\t\\t\\tcase 'Line': case 'Bar': break;\\n\\t\\t\\t\\tcase 'Surf': break;\\n\\n\\t\\t\\t\\t/* Axis Group */\\n\\t\\t\\t\\tcase 'AxisParent': break;\\n\\t\\t\\t\\tcase 'Pos': break;\\n\\t\\t\\t\\tcase 'ValueRange': break;\\n\\n\\t\\t\\t\\t/* Pivot Chart */\\n\\t\\t\\t\\tcase 'SXViewEx9': break; // TODO\\n\\t\\t\\t\\tcase 'SXViewLink': break;\\n\\t\\t\\t\\tcase 'PivotChartBits': break;\\n\\t\\t\\t\\tcase 'SBaseRef': break;\\n\\t\\t\\t\\tcase 'TextPropsStream': break;\\n\\n\\t\\t\\t\\t/* Chart Misc */\\n\\t\\t\\t\\tcase 'LnExt': break;\\n\\t\\t\\t\\tcase 'MkrExt': break;\\n\\t\\t\\t\\tcase 'CrtCoopt': break;\\n\\n\\t\\t\\t\\t/* Query Table */\\n\\t\\t\\t\\tcase 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;\\n\\t\\t\\t\\tcase 'TxtQry': break;\\n\\n\\t\\t\\t\\t/* Filter */\\n\\t\\t\\t\\tcase 'FilterMode': break;\\n\\t\\t\\t\\tcase 'AutoFilter': case 'AutoFilterInfo': break;\\n\\t\\t\\t\\tcase 'AutoFilter12': break;\\n\\t\\t\\t\\tcase 'DropDownObjIds': break;\\n\\t\\t\\t\\tcase 'Sort': break;\\n\\t\\t\\t\\tcase 'SortData': break;\\n\\n\\t\\t\\t\\t/* Drawing */\\n\\t\\t\\t\\tcase 'ShapePropsStream': break;\\n\\t\\t\\t\\tcase 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;\\n\\t\\t\\t\\tcase 'ImData': break;\\n\\t\\t\\t\\t/* Pub Stuff */\\n\\t\\t\\t\\tcase 'WebPub': case 'AutoWebPub':\\n\\n\\t\\t\\t\\t/* Print Stuff */\\n\\t\\t\\t\\tcase 'RightMargin': case 'LeftMargin': case 'TopMargin': case 'BottomMargin':\\n\\t\\t\\t\\tcase 'HeaderFooter': case 'HFPicture': case 'PLV':\\n\\t\\t\\t\\tcase 'HorizontalPageBreaks': case 'VerticalPageBreaks':\\n\\t\\t\\t\\t/* Behavioral */\\n\\t\\t\\t\\tcase 'Backup': case 'CompressPictures': case 'Compat12': break;\\n\\n\\t\\t\\t\\t/* Should not Happen */\\n\\t\\t\\t\\tcase 'Continue': case 'ContinueFrt12': break;\\n\\n\\t\\t\\t\\t/* Future Records */\\n\\t\\t\\t\\tcase 'FrtFontList': case 'FrtWrapper': break;\\n\\n\\t\\t\\t\\t/* BIFF5 records */\\n\\t\\t\\t\\tcase 'ExternCount': break;\\n\\t\\t\\t\\tcase 'RString': break;\\n\\t\\t\\t\\tcase 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;\\n\\n\\t\\t\\t\\tdefault: switch(R.n) { /* nested */\\n\\t\\t\\t\\t/* Miscellaneous */\\n\\t\\t\\t\\tcase 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':\\n\\t\\t\\t\\tcase 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':\\n\\t\\t\\t\\tcase 'Name': break;\\n\\t\\t\\t\\tdefault: if(options.WTF) throw 'Unrecognized Record ' + R.n;\\n\\t\\t\\t}}}}\\n\\t\\t} else blob.l += length;\\n\\t}\\n\\tvar sheetnamesraw = opts.biff === 2 ? ['Sheet1'] : Object.keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\\n\\tvar sheetnames = sheetnamesraw.slice();\\n\\twb.Directory=sheetnamesraw;\\n\\twb.SheetNames=sheetnamesraw;\\n\\tif(!options.bookSheets) wb.Sheets=Sheets;\\n\\twb.Preamble=Preamble;\\n\\twb.Strings = sst;\\n\\twb.SSF = SSF.get_table();\\n\\tif(opts.enc) wb.Encryption = opts.enc;\\n\\twb.Metadata = {};\\n\\tif(country !== undefined) wb.Metadata.Country = country;\\n\\treturn wb;\\n}\\n\\nfunction parse_xlscfb(cfb, options) {\\nif(!options) options = {};\\nfix_read_opts(options);\\nreset_cp();\\nvar CompObj, Summary, Workbook;\\nif(cfb.find) {\\n\\tCompObj = cfb.find('!CompObj');\\n\\tSummary = cfb.find('!SummaryInformation');\\n\\tWorkbook = cfb.find('/Workbook');\\n} else {\\n\\tprep_blob(cfb, 0);\\n\\tWorkbook = {content: cfb};\\n}\\n\\nif(!Workbook) Workbook = cfb.find('/Book');\\nvar CompObjP, SummaryP, WorkbookP;\\n\\nif(CompObj) CompObjP = parse_compobj(CompObj);\\nif(options.bookProps && !options.bookSheets) WorkbookP = {};\\nelse {\\n\\tif(Workbook) WorkbookP = parse_workbook(Workbook.content, options, !!Workbook.find);\\n\\telse throw new Error(\\\"Cannot find Workbook stream\\\");\\n}\\n\\nif(cfb.find) parse_props(cfb);\\n\\nvar props = {};\\nfor(var y in cfb.Summary) props[y] = cfb.Summary[y];\\nfor(y in cfb.DocSummary) props[y] = cfb.DocSummary[y];\\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\\nif(options.bookFiles) WorkbookP.cfb = cfb;\\nWorkbookP.CompObjP = CompObjP;\\nreturn WorkbookP;\\n}\\n\\n/* TODO: WTF */\\nfunction parse_props(cfb) {\\n\\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\\n\\tvar DSI = cfb.find('!DocumentSummaryInformation');\\n\\tif(DSI) try { cfb.DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI); } catch(e) {}\\n\\n\\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\\n\\tvar SI = cfb.find('!SummaryInformation');\\n\\tif(SI) try { cfb.Summary = parse_PropertySetStream(SI, SummaryPIDSI); } catch(e) {}\\n}\\n\\n/* [MS-XLSB] 2.3 Record Enumeration */\\nvar XLSBRecordEnum = {\\n\\t0x0000: { n:\\\"BrtRowHdr\\\", f:parse_BrtRowHdr },\\n\\t0x0001: { n:\\\"BrtCellBlank\\\", f:parse_BrtCellBlank },\\n\\t0x0002: { n:\\\"BrtCellRk\\\", f:parse_BrtCellRk },\\n\\t0x0003: { n:\\\"BrtCellError\\\", f:parse_BrtCellError },\\n\\t0x0004: { n:\\\"BrtCellBool\\\", f:parse_BrtCellBool },\\n\\t0x0005: { n:\\\"BrtCellReal\\\", f:parse_BrtCellReal },\\n\\t0x0006: { n:\\\"BrtCellSt\\\", f:parse_BrtCellSt },\\n\\t0x0007: { n:\\\"BrtCellIsst\\\", f:parse_BrtCellIsst },\\n\\t0x0008: { n:\\\"BrtFmlaString\\\", f:parse_BrtFmlaString },\\n\\t0x0009: { n:\\\"BrtFmlaNum\\\", f:parse_BrtFmlaNum },\\n\\t0x000A: { n:\\\"BrtFmlaBool\\\", f:parse_BrtFmlaBool },\\n\\t0x000B: { n:\\\"BrtFmlaError\\\", f:parse_BrtFmlaError },\\n\\t0x0010: { n:\\\"BrtFRTArchID$\\\", f:parse_BrtFRTArchID$ },\\n\\t0x0013: { n:\\\"BrtSSTItem\\\", f:parse_RichStr },\\n\\t0x0014: { n:\\\"BrtPCDIMissing\\\", f:parsenoop },\\n\\t0x0015: { n:\\\"BrtPCDINumber\\\", f:parsenoop },\\n\\t0x0016: { n:\\\"BrtPCDIBoolean\\\", f:parsenoop },\\n\\t0x0017: { n:\\\"BrtPCDIError\\\", f:parsenoop },\\n\\t0x0018: { n:\\\"BrtPCDIString\\\", f:parsenoop },\\n\\t0x0019: { n:\\\"BrtPCDIDatetime\\\", f:parsenoop },\\n\\t0x001A: { n:\\\"BrtPCDIIndex\\\", f:parsenoop },\\n\\t0x001B: { n:\\\"BrtPCDIAMissing\\\", f:parsenoop },\\n\\t0x001C: { n:\\\"BrtPCDIANumber\\\", f:parsenoop },\\n\\t0x001D: { n:\\\"BrtPCDIABoolean\\\", f:parsenoop },\\n\\t0x001E: { n:\\\"BrtPCDIAError\\\", f:parsenoop },\\n\\t0x001F: { n:\\\"BrtPCDIAString\\\", f:parsenoop },\\n\\t0x0020: { n:\\\"BrtPCDIADatetime\\\", f:parsenoop },\\n\\t0x0021: { n:\\\"BrtPCRRecord\\\", f:parsenoop },\\n\\t0x0022: { n:\\\"BrtPCRRecordDt\\\", f:parsenoop },\\n\\t0x0023: { n:\\\"BrtFRTBegin\\\", f:parsenoop },\\n\\t0x0024: { n:\\\"BrtFRTEnd\\\", f:parsenoop },\\n\\t0x0025: { n:\\\"BrtACBegin\\\", f:parsenoop },\\n\\t0x0026: { n:\\\"BrtACEnd\\\", f:parsenoop },\\n\\t0x0027: { n:\\\"BrtName\\\", f:parsenoop },\\n\\t0x0028: { n:\\\"BrtIndexRowBlock\\\", f:parsenoop },\\n\\t0x002A: { n:\\\"BrtIndexBlock\\\", f:parsenoop },\\n\\t0x002B: { n:\\\"BrtFont\\\", f:parse_BrtFont },\\n\\t0x002C: { n:\\\"BrtFmt\\\", f:parse_BrtFmt },\\n\\t0x002D: { n:\\\"BrtFill\\\", f:parsenoop },\\n\\t0x002E: { n:\\\"BrtBorder\\\", f:parsenoop },\\n\\t0x002F: { n:\\\"BrtXF\\\", f:parse_BrtXF },\\n\\t0x0030: { n:\\\"BrtStyle\\\", f:parsenoop },\\n\\t0x0031: { n:\\\"BrtCellMeta\\\", f:parsenoop },\\n\\t0x0032: { n:\\\"BrtValueMeta\\\", f:parsenoop },\\n\\t0x0033: { n:\\\"BrtMdb\\\", f:parsenoop },\\n\\t0x0034: { n:\\\"BrtBeginFmd\\\", f:parsenoop },\\n\\t0x0035: { n:\\\"BrtEndFmd\\\", f:parsenoop },\\n\\t0x0036: { n:\\\"BrtBeginMdx\\\", f:parsenoop },\\n\\t0x0037: { n:\\\"BrtEndMdx\\\", f:parsenoop },\\n\\t0x0038: { n:\\\"BrtBeginMdxTuple\\\", f:parsenoop },\\n\\t0x0039: { n:\\\"BrtEndMdxTuple\\\", f:parsenoop },\\n\\t0x003A: { n:\\\"BrtMdxMbrIstr\\\", f:parsenoop },\\n\\t0x003B: { n:\\\"BrtStr\\\", f:parsenoop },\\n\\t0x003C: { n:\\\"BrtColInfo\\\", f:parsenoop },\\n\\t0x003E: { n:\\\"BrtCellRString\\\", f:parsenoop },\\n\\t0x003F: { n:\\\"BrtCalcChainItem$\\\", f:parse_BrtCalcChainItem$ },\\n\\t0x0040: { n:\\\"BrtDVal\\\", f:parsenoop },\\n\\t0x0041: { n:\\\"BrtSxvcellNum\\\", f:parsenoop },\\n\\t0x0042: { n:\\\"BrtSxvcellStr\\\", f:parsenoop },\\n\\t0x0043: { n:\\\"BrtSxvcellBool\\\", f:parsenoop },\\n\\t0x0044: { n:\\\"BrtSxvcellErr\\\", f:parsenoop },\\n\\t0x0045: { n:\\\"BrtSxvcellDate\\\", f:parsenoop },\\n\\t0x0046: { n:\\\"BrtSxvcellNil\\\", f:parsenoop },\\n\\t0x0080: { n:\\\"BrtFileVersion\\\", f:parsenoop },\\n\\t0x0081: { n:\\\"BrtBeginSheet\\\", f:parsenoop },\\n\\t0x0082: { n:\\\"BrtEndSheet\\\", f:parsenoop },\\n\\t0x0083: { n:\\\"BrtBeginBook\\\", f:parsenoop, p:0 },\\n\\t0x0084: { n:\\\"BrtEndBook\\\", f:parsenoop },\\n\\t0x0085: { n:\\\"BrtBeginWsViews\\\", f:parsenoop },\\n\\t0x0086: { n:\\\"BrtEndWsViews\\\", f:parsenoop },\\n\\t0x0087: { n:\\\"BrtBeginBookViews\\\", f:parsenoop },\\n\\t0x0088: { n:\\\"BrtEndBookViews\\\", f:parsenoop },\\n\\t0x0089: { n:\\\"BrtBeginWsView\\\", f:parsenoop },\\n\\t0x008A: { n:\\\"BrtEndWsView\\\", f:parsenoop },\\n\\t0x008B: { n:\\\"BrtBeginCsViews\\\", f:parsenoop },\\n\\t0x008C: { n:\\\"BrtEndCsViews\\\", f:parsenoop },\\n\\t0x008D: { n:\\\"BrtBeginCsView\\\", f:parsenoop },\\n\\t0x008E: { n:\\\"BrtEndCsView\\\", f:parsenoop },\\n\\t0x008F: { n:\\\"BrtBeginBundleShs\\\", f:parsenoop },\\n\\t0x0090: { n:\\\"BrtEndBundleShs\\\", f:parsenoop },\\n\\t0x0091: { n:\\\"BrtBeginSheetData\\\", f:parsenoop },\\n\\t0x0092: { n:\\\"BrtEndSheetData\\\", f:parsenoop },\\n\\t0x0093: { n:\\\"BrtWsProp\\\", f:parse_BrtWsProp },\\n\\t0x0094: { n:\\\"BrtWsDim\\\", f:parse_BrtWsDim, p:16 },\\n\\t0x0097: { n:\\\"BrtPane\\\", f:parsenoop },\\n\\t0x0098: { n:\\\"BrtSel\\\", f:parsenoop },\\n\\t0x0099: { n:\\\"BrtWbProp\\\", f:parse_BrtWbProp },\\n\\t0x009A: { n:\\\"BrtWbFactoid\\\", f:parsenoop },\\n\\t0x009B: { n:\\\"BrtFileRecover\\\", f:parsenoop },\\n\\t0x009C: { n:\\\"BrtBundleSh\\\", f:parse_BrtBundleSh },\\n\\t0x009D: { n:\\\"BrtCalcProp\\\", f:parsenoop },\\n\\t0x009E: { n:\\\"BrtBookView\\\", f:parsenoop },\\n\\t0x009F: { n:\\\"BrtBeginSst\\\", f:parse_BrtBeginSst },\\n\\t0x00A0: { n:\\\"BrtEndSst\\\", f:parsenoop },\\n\\t0x00A1: { n:\\\"BrtBeginAFilter\\\", f:parsenoop },\\n\\t0x00A2: { n:\\\"BrtEndAFilter\\\", f:parsenoop },\\n\\t0x00A3: { n:\\\"BrtBeginFilterColumn\\\", f:parsenoop },\\n\\t0x00A4: { n:\\\"BrtEndFilterColumn\\\", f:parsenoop },\\n\\t0x00A5: { n:\\\"BrtBeginFilters\\\", f:parsenoop },\\n\\t0x00A6: { n:\\\"BrtEndFilters\\\", f:parsenoop },\\n\\t0x00A7: { n:\\\"BrtFilter\\\", f:parsenoop },\\n\\t0x00A8: { n:\\\"BrtColorFilter\\\", f:parsenoop },\\n\\t0x00A9: { n:\\\"BrtIconFilter\\\", f:parsenoop },\\n\\t0x00AA: { n:\\\"BrtTop10Filter\\\", f:parsenoop },\\n\\t0x00AB: { n:\\\"BrtDynamicFilter\\\", f:parsenoop },\\n\\t0x00AC: { n:\\\"BrtBeginCustomFilters\\\", f:parsenoop },\\n\\t0x00AD: { n:\\\"BrtEndCustomFilters\\\", f:parsenoop },\\n\\t0x00AE: { n:\\\"BrtCustomFilter\\\", f:parsenoop },\\n\\t0x00AF: { n:\\\"BrtAFilterDateGroupItem\\\", f:parsenoop },\\n\\t0x00B0: { n:\\\"BrtMergeCell\\\", f:parse_BrtMergeCell },\\n\\t0x00B1: { n:\\\"BrtBeginMergeCells\\\", f:parsenoop },\\n\\t0x00B2: { n:\\\"BrtEndMergeCells\\\", f:parsenoop },\\n\\t0x00B3: { n:\\\"BrtBeginPivotCacheDef\\\", f:parsenoop },\\n\\t0x00B4: { n:\\\"BrtEndPivotCacheDef\\\", f:parsenoop },\\n\\t0x00B5: { n:\\\"BrtBeginPCDFields\\\", f:parsenoop },\\n\\t0x00B6: { n:\\\"BrtEndPCDFields\\\", f:parsenoop },\\n\\t0x00B7: { n:\\\"BrtBeginPCDField\\\", f:parsenoop },\\n\\t0x00B8: { n:\\\"BrtEndPCDField\\\", f:parsenoop },\\n\\t0x00B9: { n:\\\"BrtBeginPCDSource\\\", f:parsenoop },\\n\\t0x00BA: { n:\\\"BrtEndPCDSource\\\", f:parsenoop },\\n\\t0x00BB: { n:\\\"BrtBeginPCDSRange\\\", f:parsenoop },\\n\\t0x00BC: { n:\\\"BrtEndPCDSRange\\\", f:parsenoop },\\n\\t0x00BD: { n:\\\"BrtBeginPCDFAtbl\\\", f:parsenoop },\\n\\t0x00BE: { n:\\\"BrtEndPCDFAtbl\\\", f:parsenoop },\\n\\t0x00BF: { n:\\\"BrtBeginPCDIRun\\\", f:parsenoop },\\n\\t0x00C0: { n:\\\"BrtEndPCDIRun\\\", f:parsenoop },\\n\\t0x00C1: { n:\\\"BrtBeginPivotCacheRecords\\\", f:parsenoop },\\n\\t0x00C2: { n:\\\"BrtEndPivotCacheRecords\\\", f:parsenoop },\\n\\t0x00C3: { n:\\\"BrtBeginPCDHierarchies\\\", f:parsenoop },\\n\\t0x00C4: { n:\\\"BrtEndPCDHierarchies\\\", f:parsenoop },\\n\\t0x00C5: { n:\\\"BrtBeginPCDHierarchy\\\", f:parsenoop },\\n\\t0x00C6: { n:\\\"BrtEndPCDHierarchy\\\", f:parsenoop },\\n\\t0x00C7: { n:\\\"BrtBeginPCDHFieldsUsage\\\", f:parsenoop },\\n\\t0x00C8: { n:\\\"BrtEndPCDHFieldsUsage\\\", f:parsenoop },\\n\\t0x00C9: { n:\\\"BrtBeginExtConnection\\\", f:parsenoop },\\n\\t0x00CA: { n:\\\"BrtEndExtConnection\\\", f:parsenoop },\\n\\t0x00CB: { n:\\\"BrtBeginECDbProps\\\", f:parsenoop },\\n\\t0x00CC: { n:\\\"BrtEndECDbProps\\\", f:parsenoop },\\n\\t0x00CD: { n:\\\"BrtBeginECOlapProps\\\", f:parsenoop },\\n\\t0x00CE: { n:\\\"BrtEndECOlapProps\\\", f:parsenoop },\\n\\t0x00CF: { n:\\\"BrtBeginPCDSConsol\\\", f:parsenoop },\\n\\t0x00D0: { n:\\\"BrtEndPCDSConsol\\\", f:parsenoop },\\n\\t0x00D1: { n:\\\"BrtBeginPCDSCPages\\\", f:parsenoop },\\n\\t0x00D2: { n:\\\"BrtEndPCDSCPages\\\", f:parsenoop },\\n\\t0x00D3: { n:\\\"BrtBeginPCDSCPage\\\", f:parsenoop },\\n\\t0x00D4: { n:\\\"BrtEndPCDSCPage\\\", f:parsenoop },\\n\\t0x00D5: { n:\\\"BrtBeginPCDSCPItem\\\", f:parsenoop },\\n\\t0x00D6: { n:\\\"BrtEndPCDSCPItem\\\", f:parsenoop },\\n\\t0x00D7: { n:\\\"BrtBeginPCDSCSets\\\", f:parsenoop },\\n\\t0x00D8: { n:\\\"BrtEndPCDSCSets\\\", f:parsenoop },\\n\\t0x00D9: { n:\\\"BrtBeginPCDSCSet\\\", f:parsenoop },\\n\\t0x00DA: { n:\\\"BrtEndPCDSCSet\\\", f:parsenoop },\\n\\t0x00DB: { n:\\\"BrtBeginPCDFGroup\\\", f:parsenoop },\\n\\t0x00DC: { n:\\\"BrtEndPCDFGroup\\\", f:parsenoop },\\n\\t0x00DD: { n:\\\"BrtBeginPCDFGItems\\\", f:parsenoop },\\n\\t0x00DE: { n:\\\"BrtEndPCDFGItems\\\", f:parsenoop },\\n\\t0x00DF: { n:\\\"BrtBeginPCDFGRange\\\", f:parsenoop },\\n\\t0x00E0: { n:\\\"BrtEndPCDFGRange\\\", f:parsenoop },\\n\\t0x00E1: { n:\\\"BrtBeginPCDFGDiscrete\\\", f:parsenoop },\\n\\t0x00E2: { n:\\\"BrtEndPCDFGDiscrete\\\", f:parsenoop },\\n\\t0x00E3: { n:\\\"BrtBeginPCDSDTupleCache\\\", f:parsenoop },\\n\\t0x00E4: { n:\\\"BrtEndPCDSDTupleCache\\\", f:parsenoop },\\n\\t0x00E5: { n:\\\"BrtBeginPCDSDTCEntries\\\", f:parsenoop },\\n\\t0x00E6: { n:\\\"BrtEndPCDSDTCEntries\\\", f:parsenoop },\\n\\t0x00E7: { n:\\\"BrtBeginPCDSDTCEMembers\\\", f:parsenoop },\\n\\t0x00E8: { n:\\\"BrtEndPCDSDTCEMembers\\\", f:parsenoop },\\n\\t0x00E9: { n:\\\"BrtBeginPCDSDTCEMember\\\", f:parsenoop },\\n\\t0x00EA: { n:\\\"BrtEndPCDSDTCEMember\\\", f:parsenoop },\\n\\t0x00EB: { n:\\\"BrtBeginPCDSDTCQueries\\\", f:parsenoop },\\n\\t0x00EC: { n:\\\"BrtEndPCDSDTCQueries\\\", f:parsenoop },\\n\\t0x00ED: { n:\\\"BrtBeginPCDSDTCQuery\\\", f:parsenoop },\\n\\t0x00EE: { n:\\\"BrtEndPCDSDTCQuery\\\", f:parsenoop },\\n\\t0x00EF: { n:\\\"BrtBeginPCDSDTCSets\\\", f:parsenoop },\\n\\t0x00F0: { n:\\\"BrtEndPCDSDTCSets\\\", f:parsenoop },\\n\\t0x00F1: { n:\\\"BrtBeginPCDSDTCSet\\\", f:parsenoop },\\n\\t0x00F2: { n:\\\"BrtEndPCDSDTCSet\\\", f:parsenoop },\\n\\t0x00F3: { n:\\\"BrtBeginPCDCalcItems\\\", f:parsenoop },\\n\\t0x00F4: { n:\\\"BrtEndPCDCalcItems\\\", f:parsenoop },\\n\\t0x00F5: { n:\\\"BrtBeginPCDCalcItem\\\", f:parsenoop },\\n\\t0x00F6: { n:\\\"BrtEndPCDCalcItem\\\", f:parsenoop },\\n\\t0x00F7: { n:\\\"BrtBeginPRule\\\", f:parsenoop },\\n\\t0x00F8: { n:\\\"BrtEndPRule\\\", f:parsenoop },\\n\\t0x00F9: { n:\\\"BrtBeginPRFilters\\\", f:parsenoop },\\n\\t0x00FA: { n:\\\"BrtEndPRFilters\\\", f:parsenoop },\\n\\t0x00FB: { n:\\\"BrtBeginPRFilter\\\", f:parsenoop },\\n\\t0x00FC: { n:\\\"BrtEndPRFilter\\\", f:parsenoop },\\n\\t0x00FD: { n:\\\"BrtBeginPNames\\\", f:parsenoop },\\n\\t0x00FE: { n:\\\"BrtEndPNames\\\", f:parsenoop },\\n\\t0x00FF: { n:\\\"BrtBeginPName\\\", f:parsenoop },\\n\\t0x0100: { n:\\\"BrtEndPName\\\", f:parsenoop },\\n\\t0x0101: { n:\\\"BrtBeginPNPairs\\\", f:parsenoop },\\n\\t0x0102: { n:\\\"BrtEndPNPairs\\\", f:parsenoop },\\n\\t0x0103: { n:\\\"BrtBeginPNPair\\\", f:parsenoop },\\n\\t0x0104: { n:\\\"BrtEndPNPair\\\", f:parsenoop },\\n\\t0x0105: { n:\\\"BrtBeginECWebProps\\\", f:parsenoop },\\n\\t0x0106: { n:\\\"BrtEndECWebProps\\\", f:parsenoop },\\n\\t0x0107: { n:\\\"BrtBeginEcWpTables\\\", f:parsenoop },\\n\\t0x0108: { n:\\\"BrtEndECWPTables\\\", f:parsenoop },\\n\\t0x0109: { n:\\\"BrtBeginECParams\\\", f:parsenoop },\\n\\t0x010A: { n:\\\"BrtEndECParams\\\", f:parsenoop },\\n\\t0x010B: { n:\\\"BrtBeginECParam\\\", f:parsenoop },\\n\\t0x010C: { n:\\\"BrtEndECParam\\\", f:parsenoop },\\n\\t0x010D: { n:\\\"BrtBeginPCDKPIs\\\", f:parsenoop },\\n\\t0x010E: { n:\\\"BrtEndPCDKPIs\\\", f:parsenoop },\\n\\t0x010F: { n:\\\"BrtBeginPCDKPI\\\", f:parsenoop },\\n\\t0x0110: { n:\\\"BrtEndPCDKPI\\\", f:parsenoop },\\n\\t0x0111: { n:\\\"BrtBeginDims\\\", f:parsenoop },\\n\\t0x0112: { n:\\\"BrtEndDims\\\", f:parsenoop },\\n\\t0x0113: { n:\\\"BrtBeginDim\\\", f:parsenoop },\\n\\t0x0114: { n:\\\"BrtEndDim\\\", f:parsenoop },\\n\\t0x0115: { n:\\\"BrtIndexPartEnd\\\", f:parsenoop },\\n\\t0x0116: { n:\\\"BrtBeginStyleSheet\\\", f:parsenoop },\\n\\t0x0117: { n:\\\"BrtEndStyleSheet\\\", f:parsenoop },\\n\\t0x0118: { n:\\\"BrtBeginSXView\\\", f:parsenoop },\\n\\t0x0119: { n:\\\"BrtEndSXVI\\\", f:parsenoop },\\n\\t0x011A: { n:\\\"BrtBeginSXVI\\\", f:parsenoop },\\n\\t0x011B: { n:\\\"BrtBeginSXVIs\\\", f:parsenoop },\\n\\t0x011C: { n:\\\"BrtEndSXVIs\\\", f:parsenoop },\\n\\t0x011D: { n:\\\"BrtBeginSXVD\\\", f:parsenoop },\\n\\t0x011E: { n:\\\"BrtEndSXVD\\\", f:parsenoop },\\n\\t0x011F: { n:\\\"BrtBeginSXVDs\\\", f:parsenoop },\\n\\t0x0120: { n:\\\"BrtEndSXVDs\\\", f:parsenoop },\\n\\t0x0121: { n:\\\"BrtBeginSXPI\\\", f:parsenoop },\\n\\t0x0122: { n:\\\"BrtEndSXPI\\\", f:parsenoop },\\n\\t0x0123: { n:\\\"BrtBeginSXPIs\\\", f:parsenoop },\\n\\t0x0124: { n:\\\"BrtEndSXPIs\\\", f:parsenoop },\\n\\t0x0125: { n:\\\"BrtBeginSXDI\\\", f:parsenoop },\\n\\t0x0126: { n:\\\"BrtEndSXDI\\\", f:parsenoop },\\n\\t0x0127: { n:\\\"BrtBeginSXDIs\\\", f:parsenoop },\\n\\t0x0128: { n:\\\"BrtEndSXDIs\\\", f:parsenoop },\\n\\t0x0129: { n:\\\"BrtBeginSXLI\\\", f:parsenoop },\\n\\t0x012A: { n:\\\"BrtEndSXLI\\\", f:parsenoop },\\n\\t0x012B: { n:\\\"BrtBeginSXLIRws\\\", f:parsenoop },\\n\\t0x012C: { n:\\\"BrtEndSXLIRws\\\", f:parsenoop },\\n\\t0x012D: { n:\\\"BrtBeginSXLICols\\\", f:parsenoop },\\n\\t0x012E: { n:\\\"BrtEndSXLICols\\\", f:parsenoop },\\n\\t0x012F: { n:\\\"BrtBeginSXFormat\\\", f:parsenoop },\\n\\t0x0130: { n:\\\"BrtEndSXFormat\\\", f:parsenoop },\\n\\t0x0131: { n:\\\"BrtBeginSXFormats\\\", f:parsenoop },\\n\\t0x0132: { n:\\\"BrtEndSxFormats\\\", f:parsenoop },\\n\\t0x0133: { n:\\\"BrtBeginSxSelect\\\", f:parsenoop },\\n\\t0x0134: { n:\\\"BrtEndSxSelect\\\", f:parsenoop },\\n\\t0x0135: { n:\\\"BrtBeginISXVDRws\\\", f:parsenoop },\\n\\t0x0136: { n:\\\"BrtEndISXVDRws\\\", f:parsenoop },\\n\\t0x0137: { n:\\\"BrtBeginISXVDCols\\\", f:parsenoop },\\n\\t0x0138: { n:\\\"BrtEndISXVDCols\\\", f:parsenoop },\\n\\t0x0139: { n:\\\"BrtEndSXLocation\\\", f:parsenoop },\\n\\t0x013A: { n:\\\"BrtBeginSXLocation\\\", f:parsenoop },\\n\\t0x013B: { n:\\\"BrtEndSXView\\\", f:parsenoop },\\n\\t0x013C: { n:\\\"BrtBeginSXTHs\\\", f:parsenoop },\\n\\t0x013D: { n:\\\"BrtEndSXTHs\\\", f:parsenoop },\\n\\t0x013E: { n:\\\"BrtBeginSXTH\\\", f:parsenoop },\\n\\t0x013F: { n:\\\"BrtEndSXTH\\\", f:parsenoop },\\n\\t0x0140: { n:\\\"BrtBeginISXTHRws\\\", f:parsenoop },\\n\\t0x0141: { n:\\\"BrtEndISXTHRws\\\", f:parsenoop },\\n\\t0x0142: { n:\\\"BrtBeginISXTHCols\\\", f:parsenoop },\\n\\t0x0143: { n:\\\"BrtEndISXTHCols\\\", f:parsenoop },\\n\\t0x0144: { n:\\\"BrtBeginSXTDMPS\\\", f:parsenoop },\\n\\t0x0145: { n:\\\"BrtEndSXTDMPs\\\", f:parsenoop },\\n\\t0x0146: { n:\\\"BrtBeginSXTDMP\\\", f:parsenoop },\\n\\t0x0147: { n:\\\"BrtEndSXTDMP\\\", f:parsenoop },\\n\\t0x0148: { n:\\\"BrtBeginSXTHItems\\\", f:parsenoop },\\n\\t0x0149: { n:\\\"BrtEndSXTHItems\\\", f:parsenoop },\\n\\t0x014A: { n:\\\"BrtBeginSXTHItem\\\", f:parsenoop },\\n\\t0x014B: { n:\\\"BrtEndSXTHItem\\\", f:parsenoop },\\n\\t0x014C: { n:\\\"BrtBeginMetadata\\\", f:parsenoop },\\n\\t0x014D: { n:\\\"BrtEndMetadata\\\", f:parsenoop },\\n\\t0x014E: { n:\\\"BrtBeginEsmdtinfo\\\", f:parsenoop },\\n\\t0x014F: { n:\\\"BrtMdtinfo\\\", f:parsenoop },\\n\\t0x0150: { n:\\\"BrtEndEsmdtinfo\\\", f:parsenoop },\\n\\t0x0151: { n:\\\"BrtBeginEsmdb\\\", f:parsenoop },\\n\\t0x0152: { n:\\\"BrtEndEsmdb\\\", f:parsenoop },\\n\\t0x0153: { n:\\\"BrtBeginEsfmd\\\", f:parsenoop },\\n\\t0x0154: { n:\\\"BrtEndEsfmd\\\", f:parsenoop },\\n\\t0x0155: { n:\\\"BrtBeginSingleCells\\\", f:parsenoop },\\n\\t0x0156: { n:\\\"BrtEndSingleCells\\\", f:parsenoop },\\n\\t0x0157: { n:\\\"BrtBeginList\\\", f:parsenoop },\\n\\t0x0158: { n:\\\"BrtEndList\\\", f:parsenoop },\\n\\t0x0159: { n:\\\"BrtBeginListCols\\\", f:parsenoop },\\n\\t0x015A: { n:\\\"BrtEndListCols\\\", f:parsenoop },\\n\\t0x015B: { n:\\\"BrtBeginListCol\\\", f:parsenoop },\\n\\t0x015C: { n:\\\"BrtEndListCol\\\", f:parsenoop },\\n\\t0x015D: { n:\\\"BrtBeginListXmlCPr\\\", f:parsenoop },\\n\\t0x015E: { n:\\\"BrtEndListXmlCPr\\\", f:parsenoop },\\n\\t0x015F: { n:\\\"BrtListCCFmla\\\", f:parsenoop },\\n\\t0x0160: { n:\\\"BrtListTrFmla\\\", f:parsenoop },\\n\\t0x0161: { n:\\\"BrtBeginExternals\\\", f:parsenoop },\\n\\t0x0162: { n:\\\"BrtEndExternals\\\", f:parsenoop },\\n\\t0x0163: { n:\\\"BrtSupBookSrc\\\", f:parsenoop },\\n\\t0x0165: { n:\\\"BrtSupSelf\\\", f:parsenoop },\\n\\t0x0166: { n:\\\"BrtSupSame\\\", f:parsenoop },\\n\\t0x0167: { n:\\\"BrtSupTabs\\\", f:parsenoop },\\n\\t0x0168: { n:\\\"BrtBeginSupBook\\\", f:parsenoop },\\n\\t0x0169: { n:\\\"BrtPlaceholderName\\\", f:parsenoop },\\n\\t0x016A: { n:\\\"BrtExternSheet\\\", f:parsenoop },\\n\\t0x016B: { n:\\\"BrtExternTableStart\\\", f:parsenoop },\\n\\t0x016C: { n:\\\"BrtExternTableEnd\\\", f:parsenoop },\\n\\t0x016E: { n:\\\"BrtExternRowHdr\\\", f:parsenoop },\\n\\t0x016F: { n:\\\"BrtExternCellBlank\\\", f:parsenoop },\\n\\t0x0170: { n:\\\"BrtExternCellReal\\\", f:parsenoop },\\n\\t0x0171: { n:\\\"BrtExternCellBool\\\", f:parsenoop },\\n\\t0x0172: { n:\\\"BrtExternCellError\\\", f:parsenoop },\\n\\t0x0173: { n:\\\"BrtExternCellString\\\", f:parsenoop },\\n\\t0x0174: { n:\\\"BrtBeginEsmdx\\\", f:parsenoop },\\n\\t0x0175: { n:\\\"BrtEndEsmdx\\\", f:parsenoop },\\n\\t0x0176: { n:\\\"BrtBeginMdxSet\\\", f:parsenoop },\\n\\t0x0177: { n:\\\"BrtEndMdxSet\\\", f:parsenoop },\\n\\t0x0178: { n:\\\"BrtBeginMdxMbrProp\\\", f:parsenoop },\\n\\t0x0179: { n:\\\"BrtEndMdxMbrProp\\\", f:parsenoop },\\n\\t0x017A: { n:\\\"BrtBeginMdxKPI\\\", f:parsenoop },\\n\\t0x017B: { n:\\\"BrtEndMdxKPI\\\", f:parsenoop },\\n\\t0x017C: { n:\\\"BrtBeginEsstr\\\", f:parsenoop },\\n\\t0x017D: { n:\\\"BrtEndEsstr\\\", f:parsenoop },\\n\\t0x017E: { n:\\\"BrtBeginPRFItem\\\", f:parsenoop },\\n\\t0x017F: { n:\\\"BrtEndPRFItem\\\", f:parsenoop },\\n\\t0x0180: { n:\\\"BrtBeginPivotCacheIDs\\\", f:parsenoop },\\n\\t0x0181: { n:\\\"BrtEndPivotCacheIDs\\\", f:parsenoop },\\n\\t0x0182: { n:\\\"BrtBeginPivotCacheID\\\", f:parsenoop },\\n\\t0x0183: { n:\\\"BrtEndPivotCacheID\\\", f:parsenoop },\\n\\t0x0184: { n:\\\"BrtBeginISXVIs\\\", f:parsenoop },\\n\\t0x0185: { n:\\\"BrtEndISXVIs\\\", f:parsenoop },\\n\\t0x0186: { n:\\\"BrtBeginColInfos\\\", f:parsenoop },\\n\\t0x0187: { n:\\\"BrtEndColInfos\\\", f:parsenoop },\\n\\t0x0188: { n:\\\"BrtBeginRwBrk\\\", f:parsenoop },\\n\\t0x0189: { n:\\\"BrtEndRwBrk\\\", f:parsenoop },\\n\\t0x018A: { n:\\\"BrtBeginColBrk\\\", f:parsenoop },\\n\\t0x018B: { n:\\\"BrtEndColBrk\\\", f:parsenoop },\\n\\t0x018C: { n:\\\"BrtBrk\\\", f:parsenoop },\\n\\t0x018D: { n:\\\"BrtUserBookView\\\", f:parsenoop },\\n\\t0x018E: { n:\\\"BrtInfo\\\", f:parsenoop },\\n\\t0x018F: { n:\\\"BrtCUsr\\\", f:parsenoop },\\n\\t0x0190: { n:\\\"BrtUsr\\\", f:parsenoop },\\n\\t0x0191: { n:\\\"BrtBeginUsers\\\", f:parsenoop },\\n\\t0x0193: { n:\\\"BrtEOF\\\", f:parsenoop },\\n\\t0x0194: { n:\\\"BrtUCR\\\", f:parsenoop },\\n\\t0x0195: { n:\\\"BrtRRInsDel\\\", f:parsenoop },\\n\\t0x0196: { n:\\\"BrtRREndInsDel\\\", f:parsenoop },\\n\\t0x0197: { n:\\\"BrtRRMove\\\", f:parsenoop },\\n\\t0x0198: { n:\\\"BrtRREndMove\\\", f:parsenoop },\\n\\t0x0199: { n:\\\"BrtRRChgCell\\\", f:parsenoop },\\n\\t0x019A: { n:\\\"BrtRREndChgCell\\\", f:parsenoop },\\n\\t0x019B: { n:\\\"BrtRRHeader\\\", f:parsenoop },\\n\\t0x019C: { n:\\\"BrtRRUserView\\\", f:parsenoop },\\n\\t0x019D: { n:\\\"BrtRRRenSheet\\\", f:parsenoop },\\n\\t0x019E: { n:\\\"BrtRRInsertSh\\\", f:parsenoop },\\n\\t0x019F: { n:\\\"BrtRRDefName\\\", f:parsenoop },\\n\\t0x01A0: { n:\\\"BrtRRNote\\\", f:parsenoop },\\n\\t0x01A1: { n:\\\"BrtRRConflict\\\", f:parsenoop },\\n\\t0x01A2: { n:\\\"BrtRRTQSIF\\\", f:parsenoop },\\n\\t0x01A3: { n:\\\"BrtRRFormat\\\", f:parsenoop },\\n\\t0x01A4: { n:\\\"BrtRREndFormat\\\", f:parsenoop },\\n\\t0x01A5: { n:\\\"BrtRRAutoFmt\\\", f:parsenoop },\\n\\t0x01A6: { n:\\\"BrtBeginUserShViews\\\", f:parsenoop },\\n\\t0x01A7: { n:\\\"BrtBeginUserShView\\\", f:parsenoop },\\n\\t0x01A8: { n:\\\"BrtEndUserShView\\\", f:parsenoop },\\n\\t0x01A9: { n:\\\"BrtEndUserShViews\\\", f:parsenoop },\\n\\t0x01AA: { n:\\\"BrtArrFmla\\\", f:parsenoop },\\n\\t0x01AB: { n:\\\"BrtShrFmla\\\", f:parsenoop },\\n\\t0x01AC: { n:\\\"BrtTable\\\", f:parsenoop },\\n\\t0x01AD: { n:\\\"BrtBeginExtConnections\\\", f:parsenoop },\\n\\t0x01AE: { n:\\\"BrtEndExtConnections\\\", f:parsenoop },\\n\\t0x01AF: { n:\\\"BrtBeginPCDCalcMems\\\", f:parsenoop },\\n\\t0x01B0: { n:\\\"BrtEndPCDCalcMems\\\", f:parsenoop },\\n\\t0x01B1: { n:\\\"BrtBeginPCDCalcMem\\\", f:parsenoop },\\n\\t0x01B2: { n:\\\"BrtEndPCDCalcMem\\\", f:parsenoop },\\n\\t0x01B3: { n:\\\"BrtBeginPCDHGLevels\\\", f:parsenoop },\\n\\t0x01B4: { n:\\\"BrtEndPCDHGLevels\\\", f:parsenoop },\\n\\t0x01B5: { n:\\\"BrtBeginPCDHGLevel\\\", f:parsenoop },\\n\\t0x01B6: { n:\\\"BrtEndPCDHGLevel\\\", f:parsenoop },\\n\\t0x01B7: { n:\\\"BrtBeginPCDHGLGroups\\\", f:parsenoop },\\n\\t0x01B8: { n:\\\"BrtEndPCDHGLGroups\\\", f:parsenoop },\\n\\t0x01B9: { n:\\\"BrtBeginPCDHGLGroup\\\", f:parsenoop },\\n\\t0x01BA: { n:\\\"BrtEndPCDHGLGroup\\\", f:parsenoop },\\n\\t0x01BB: { n:\\\"BrtBeginPCDHGLGMembers\\\", f:parsenoop },\\n\\t0x01BC: { n:\\\"BrtEndPCDHGLGMembers\\\", f:parsenoop },\\n\\t0x01BD: { n:\\\"BrtBeginPCDHGLGMember\\\", f:parsenoop },\\n\\t0x01BE: { n:\\\"BrtEndPCDHGLGMember\\\", f:parsenoop },\\n\\t0x01BF: { n:\\\"BrtBeginQSI\\\", f:parsenoop },\\n\\t0x01C0: { n:\\\"BrtEndQSI\\\", f:parsenoop },\\n\\t0x01C1: { n:\\\"BrtBeginQSIR\\\", f:parsenoop },\\n\\t0x01C2: { n:\\\"BrtEndQSIR\\\", f:parsenoop },\\n\\t0x01C3: { n:\\\"BrtBeginDeletedNames\\\", f:parsenoop },\\n\\t0x01C4: { n:\\\"BrtEndDeletedNames\\\", f:parsenoop },\\n\\t0x01C5: { n:\\\"BrtBeginDeletedName\\\", f:parsenoop },\\n\\t0x01C6: { n:\\\"BrtEndDeletedName\\\", f:parsenoop },\\n\\t0x01C7: { n:\\\"BrtBeginQSIFs\\\", f:parsenoop },\\n\\t0x01C8: { n:\\\"BrtEndQSIFs\\\", f:parsenoop },\\n\\t0x01C9: { n:\\\"BrtBeginQSIF\\\", f:parsenoop },\\n\\t0x01CA: { n:\\\"BrtEndQSIF\\\", f:parsenoop },\\n\\t0x01CB: { n:\\\"BrtBeginAutoSortScope\\\", f:parsenoop },\\n\\t0x01CC: { n:\\\"BrtEndAutoSortScope\\\", f:parsenoop },\\n\\t0x01CD: { n:\\\"BrtBeginConditionalFormatting\\\", f:parsenoop },\\n\\t0x01CE: { n:\\\"BrtEndConditionalFormatting\\\", f:parsenoop },\\n\\t0x01CF: { n:\\\"BrtBeginCFRule\\\", f:parsenoop },\\n\\t0x01D0: { n:\\\"BrtEndCFRule\\\", f:parsenoop },\\n\\t0x01D1: { n:\\\"BrtBeginIconSet\\\", f:parsenoop },\\n\\t0x01D2: { n:\\\"BrtEndIconSet\\\", f:parsenoop },\\n\\t0x01D3: { n:\\\"BrtBeginDatabar\\\", f:parsenoop },\\n\\t0x01D4: { n:\\\"BrtEndDatabar\\\", f:parsenoop },\\n\\t0x01D5: { n:\\\"BrtBeginColorScale\\\", f:parsenoop },\\n\\t0x01D6: { n:\\\"BrtEndColorScale\\\", f:parsenoop },\\n\\t0x01D7: { n:\\\"BrtCFVO\\\", f:parsenoop },\\n\\t0x01D8: { n:\\\"BrtExternValueMeta\\\", f:parsenoop },\\n\\t0x01D9: { n:\\\"BrtBeginColorPalette\\\", f:parsenoop },\\n\\t0x01DA: { n:\\\"BrtEndColorPalette\\\", f:parsenoop },\\n\\t0x01DB: { n:\\\"BrtIndexedColor\\\", f:parsenoop },\\n\\t0x01DC: { n:\\\"BrtMargins\\\", f:parsenoop },\\n\\t0x01DD: { n:\\\"BrtPrintOptions\\\", f:parsenoop },\\n\\t0x01DE: { n:\\\"BrtPageSetup\\\", f:parsenoop },\\n\\t0x01DF: { n:\\\"BrtBeginHeaderFooter\\\", f:parsenoop },\\n\\t0x01E0: { n:\\\"BrtEndHeaderFooter\\\", f:parsenoop },\\n\\t0x01E1: { n:\\\"BrtBeginSXCrtFormat\\\", f:parsenoop },\\n\\t0x01E2: { n:\\\"BrtEndSXCrtFormat\\\", f:parsenoop },\\n\\t0x01E3: { n:\\\"BrtBeginSXCrtFormats\\\", f:parsenoop },\\n\\t0x01E4: { n:\\\"BrtEndSXCrtFormats\\\", f:parsenoop },\\n\\t0x01E5: { n:\\\"BrtWsFmtInfo\\\", f:parsenoop },\\n\\t0x01E6: { n:\\\"BrtBeginMgs\\\", f:parsenoop },\\n\\t0x01E7: { n:\\\"BrtEndMGs\\\", f:parsenoop },\\n\\t0x01E8: { n:\\\"BrtBeginMGMaps\\\", f:parsenoop },\\n\\t0x01E9: { n:\\\"BrtEndMGMaps\\\", f:parsenoop },\\n\\t0x01EA: { n:\\\"BrtBeginMG\\\", f:parsenoop },\\n\\t0x01EB: { n:\\\"BrtEndMG\\\", f:parsenoop },\\n\\t0x01EC: { n:\\\"BrtBeginMap\\\", f:parsenoop },\\n\\t0x01ED: { n:\\\"BrtEndMap\\\", f:parsenoop },\\n\\t0x01EE: { n:\\\"BrtHLink\\\", f:parse_BrtHLink },\\n\\t0x01EF: { n:\\\"BrtBeginDCon\\\", f:parsenoop },\\n\\t0x01F0: { n:\\\"BrtEndDCon\\\", f:parsenoop },\\n\\t0x01F1: { n:\\\"BrtBeginDRefs\\\", f:parsenoop },\\n\\t0x01F2: { n:\\\"BrtEndDRefs\\\", f:parsenoop },\\n\\t0x01F3: { n:\\\"BrtDRef\\\", f:parsenoop },\\n\\t0x01F4: { n:\\\"BrtBeginScenMan\\\", f:parsenoop },\\n\\t0x01F5: { n:\\\"BrtEndScenMan\\\", f:parsenoop },\\n\\t0x01F6: { n:\\\"BrtBeginSct\\\", f:parsenoop },\\n\\t0x01F7: { n:\\\"BrtEndSct\\\", f:parsenoop },\\n\\t0x01F8: { n:\\\"BrtSlc\\\", f:parsenoop },\\n\\t0x01F9: { n:\\\"BrtBeginDXFs\\\", f:parsenoop },\\n\\t0x01FA: { n:\\\"BrtEndDXFs\\\", f:parsenoop },\\n\\t0x01FB: { n:\\\"BrtDXF\\\", f:parsenoop },\\n\\t0x01FC: { n:\\\"BrtBeginTableStyles\\\", f:parsenoop },\\n\\t0x01FD: { n:\\\"BrtEndTableStyles\\\", f:parsenoop },\\n\\t0x01FE: { n:\\\"BrtBeginTableStyle\\\", f:parsenoop },\\n\\t0x01FF: { n:\\\"BrtEndTableStyle\\\", f:parsenoop },\\n\\t0x0200: { n:\\\"BrtTableStyleElement\\\", f:parsenoop },\\n\\t0x0201: { n:\\\"BrtTableStyleClient\\\", f:parsenoop },\\n\\t0x0202: { n:\\\"BrtBeginVolDeps\\\", f:parsenoop },\\n\\t0x0203: { n:\\\"BrtEndVolDeps\\\", f:parsenoop },\\n\\t0x0204: { n:\\\"BrtBeginVolType\\\", f:parsenoop },\\n\\t0x0205: { n:\\\"BrtEndVolType\\\", f:parsenoop },\\n\\t0x0206: { n:\\\"BrtBeginVolMain\\\", f:parsenoop },\\n\\t0x0207: { n:\\\"BrtEndVolMain\\\", f:parsenoop },\\n\\t0x0208: { n:\\\"BrtBeginVolTopic\\\", f:parsenoop },\\n\\t0x0209: { n:\\\"BrtEndVolTopic\\\", f:parsenoop },\\n\\t0x020A: { n:\\\"BrtVolSubtopic\\\", f:parsenoop },\\n\\t0x020B: { n:\\\"BrtVolRef\\\", f:parsenoop },\\n\\t0x020C: { n:\\\"BrtVolNum\\\", f:parsenoop },\\n\\t0x020D: { n:\\\"BrtVolErr\\\", f:parsenoop },\\n\\t0x020E: { n:\\\"BrtVolStr\\\", f:parsenoop },\\n\\t0x020F: { n:\\\"BrtVolBool\\\", f:parsenoop },\\n\\t0x0210: { n:\\\"BrtBeginCalcChain$\\\", f:parsenoop },\\n\\t0x0211: { n:\\\"BrtEndCalcChain$\\\", f:parsenoop },\\n\\t0x0212: { n:\\\"BrtBeginSortState\\\", f:parsenoop },\\n\\t0x0213: { n:\\\"BrtEndSortState\\\", f:parsenoop },\\n\\t0x0214: { n:\\\"BrtBeginSortCond\\\", f:parsenoop },\\n\\t0x0215: { n:\\\"BrtEndSortCond\\\", f:parsenoop },\\n\\t0x0216: { n:\\\"BrtBookProtection\\\", f:parsenoop },\\n\\t0x0217: { n:\\\"BrtSheetProtection\\\", f:parsenoop },\\n\\t0x0218: { n:\\\"BrtRangeProtection\\\", f:parsenoop },\\n\\t0x0219: { n:\\\"BrtPhoneticInfo\\\", f:parsenoop },\\n\\t0x021A: { n:\\\"BrtBeginECTxtWiz\\\", f:parsenoop },\\n\\t0x021B: { n:\\\"BrtEndECTxtWiz\\\", f:parsenoop },\\n\\t0x021C: { n:\\\"BrtBeginECTWFldInfoLst\\\", f:parsenoop },\\n\\t0x021D: { n:\\\"BrtEndECTWFldInfoLst\\\", f:parsenoop },\\n\\t0x021E: { n:\\\"BrtBeginECTwFldInfo\\\", f:parsenoop },\\n\\t0x0224: { n:\\\"BrtFileSharing\\\", f:parsenoop },\\n\\t0x0225: { n:\\\"BrtOleSize\\\", f:parsenoop },\\n\\t0x0226: { n:\\\"BrtDrawing\\\", f:parsenoop },\\n\\t0x0227: { n:\\\"BrtLegacyDrawing\\\", f:parsenoop },\\n\\t0x0228: { n:\\\"BrtLegacyDrawingHF\\\", f:parsenoop },\\n\\t0x0229: { n:\\\"BrtWebOpt\\\", f:parsenoop },\\n\\t0x022A: { n:\\\"BrtBeginWebPubItems\\\", f:parsenoop },\\n\\t0x022B: { n:\\\"BrtEndWebPubItems\\\", f:parsenoop },\\n\\t0x022C: { n:\\\"BrtBeginWebPubItem\\\", f:parsenoop },\\n\\t0x022D: { n:\\\"BrtEndWebPubItem\\\", f:parsenoop },\\n\\t0x022E: { n:\\\"BrtBeginSXCondFmt\\\", f:parsenoop },\\n\\t0x022F: { n:\\\"BrtEndSXCondFmt\\\", f:parsenoop },\\n\\t0x0230: { n:\\\"BrtBeginSXCondFmts\\\", f:parsenoop },\\n\\t0x0231: { n:\\\"BrtEndSXCondFmts\\\", f:parsenoop },\\n\\t0x0232: { n:\\\"BrtBkHim\\\", f:parsenoop },\\n\\t0x0234: { n:\\\"BrtColor\\\", f:parsenoop },\\n\\t0x0235: { n:\\\"BrtBeginIndexedColors\\\", f:parsenoop },\\n\\t0x0236: { n:\\\"BrtEndIndexedColors\\\", f:parsenoop },\\n\\t0x0239: { n:\\\"BrtBeginMRUColors\\\", f:parsenoop },\\n\\t0x023A: { n:\\\"BrtEndMRUColors\\\", f:parsenoop },\\n\\t0x023C: { n:\\\"BrtMRUColor\\\", f:parsenoop },\\n\\t0x023D: { n:\\\"BrtBeginDVals\\\", f:parsenoop },\\n\\t0x023E: { n:\\\"BrtEndDVals\\\", f:parsenoop },\\n\\t0x0241: { n:\\\"BrtSupNameStart\\\", f:parsenoop },\\n\\t0x0242: { n:\\\"BrtSupNameValueStart\\\", f:parsenoop },\\n\\t0x0243: { n:\\\"BrtSupNameValueEnd\\\", f:parsenoop },\\n\\t0x0244: { n:\\\"BrtSupNameNum\\\", f:parsenoop },\\n\\t0x0245: { n:\\\"BrtSupNameErr\\\", f:parsenoop },\\n\\t0x0246: { n:\\\"BrtSupNameSt\\\", f:parsenoop },\\n\\t0x0247: { n:\\\"BrtSupNameNil\\\", f:parsenoop },\\n\\t0x0248: { n:\\\"BrtSupNameBool\\\", f:parsenoop },\\n\\t0x0249: { n:\\\"BrtSupNameFmla\\\", f:parsenoop },\\n\\t0x024A: { n:\\\"BrtSupNameBits\\\", f:parsenoop },\\n\\t0x024B: { n:\\\"BrtSupNameEnd\\\", f:parsenoop },\\n\\t0x024C: { n:\\\"BrtEndSupBook\\\", f:parsenoop },\\n\\t0x024D: { n:\\\"BrtCellSmartTagProperty\\\", f:parsenoop },\\n\\t0x024E: { n:\\\"BrtBeginCellSmartTag\\\", f:parsenoop },\\n\\t0x024F: { n:\\\"BrtEndCellSmartTag\\\", f:parsenoop },\\n\\t0x0250: { n:\\\"BrtBeginCellSmartTags\\\", f:parsenoop },\\n\\t0x0251: { n:\\\"BrtEndCellSmartTags\\\", f:parsenoop },\\n\\t0x0252: { n:\\\"BrtBeginSmartTags\\\", f:parsenoop },\\n\\t0x0253: { n:\\\"BrtEndSmartTags\\\", f:parsenoop },\\n\\t0x0254: { n:\\\"BrtSmartTagType\\\", f:parsenoop },\\n\\t0x0255: { n:\\\"BrtBeginSmartTagTypes\\\", f:parsenoop },\\n\\t0x0256: { n:\\\"BrtEndSmartTagTypes\\\", f:parsenoop },\\n\\t0x0257: { n:\\\"BrtBeginSXFilters\\\", f:parsenoop },\\n\\t0x0258: { n:\\\"BrtEndSXFilters\\\", f:parsenoop },\\n\\t0x0259: { n:\\\"BrtBeginSXFILTER\\\", f:parsenoop },\\n\\t0x025A: { n:\\\"BrtEndSXFilter\\\", f:parsenoop },\\n\\t0x025B: { n:\\\"BrtBeginFills\\\", f:parsenoop },\\n\\t0x025C: { n:\\\"BrtEndFills\\\", f:parsenoop },\\n\\t0x025D: { n:\\\"BrtBeginCellWatches\\\", f:parsenoop },\\n\\t0x025E: { n:\\\"BrtEndCellWatches\\\", f:parsenoop },\\n\\t0x025F: { n:\\\"BrtCellWatch\\\", f:parsenoop },\\n\\t0x0260: { n:\\\"BrtBeginCRErrs\\\", f:parsenoop },\\n\\t0x0261: { n:\\\"BrtEndCRErrs\\\", f:parsenoop },\\n\\t0x0262: { n:\\\"BrtCrashRecErr\\\", f:parsenoop },\\n\\t0x0263: { n:\\\"BrtBeginFonts\\\", f:parsenoop },\\n\\t0x0264: { n:\\\"BrtEndFonts\\\", f:parsenoop },\\n\\t0x0265: { n:\\\"BrtBeginBorders\\\", f:parsenoop },\\n\\t0x0266: { n:\\\"BrtEndBorders\\\", f:parsenoop },\\n\\t0x0267: { n:\\\"BrtBeginFmts\\\", f:parsenoop },\\n\\t0x0268: { n:\\\"BrtEndFmts\\\", f:parsenoop },\\n\\t0x0269: { n:\\\"BrtBeginCellXFs\\\", f:parsenoop },\\n\\t0x026A: { n:\\\"BrtEndCellXFs\\\", f:parsenoop },\\n\\t0x026B: { n:\\\"BrtBeginStyles\\\", f:parsenoop },\\n\\t0x026C: { n:\\\"BrtEndStyles\\\", f:parsenoop },\\n\\t0x0271: { n:\\\"BrtBigName\\\", f:parsenoop },\\n\\t0x0272: { n:\\\"BrtBeginCellStyleXFs\\\", f:parsenoop },\\n\\t0x0273: { n:\\\"BrtEndCellStyleXFs\\\", f:parsenoop },\\n\\t0x0274: { n:\\\"BrtBeginComments\\\", f:parsenoop },\\n\\t0x0275: { n:\\\"BrtEndComments\\\", f:parsenoop },\\n\\t0x0276: { n:\\\"BrtBeginCommentAuthors\\\", f:parsenoop },\\n\\t0x0277: { n:\\\"BrtEndCommentAuthors\\\", f:parsenoop },\\n\\t0x0278: { n:\\\"BrtCommentAuthor\\\", f:parse_BrtCommentAuthor },\\n\\t0x0279: { n:\\\"BrtBeginCommentList\\\", f:parsenoop },\\n\\t0x027A: { n:\\\"BrtEndCommentList\\\", f:parsenoop },\\n\\t0x027B: { n:\\\"BrtBeginComment\\\", f:parse_BrtBeginComment},\\n\\t0x027C: { n:\\\"BrtEndComment\\\", f:parsenoop },\\n\\t0x027D: { n:\\\"BrtCommentText\\\", f:parse_BrtCommentText },\\n\\t0x027E: { n:\\\"BrtBeginOleObjects\\\", f:parsenoop },\\n\\t0x027F: { n:\\\"BrtOleObject\\\", f:parsenoop },\\n\\t0x0280: { n:\\\"BrtEndOleObjects\\\", f:parsenoop },\\n\\t0x0281: { n:\\\"BrtBeginSxrules\\\", f:parsenoop },\\n\\t0x0282: { n:\\\"BrtEndSxRules\\\", f:parsenoop },\\n\\t0x0283: { n:\\\"BrtBeginActiveXControls\\\", f:parsenoop },\\n\\t0x0284: { n:\\\"BrtActiveX\\\", f:parsenoop },\\n\\t0x0285: { n:\\\"BrtEndActiveXControls\\\", f:parsenoop },\\n\\t0x0286: { n:\\\"BrtBeginPCDSDTCEMembersSortBy\\\", f:parsenoop },\\n\\t0x0288: { n:\\\"BrtBeginCellIgnoreECs\\\", f:parsenoop },\\n\\t0x0289: { n:\\\"BrtCellIgnoreEC\\\", f:parsenoop },\\n\\t0x028A: { n:\\\"BrtEndCellIgnoreECs\\\", f:parsenoop },\\n\\t0x028B: { n:\\\"BrtCsProp\\\", f:parsenoop },\\n\\t0x028C: { n:\\\"BrtCsPageSetup\\\", f:parsenoop },\\n\\t0x028D: { n:\\\"BrtBeginUserCsViews\\\", f:parsenoop },\\n\\t0x028E: { n:\\\"BrtEndUserCsViews\\\", f:parsenoop },\\n\\t0x028F: { n:\\\"BrtBeginUserCsView\\\", f:parsenoop },\\n\\t0x0290: { n:\\\"BrtEndUserCsView\\\", f:parsenoop },\\n\\t0x0291: { n:\\\"BrtBeginPcdSFCIEntries\\\", f:parsenoop },\\n\\t0x0292: { n:\\\"BrtEndPCDSFCIEntries\\\", f:parsenoop },\\n\\t0x0293: { n:\\\"BrtPCDSFCIEntry\\\", f:parsenoop },\\n\\t0x0294: { n:\\\"BrtBeginListParts\\\", f:parsenoop },\\n\\t0x0295: { n:\\\"BrtListPart\\\", f:parsenoop },\\n\\t0x0296: { n:\\\"BrtEndListParts\\\", f:parsenoop },\\n\\t0x0297: { n:\\\"BrtSheetCalcProp\\\", f:parsenoop },\\n\\t0x0298: { n:\\\"BrtBeginFnGroup\\\", f:parsenoop },\\n\\t0x0299: { n:\\\"BrtFnGroup\\\", f:parsenoop },\\n\\t0x029A: { n:\\\"BrtEndFnGroup\\\", f:parsenoop },\\n\\t0x029B: { n:\\\"BrtSupAddin\\\", f:parsenoop },\\n\\t0x029C: { n:\\\"BrtSXTDMPOrder\\\", f:parsenoop },\\n\\t0x029D: { n:\\\"BrtCsProtection\\\", f:parsenoop },\\n\\t0x029F: { n:\\\"BrtBeginWsSortMap\\\", f:parsenoop },\\n\\t0x02A0: { n:\\\"BrtEndWsSortMap\\\", f:parsenoop },\\n\\t0x02A1: { n:\\\"BrtBeginRRSort\\\", f:parsenoop },\\n\\t0x02A2: { n:\\\"BrtEndRRSort\\\", f:parsenoop },\\n\\t0x02A3: { n:\\\"BrtRRSortItem\\\", f:parsenoop },\\n\\t0x02A4: { n:\\\"BrtFileSharingIso\\\", f:parsenoop },\\n\\t0x02A5: { n:\\\"BrtBookProtectionIso\\\", f:parsenoop },\\n\\t0x02A6: { n:\\\"BrtSheetProtectionIso\\\", f:parsenoop },\\n\\t0x02A7: { n:\\\"BrtCsProtectionIso\\\", f:parsenoop },\\n\\t0x02A8: { n:\\\"BrtRangeProtectionIso\\\", f:parsenoop },\\n\\t0x0400: { n:\\\"BrtRwDescent\\\", f:parsenoop },\\n\\t0x0401: { n:\\\"BrtKnownFonts\\\", f:parsenoop },\\n\\t0x0402: { n:\\\"BrtBeginSXTupleSet\\\", f:parsenoop },\\n\\t0x0403: { n:\\\"BrtEndSXTupleSet\\\", f:parsenoop },\\n\\t0x0404: { n:\\\"BrtBeginSXTupleSetHeader\\\", f:parsenoop },\\n\\t0x0405: { n:\\\"BrtEndSXTupleSetHeader\\\", f:parsenoop },\\n\\t0x0406: { n:\\\"BrtSXTupleSetHeaderItem\\\", f:parsenoop },\\n\\t0x0407: { n:\\\"BrtBeginSXTupleSetData\\\", f:parsenoop },\\n\\t0x0408: { n:\\\"BrtEndSXTupleSetData\\\", f:parsenoop },\\n\\t0x0409: { n:\\\"BrtBeginSXTupleSetRow\\\", f:parsenoop },\\n\\t0x040A: { n:\\\"BrtEndSXTupleSetRow\\\", f:parsenoop },\\n\\t0x040B: { n:\\\"BrtSXTupleSetRowItem\\\", f:parsenoop },\\n\\t0x040C: { n:\\\"BrtNameExt\\\", f:parsenoop },\\n\\t0x040D: { n:\\\"BrtPCDH14\\\", f:parsenoop },\\n\\t0x040E: { n:\\\"BrtBeginPCDCalcMem14\\\", f:parsenoop },\\n\\t0x040F: { n:\\\"BrtEndPCDCalcMem14\\\", f:parsenoop },\\n\\t0x0410: { n:\\\"BrtSXTH14\\\", f:parsenoop },\\n\\t0x0411: { n:\\\"BrtBeginSparklineGroup\\\", f:parsenoop },\\n\\t0x0412: { n:\\\"BrtEndSparklineGroup\\\", f:parsenoop },\\n\\t0x0413: { n:\\\"BrtSparkline\\\", f:parsenoop },\\n\\t0x0414: { n:\\\"BrtSXDI14\\\", f:parsenoop },\\n\\t0x0415: { n:\\\"BrtWsFmtInfoEx14\\\", f:parsenoop },\\n\\t0x0416: { n:\\\"BrtBeginConditionalFormatting14\\\", f:parsenoop },\\n\\t0x0417: { n:\\\"BrtEndConditionalFormatting14\\\", f:parsenoop },\\n\\t0x0418: { n:\\\"BrtBeginCFRule14\\\", f:parsenoop },\\n\\t0x0419: { n:\\\"BrtEndCFRule14\\\", f:parsenoop },\\n\\t0x041A: { n:\\\"BrtCFVO14\\\", f:parsenoop },\\n\\t0x041B: { n:\\\"BrtBeginDatabar14\\\", f:parsenoop },\\n\\t0x041C: { n:\\\"BrtBeginIconSet14\\\", f:parsenoop },\\n\\t0x041D: { n:\\\"BrtDVal14\\\", f:parsenoop },\\n\\t0x041E: { n:\\\"BrtBeginDVals14\\\", f:parsenoop },\\n\\t0x041F: { n:\\\"BrtColor14\\\", f:parsenoop },\\n\\t0x0420: { n:\\\"BrtBeginSparklines\\\", f:parsenoop },\\n\\t0x0421: { n:\\\"BrtEndSparklines\\\", f:parsenoop },\\n\\t0x0422: { n:\\\"BrtBeginSparklineGroups\\\", f:parsenoop },\\n\\t0x0423: { n:\\\"BrtEndSparklineGroups\\\", f:parsenoop },\\n\\t0x0425: { n:\\\"BrtSXVD14\\\", f:parsenoop },\\n\\t0x0426: { n:\\\"BrtBeginSxview14\\\", f:parsenoop },\\n\\t0x0427: { n:\\\"BrtEndSxview14\\\", f:parsenoop },\\n\\t0x042A: { n:\\\"BrtBeginPCD14\\\", f:parsenoop },\\n\\t0x042B: { n:\\\"BrtEndPCD14\\\", f:parsenoop },\\n\\t0x042C: { n:\\\"BrtBeginExtConn14\\\", f:parsenoop },\\n\\t0x042D: { n:\\\"BrtEndExtConn14\\\", f:parsenoop },\\n\\t0x042E: { n:\\\"BrtBeginSlicerCacheIDs\\\", f:parsenoop },\\n\\t0x042F: { n:\\\"BrtEndSlicerCacheIDs\\\", f:parsenoop },\\n\\t0x0430: { n:\\\"BrtBeginSlicerCacheID\\\", f:parsenoop },\\n\\t0x0431: { n:\\\"BrtEndSlicerCacheID\\\", f:parsenoop },\\n\\t0x0433: { n:\\\"BrtBeginSlicerCache\\\", f:parsenoop },\\n\\t0x0434: { n:\\\"BrtEndSlicerCache\\\", f:parsenoop },\\n\\t0x0435: { n:\\\"BrtBeginSlicerCacheDef\\\", f:parsenoop },\\n\\t0x0436: { n:\\\"BrtEndSlicerCacheDef\\\", f:parsenoop },\\n\\t0x0437: { n:\\\"BrtBeginSlicersEx\\\", f:parsenoop },\\n\\t0x0438: { n:\\\"BrtEndSlicersEx\\\", f:parsenoop },\\n\\t0x0439: { n:\\\"BrtBeginSlicerEx\\\", f:parsenoop },\\n\\t0x043A: { n:\\\"BrtEndSlicerEx\\\", f:parsenoop },\\n\\t0x043B: { n:\\\"BrtBeginSlicer\\\", f:parsenoop },\\n\\t0x043C: { n:\\\"BrtEndSlicer\\\", f:parsenoop },\\n\\t0x043D: { n:\\\"BrtSlicerCachePivotTables\\\", f:parsenoop },\\n\\t0x043E: { n:\\\"BrtBeginSlicerCacheOlapImpl\\\", f:parsenoop },\\n\\t0x043F: { n:\\\"BrtEndSlicerCacheOlapImpl\\\", f:parsenoop },\\n\\t0x0440: { n:\\\"BrtBeginSlicerCacheLevelsData\\\", f:parsenoop },\\n\\t0x0441: { n:\\\"BrtEndSlicerCacheLevelsData\\\", f:parsenoop },\\n\\t0x0442: { n:\\\"BrtBeginSlicerCacheLevelData\\\", f:parsenoop },\\n\\t0x0443: { n:\\\"BrtEndSlicerCacheLevelData\\\", f:parsenoop },\\n\\t0x0444: { n:\\\"BrtBeginSlicerCacheSiRanges\\\", f:parsenoop },\\n\\t0x0445: { n:\\\"BrtEndSlicerCacheSiRanges\\\", f:parsenoop },\\n\\t0x0446: { n:\\\"BrtBeginSlicerCacheSiRange\\\", f:parsenoop },\\n\\t0x0447: { n:\\\"BrtEndSlicerCacheSiRange\\\", f:parsenoop },\\n\\t0x0448: { n:\\\"BrtSlicerCacheOlapItem\\\", f:parsenoop },\\n\\t0x0449: { n:\\\"BrtBeginSlicerCacheSelections\\\", f:parsenoop },\\n\\t0x044A: { n:\\\"BrtSlicerCacheSelection\\\", f:parsenoop },\\n\\t0x044B: { n:\\\"BrtEndSlicerCacheSelections\\\", f:parsenoop },\\n\\t0x044C: { n:\\\"BrtBeginSlicerCacheNative\\\", f:parsenoop },\\n\\t0x044D: { n:\\\"BrtEndSlicerCacheNative\\\", f:parsenoop },\\n\\t0x044E: { n:\\\"BrtSlicerCacheNativeItem\\\", f:parsenoop },\\n\\t0x044F: { n:\\\"BrtRangeProtection14\\\", f:parsenoop },\\n\\t0x0450: { n:\\\"BrtRangeProtectionIso14\\\", f:parsenoop },\\n\\t0x0451: { n:\\\"BrtCellIgnoreEC14\\\", f:parsenoop },\\n\\t0x0457: { n:\\\"BrtList14\\\", f:parsenoop },\\n\\t0x0458: { n:\\\"BrtCFIcon\\\", f:parsenoop },\\n\\t0x0459: { n:\\\"BrtBeginSlicerCachesPivotCacheIDs\\\", f:parsenoop },\\n\\t0x045A: { n:\\\"BrtEndSlicerCachesPivotCacheIDs\\\", f:parsenoop },\\n\\t0x045B: { n:\\\"BrtBeginSlicers\\\", f:parsenoop },\\n\\t0x045C: { n:\\\"BrtEndSlicers\\\", f:parsenoop },\\n\\t0x045D: { n:\\\"BrtWbProp14\\\", f:parsenoop },\\n\\t0x045E: { n:\\\"BrtBeginSXEdit\\\", f:parsenoop },\\n\\t0x045F: { n:\\\"BrtEndSXEdit\\\", f:parsenoop },\\n\\t0x0460: { n:\\\"BrtBeginSXEdits\\\", f:parsenoop },\\n\\t0x0461: { n:\\\"BrtEndSXEdits\\\", f:parsenoop },\\n\\t0x0462: { n:\\\"BrtBeginSXChange\\\", f:parsenoop },\\n\\t0x0463: { n:\\\"BrtEndSXChange\\\", f:parsenoop },\\n\\t0x0464: { n:\\\"BrtBeginSXChanges\\\", f:parsenoop },\\n\\t0x0465: { n:\\\"BrtEndSXChanges\\\", f:parsenoop },\\n\\t0x0466: { n:\\\"BrtSXTupleItems\\\", f:parsenoop },\\n\\t0x0468: { n:\\\"BrtBeginSlicerStyle\\\", f:parsenoop },\\n\\t0x0469: { n:\\\"BrtEndSlicerStyle\\\", f:parsenoop },\\n\\t0x046A: { n:\\\"BrtSlicerStyleElement\\\", f:parsenoop },\\n\\t0x046B: { n:\\\"BrtBeginStyleSheetExt14\\\", f:parsenoop },\\n\\t0x046C: { n:\\\"BrtEndStyleSheetExt14\\\", f:parsenoop },\\n\\t0x046D: { n:\\\"BrtBeginSlicerCachesPivotCacheID\\\", f:parsenoop },\\n\\t0x046E: { n:\\\"BrtEndSlicerCachesPivotCacheID\\\", f:parsenoop },\\n\\t0x046F: { n:\\\"BrtBeginConditionalFormattings\\\", f:parsenoop },\\n\\t0x0470: { n:\\\"BrtEndConditionalFormattings\\\", f:parsenoop },\\n\\t0x0471: { n:\\\"BrtBeginPCDCalcMemExt\\\", f:parsenoop },\\n\\t0x0472: { n:\\\"BrtEndPCDCalcMemExt\\\", f:parsenoop },\\n\\t0x0473: { n:\\\"BrtBeginPCDCalcMemsExt\\\", f:parsenoop },\\n\\t0x0474: { n:\\\"BrtEndPCDCalcMemsExt\\\", f:parsenoop },\\n\\t0x0475: { n:\\\"BrtPCDField14\\\", f:parsenoop },\\n\\t0x0476: { n:\\\"BrtBeginSlicerStyles\\\", f:parsenoop },\\n\\t0x0477: { n:\\\"BrtEndSlicerStyles\\\", f:parsenoop },\\n\\t0x0478: { n:\\\"BrtBeginSlicerStyleElements\\\", f:parsenoop },\\n\\t0x0479: { n:\\\"BrtEndSlicerStyleElements\\\", f:parsenoop },\\n\\t0x047A: { n:\\\"BrtCFRuleExt\\\", f:parsenoop },\\n\\t0x047B: { n:\\\"BrtBeginSXCondFmt14\\\", f:parsenoop },\\n\\t0x047C: { n:\\\"BrtEndSXCondFmt14\\\", f:parsenoop },\\n\\t0x047D: { n:\\\"BrtBeginSXCondFmts14\\\", f:parsenoop },\\n\\t0x047E: { n:\\\"BrtEndSXCondFmts14\\\", f:parsenoop },\\n\\t0x0480: { n:\\\"BrtBeginSortCond14\\\", f:parsenoop },\\n\\t0x0481: { n:\\\"BrtEndSortCond14\\\", f:parsenoop },\\n\\t0x0482: { n:\\\"BrtEndDVals14\\\", f:parsenoop },\\n\\t0x0483: { n:\\\"BrtEndIconSet14\\\", f:parsenoop },\\n\\t0x0484: { n:\\\"BrtEndDatabar14\\\", f:parsenoop },\\n\\t0x0485: { n:\\\"BrtBeginColorScale14\\\", f:parsenoop },\\n\\t0x0486: { n:\\\"BrtEndColorScale14\\\", f:parsenoop },\\n\\t0x0487: { n:\\\"BrtBeginSxrules14\\\", f:parsenoop },\\n\\t0x0488: { n:\\\"BrtEndSxrules14\\\", f:parsenoop },\\n\\t0x0489: { n:\\\"BrtBeginPRule14\\\", f:parsenoop },\\n\\t0x048A: { n:\\\"BrtEndPRule14\\\", f:parsenoop },\\n\\t0x048B: { n:\\\"BrtBeginPRFilters14\\\", f:parsenoop },\\n\\t0x048C: { n:\\\"BrtEndPRFilters14\\\", f:parsenoop },\\n\\t0x048D: { n:\\\"BrtBeginPRFilter14\\\", f:parsenoop },\\n\\t0x048E: { n:\\\"BrtEndPRFilter14\\\", f:parsenoop },\\n\\t0x048F: { n:\\\"BrtBeginPRFItem14\\\", f:parsenoop },\\n\\t0x0490: { n:\\\"BrtEndPRFItem14\\\", f:parsenoop },\\n\\t0x0491: { n:\\\"BrtBeginCellIgnoreECs14\\\", f:parsenoop },\\n\\t0x0492: { n:\\\"BrtEndCellIgnoreECs14\\\", f:parsenoop },\\n\\t0x0493: { n:\\\"BrtDxf14\\\", f:parsenoop },\\n\\t0x0494: { n:\\\"BrtBeginDxF14s\\\", f:parsenoop },\\n\\t0x0495: { n:\\\"BrtEndDxf14s\\\", f:parsenoop },\\n\\t0x0499: { n:\\\"BrtFilter14\\\", f:parsenoop },\\n\\t0x049A: { n:\\\"BrtBeginCustomFilters14\\\", f:parsenoop },\\n\\t0x049C: { n:\\\"BrtCustomFilter14\\\", f:parsenoop },\\n\\t0x049D: { n:\\\"BrtIconFilter14\\\", f:parsenoop },\\n\\t0x049E: { n:\\\"BrtPivotCacheConnectionName\\\", f:parsenoop },\\n\\t0x0800: { n:\\\"BrtBeginDecoupledPivotCacheIDs\\\", f:parsenoop },\\n\\t0x0801: { n:\\\"BrtEndDecoupledPivotCacheIDs\\\", f:parsenoop },\\n\\t0x0802: { n:\\\"BrtDecoupledPivotCacheID\\\", f:parsenoop },\\n\\t0x0803: { n:\\\"BrtBeginPivotTableRefs\\\", f:parsenoop },\\n\\t0x0804: { n:\\\"BrtEndPivotTableRefs\\\", f:parsenoop },\\n\\t0x0805: { n:\\\"BrtPivotTableRef\\\", f:parsenoop },\\n\\t0x0806: { n:\\\"BrtSlicerCacheBookPivotTables\\\", f:parsenoop },\\n\\t0x0807: { n:\\\"BrtBeginSxvcells\\\", f:parsenoop },\\n\\t0x0808: { n:\\\"BrtEndSxvcells\\\", f:parsenoop },\\n\\t0x0809: { n:\\\"BrtBeginSxRow\\\", f:parsenoop },\\n\\t0x080A: { n:\\\"BrtEndSxRow\\\", f:parsenoop },\\n\\t0x080C: { n:\\\"BrtPcdCalcMem15\\\", f:parsenoop },\\n\\t0x0813: { n:\\\"BrtQsi15\\\", f:parsenoop },\\n\\t0x0814: { n:\\\"BrtBeginWebExtensions\\\", f:parsenoop },\\n\\t0x0815: { n:\\\"BrtEndWebExtensions\\\", f:parsenoop },\\n\\t0x0816: { n:\\\"BrtWebExtension\\\", f:parsenoop },\\n\\t0x0817: { n:\\\"BrtAbsPath15\\\", f:parsenoop },\\n\\t0x0818: { n:\\\"BrtBeginPivotTableUISettings\\\", f:parsenoop },\\n\\t0x0819: { n:\\\"BrtEndPivotTableUISettings\\\", f:parsenoop },\\n\\t0x081B: { n:\\\"BrtTableSlicerCacheIDs\\\", f:parsenoop },\\n\\t0x081C: { n:\\\"BrtTableSlicerCacheID\\\", f:parsenoop },\\n\\t0x081D: { n:\\\"BrtBeginTableSlicerCache\\\", f:parsenoop },\\n\\t0x081E: { n:\\\"BrtEndTableSlicerCache\\\", f:parsenoop },\\n\\t0x081F: { n:\\\"BrtSxFilter15\\\", f:parsenoop },\\n\\t0x0820: { n:\\\"BrtBeginTimelineCachePivotCacheIDs\\\", f:parsenoop },\\n\\t0x0821: { n:\\\"BrtEndTimelineCachePivotCacheIDs\\\", f:parsenoop },\\n\\t0x0822: { n:\\\"BrtTimelineCachePivotCacheID\\\", f:parsenoop },\\n\\t0x0823: { n:\\\"BrtBeginTimelineCacheIDs\\\", f:parsenoop },\\n\\t0x0824: { n:\\\"BrtEndTimelineCacheIDs\\\", f:parsenoop },\\n\\t0x0825: { n:\\\"BrtBeginTimelineCacheID\\\", f:parsenoop },\\n\\t0x0826: { n:\\\"BrtEndTimelineCacheID\\\", f:parsenoop },\\n\\t0x0827: { n:\\\"BrtBeginTimelinesEx\\\", f:parsenoop },\\n\\t0x0828: { n:\\\"BrtEndTimelinesEx\\\", f:parsenoop },\\n\\t0x0829: { n:\\\"BrtBeginTimelineEx\\\", f:parsenoop },\\n\\t0x082A: { n:\\\"BrtEndTimelineEx\\\", f:parsenoop },\\n\\t0x082B: { n:\\\"BrtWorkBookPr15\\\", f:parsenoop },\\n\\t0x082C: { n:\\\"BrtPCDH15\\\", f:parsenoop },\\n\\t0x082D: { n:\\\"BrtBeginTimelineStyle\\\", f:parsenoop },\\n\\t0x082E: { n:\\\"BrtEndTimelineStyle\\\", f:parsenoop },\\n\\t0x082F: { n:\\\"BrtTimelineStyleElement\\\", f:parsenoop },\\n\\t0x0830: { n:\\\"BrtBeginTimelineStylesheetExt15\\\", f:parsenoop },\\n\\t0x0831: { n:\\\"BrtEndTimelineStylesheetExt15\\\", f:parsenoop },\\n\\t0x0832: { n:\\\"BrtBeginTimelineStyles\\\", f:parsenoop },\\n\\t0x0833: { n:\\\"BrtEndTimelineStyles\\\", f:parsenoop },\\n\\t0x0834: { n:\\\"BrtBeginTimelineStyleElements\\\", f:parsenoop },\\n\\t0x0835: { n:\\\"BrtEndTimelineStyleElements\\\", f:parsenoop },\\n\\t0x0836: { n:\\\"BrtDxf15\\\", f:parsenoop },\\n\\t0x0837: { n:\\\"BrtBeginDxfs15\\\", f:parsenoop },\\n\\t0x0838: { n:\\\"brtEndDxfs15\\\", f:parsenoop },\\n\\t0x0839: { n:\\\"BrtSlicerCacheHideItemsWithNoData\\\", f:parsenoop },\\n\\t0x083A: { n:\\\"BrtBeginItemUniqueNames\\\", f:parsenoop },\\n\\t0x083B: { n:\\\"BrtEndItemUniqueNames\\\", f:parsenoop },\\n\\t0x083C: { n:\\\"BrtItemUniqueName\\\", f:parsenoop },\\n\\t0x083D: { n:\\\"BrtBeginExtConn15\\\", f:parsenoop },\\n\\t0x083E: { n:\\\"BrtEndExtConn15\\\", f:parsenoop },\\n\\t0x083F: { n:\\\"BrtBeginOledbPr15\\\", f:parsenoop },\\n\\t0x0840: { n:\\\"BrtEndOledbPr15\\\", f:parsenoop },\\n\\t0x0841: { n:\\\"BrtBeginDataFeedPr15\\\", f:parsenoop },\\n\\t0x0842: { n:\\\"BrtEndDataFeedPr15\\\", f:parsenoop },\\n\\t0x0843: { n:\\\"BrtTextPr15\\\", f:parsenoop },\\n\\t0x0844: { n:\\\"BrtRangePr15\\\", f:parsenoop },\\n\\t0x0845: { n:\\\"BrtDbCommand15\\\", f:parsenoop },\\n\\t0x0846: { n:\\\"BrtBeginDbTables15\\\", f:parsenoop },\\n\\t0x0847: { n:\\\"BrtEndDbTables15\\\", f:parsenoop },\\n\\t0x0848: { n:\\\"BrtDbTable15\\\", f:parsenoop },\\n\\t0x0849: { n:\\\"BrtBeginDataModel\\\", f:parsenoop },\\n\\t0x084A: { n:\\\"BrtEndDataModel\\\", f:parsenoop },\\n\\t0x084B: { n:\\\"BrtBeginModelTables\\\", f:parsenoop },\\n\\t0x084C: { n:\\\"BrtEndModelTables\\\", f:parsenoop },\\n\\t0x084D: { n:\\\"BrtModelTable\\\", f:parsenoop },\\n\\t0x084E: { n:\\\"BrtBeginModelRelationships\\\", f:parsenoop },\\n\\t0x084F: { n:\\\"BrtEndModelRelationships\\\", f:parsenoop },\\n\\t0x0850: { n:\\\"BrtModelRelationship\\\", f:parsenoop },\\n\\t0x0851: { n:\\\"BrtBeginECTxtWiz15\\\", f:parsenoop },\\n\\t0x0852: { n:\\\"BrtEndECTxtWiz15\\\", f:parsenoop },\\n\\t0x0853: { n:\\\"BrtBeginECTWFldInfoLst15\\\", f:parsenoop },\\n\\t0x0854: { n:\\\"BrtEndECTWFldInfoLst15\\\", f:parsenoop },\\n\\t0x0855: { n:\\\"BrtBeginECTWFldInfo15\\\", f:parsenoop },\\n\\t0x0856: { n:\\\"BrtFieldListActiveItem\\\", f:parsenoop },\\n\\t0x0857: { n:\\\"BrtPivotCacheIdVersion\\\", f:parsenoop },\\n\\t0x0858: { n:\\\"BrtSXDI15\\\", f:parsenoop },\\n\\t0xFFFF: { n:\\\"\\\", f:parsenoop }\\n};\\n\\nvar evert_RE = evert_key(XLSBRecordEnum, 'n');\\n\\n/* [MS-XLS] 2.3 Record Enumeration */\\nvar XLSRecordEnum = {\\n\\t0x0003: { n:\\\"BIFF2NUM\\\", f:parse_BIFF2NUM },\\n\\t0x0004: { n:\\\"BIFF2STR\\\", f:parse_BIFF2STR },\\n\\t0x0006: { n:\\\"Formula\\\", f:parse_Formula },\\n\\t0x0009: { n:'BOF', f:parse_BOF },\\n\\t0x000a: { n:'EOF', f:parse_EOF },\\n\\t0x000c: { n:\\\"CalcCount\\\", f:parse_CalcCount },\\n\\t0x000d: { n:\\\"CalcMode\\\", f:parse_CalcMode },\\n\\t0x000e: { n:\\\"CalcPrecision\\\", f:parse_CalcPrecision },\\n\\t0x000f: { n:\\\"CalcRefMode\\\", f:parse_CalcRefMode },\\n\\t0x0010: { n:\\\"CalcDelta\\\", f:parse_CalcDelta },\\n\\t0x0011: { n:\\\"CalcIter\\\", f:parse_CalcIter },\\n\\t0x0012: { n:\\\"Protect\\\", f:parse_Protect },\\n\\t0x0013: { n:\\\"Password\\\", f:parse_Password },\\n\\t0x0014: { n:\\\"Header\\\", f:parse_Header },\\n\\t0x0015: { n:\\\"Footer\\\", f:parse_Footer },\\n\\t0x0017: { n:\\\"ExternSheet\\\", f:parse_ExternSheet },\\n\\t0x0018: { n:\\\"Lbl\\\", f:parse_Lbl },\\n\\t0x0019: { n:\\\"WinProtect\\\", f:parse_WinProtect },\\n\\t0x001a: { n:\\\"VerticalPageBreaks\\\", f:parse_VerticalPageBreaks },\\n\\t0x001b: { n:\\\"HorizontalPageBreaks\\\", f:parse_HorizontalPageBreaks },\\n\\t0x001c: { n:\\\"Note\\\", f:parse_Note },\\n\\t0x001d: { n:\\\"Selection\\\", f:parse_Selection },\\n\\t0x0022: { n:\\\"Date1904\\\", f:parse_Date1904 },\\n\\t0x0023: { n:\\\"ExternName\\\", f:parse_ExternName },\\n\\t0x0026: { n:\\\"LeftMargin\\\", f:parse_LeftMargin },\\n\\t0x0027: { n:\\\"RightMargin\\\", f:parse_RightMargin },\\n\\t0x0028: { n:\\\"TopMargin\\\", f:parse_TopMargin },\\n\\t0x0029: { n:\\\"BottomMargin\\\", f:parse_BottomMargin },\\n\\t0x002a: { n:\\\"PrintRowCol\\\", f:parse_PrintRowCol },\\n\\t0x002b: { n:\\\"PrintGrid\\\", f:parse_PrintGrid },\\n\\t0x002f: { n:\\\"FilePass\\\", f:parse_FilePass },\\n\\t0x0031: { n:\\\"Font\\\", f:parse_Font },\\n\\t0x0033: { n:\\\"PrintSize\\\", f:parse_PrintSize },\\n\\t0x003c: { n:\\\"Continue\\\", f:parse_Continue },\\n\\t0x003d: { n:\\\"Window1\\\", f:parse_Window1 },\\n\\t0x0040: { n:\\\"Backup\\\", f:parse_Backup },\\n\\t0x0041: { n:\\\"Pane\\\", f:parse_Pane },\\n\\t0x0042: { n:'CodePage', f:parse_CodePage },\\n\\t0x004d: { n:\\\"Pls\\\", f:parse_Pls },\\n\\t0x0050: { n:\\\"DCon\\\", f:parse_DCon },\\n\\t0x0051: { n:\\\"DConRef\\\", f:parse_DConRef },\\n\\t0x0052: { n:\\\"DConName\\\", f:parse_DConName },\\n\\t0x0055: { n:\\\"DefColWidth\\\", f:parse_DefColWidth },\\n\\t0x0059: { n:\\\"XCT\\\", f:parse_XCT },\\n\\t0x005a: { n:\\\"CRN\\\", f:parse_CRN },\\n\\t0x005b: { n:\\\"FileSharing\\\", f:parse_FileSharing },\\n\\t0x005c: { n:'WriteAccess', f:parse_WriteAccess },\\n\\t0x005d: { n:\\\"Obj\\\", f:parse_Obj },\\n\\t0x005e: { n:\\\"Uncalced\\\", f:parse_Uncalced },\\n\\t0x005f: { n:\\\"CalcSaveRecalc\\\", f:parse_CalcSaveRecalc },\\n\\t0x0060: { n:\\\"Template\\\", f:parse_Template },\\n\\t0x0061: { n:\\\"Intl\\\", f:parse_Intl },\\n\\t0x0063: { n:\\\"ObjProtect\\\", f:parse_ObjProtect },\\n\\t0x007d: { n:\\\"ColInfo\\\", f:parse_ColInfo },\\n\\t0x0080: { n:\\\"Guts\\\", f:parse_Guts },\\n\\t0x0081: { n:\\\"WsBool\\\", f:parse_WsBool },\\n\\t0x0082: { n:\\\"GridSet\\\", f:parse_GridSet },\\n\\t0x0083: { n:\\\"HCenter\\\", f:parse_HCenter },\\n\\t0x0084: { n:\\\"VCenter\\\", f:parse_VCenter },\\n\\t0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 },\\n\\t0x0086: { n:\\\"WriteProtect\\\", f:parse_WriteProtect },\\n\\t0x008c: { n:\\\"Country\\\", f:parse_Country },\\n\\t0x008d: { n:\\\"HideObj\\\", f:parse_HideObj },\\n\\t0x0090: { n:\\\"Sort\\\", f:parse_Sort },\\n\\t0x0092: { n:\\\"Palette\\\", f:parse_Palette },\\n\\t0x0097: { n:\\\"Sync\\\", f:parse_Sync },\\n\\t0x0098: { n:\\\"LPr\\\", f:parse_LPr },\\n\\t0x0099: { n:\\\"DxGCol\\\", f:parse_DxGCol },\\n\\t0x009a: { n:\\\"FnGroupName\\\", f:parse_FnGroupName },\\n\\t0x009b: { n:\\\"FilterMode\\\", f:parse_FilterMode },\\n\\t0x009c: { n:\\\"BuiltInFnGroupCount\\\", f:parse_BuiltInFnGroupCount },\\n\\t0x009d: { n:\\\"AutoFilterInfo\\\", f:parse_AutoFilterInfo },\\n\\t0x009e: { n:\\\"AutoFilter\\\", f:parse_AutoFilter },\\n\\t0x00a0: { n:\\\"Scl\\\", f:parse_Scl },\\n\\t0x00a1: { n:\\\"Setup\\\", f:parse_Setup },\\n\\t0x00ae: { n:\\\"ScenMan\\\", f:parse_ScenMan },\\n\\t0x00af: { n:\\\"SCENARIO\\\", f:parse_SCENARIO },\\n\\t0x00b0: { n:\\\"SxView\\\", f:parse_SxView },\\n\\t0x00b1: { n:\\\"Sxvd\\\", f:parse_Sxvd },\\n\\t0x00b2: { n:\\\"SXVI\\\", f:parse_SXVI },\\n\\t0x00b4: { n:\\\"SxIvd\\\", f:parse_SxIvd },\\n\\t0x00b5: { n:\\\"SXLI\\\", f:parse_SXLI },\\n\\t0x00b6: { n:\\\"SXPI\\\", f:parse_SXPI },\\n\\t0x00b8: { n:\\\"DocRoute\\\", f:parse_DocRoute },\\n\\t0x00b9: { n:\\\"RecipName\\\", f:parse_RecipName },\\n\\t0x00bd: { n:\\\"MulRk\\\", f:parse_MulRk },\\n\\t0x00be: { n:\\\"MulBlank\\\", f:parse_MulBlank },\\n\\t0x00c1: { n:'Mms', f:parse_Mms },\\n\\t0x00c5: { n:\\\"SXDI\\\", f:parse_SXDI },\\n\\t0x00c6: { n:\\\"SXDB\\\", f:parse_SXDB },\\n\\t0x00c7: { n:\\\"SXFDB\\\", f:parse_SXFDB },\\n\\t0x00c8: { n:\\\"SXDBB\\\", f:parse_SXDBB },\\n\\t0x00c9: { n:\\\"SXNum\\\", f:parse_SXNum },\\n\\t0x00ca: { n:\\\"SxBool\\\", f:parse_SxBool },\\n\\t0x00cb: { n:\\\"SxErr\\\", f:parse_SxErr },\\n\\t0x00cc: { n:\\\"SXInt\\\", f:parse_SXInt },\\n\\t0x00cd: { n:\\\"SXString\\\", f:parse_SXString },\\n\\t0x00ce: { n:\\\"SXDtr\\\", f:parse_SXDtr },\\n\\t0x00cf: { n:\\\"SxNil\\\", f:parse_SxNil },\\n\\t0x00d0: { n:\\\"SXTbl\\\", f:parse_SXTbl },\\n\\t0x00d1: { n:\\\"SXTBRGIITM\\\", f:parse_SXTBRGIITM },\\n\\t0x00d2: { n:\\\"SxTbpg\\\", f:parse_SxTbpg },\\n\\t0x00d3: { n:\\\"ObProj\\\", f:parse_ObProj },\\n\\t0x00d5: { n:\\\"SXStreamID\\\", f:parse_SXStreamID },\\n\\t0x00d7: { n:\\\"DBCell\\\", f:parse_DBCell },\\n\\t0x00d8: { n:\\\"SXRng\\\", f:parse_SXRng },\\n\\t0x00d9: { n:\\\"SxIsxoper\\\", f:parse_SxIsxoper },\\n\\t0x00da: { n:\\\"BookBool\\\", f:parse_BookBool },\\n\\t0x00dc: { n:\\\"DbOrParamQry\\\", f:parse_DbOrParamQry },\\n\\t0x00dd: { n:\\\"ScenarioProtect\\\", f:parse_ScenarioProtect },\\n\\t0x00de: { n:\\\"OleObjectSize\\\", f:parse_OleObjectSize },\\n\\t0x00e0: { n:\\\"XF\\\", f:parse_XF },\\n\\t0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr },\\n\\t0x00e2: { n:'InterfaceEnd', f:parse_InterfaceEnd },\\n\\t0x00e3: { n:\\\"SXVS\\\", f:parse_SXVS },\\n\\t0x00e5: { n:\\\"MergeCells\\\", f:parse_MergeCells },\\n\\t0x00e9: { n:\\\"BkHim\\\", f:parse_BkHim },\\n\\t0x00eb: { n:\\\"MsoDrawingGroup\\\", f:parse_MsoDrawingGroup },\\n\\t0x00ec: { n:\\\"MsoDrawing\\\", f:parse_MsoDrawing },\\n\\t0x00ed: { n:\\\"MsoDrawingSelection\\\", f:parse_MsoDrawingSelection },\\n\\t0x00ef: { n:\\\"PhoneticInfo\\\", f:parse_PhoneticInfo },\\n\\t0x00f0: { n:\\\"SxRule\\\", f:parse_SxRule },\\n\\t0x00f1: { n:\\\"SXEx\\\", f:parse_SXEx },\\n\\t0x00f2: { n:\\\"SxFilt\\\", f:parse_SxFilt },\\n\\t0x00f4: { n:\\\"SxDXF\\\", f:parse_SxDXF },\\n\\t0x00f5: { n:\\\"SxItm\\\", f:parse_SxItm },\\n\\t0x00f6: { n:\\\"SxName\\\", f:parse_SxName },\\n\\t0x00f7: { n:\\\"SxSelect\\\", f:parse_SxSelect },\\n\\t0x00f8: { n:\\\"SXPair\\\", f:parse_SXPair },\\n\\t0x00f9: { n:\\\"SxFmla\\\", f:parse_SxFmla },\\n\\t0x00fb: { n:\\\"SxFormat\\\", f:parse_SxFormat },\\n\\t0x00fc: { n:\\\"SST\\\", f:parse_SST },\\n\\t0x00fd: { n:\\\"LabelSst\\\", f:parse_LabelSst },\\n\\t0x00ff: { n:\\\"ExtSST\\\", f:parse_ExtSST },\\n\\t0x0100: { n:\\\"SXVDEx\\\", f:parse_SXVDEx },\\n\\t0x0103: { n:\\\"SXFormula\\\", f:parse_SXFormula },\\n\\t0x0122: { n:\\\"SXDBEx\\\", f:parse_SXDBEx },\\n\\t0x0137: { n:\\\"RRDInsDel\\\", f:parse_RRDInsDel },\\n\\t0x0138: { n:\\\"RRDHead\\\", f:parse_RRDHead },\\n\\t0x013b: { n:\\\"RRDChgCell\\\", f:parse_RRDChgCell },\\n\\t0x013d: { n:\\\"RRTabId\\\", f:parse_RRTabId },\\n\\t0x013e: { n:\\\"RRDRenSheet\\\", f:parse_RRDRenSheet },\\n\\t0x013f: { n:\\\"RRSort\\\", f:parse_RRSort },\\n\\t0x0140: { n:\\\"RRDMove\\\", f:parse_RRDMove },\\n\\t0x014a: { n:\\\"RRFormat\\\", f:parse_RRFormat },\\n\\t0x014b: { n:\\\"RRAutoFmt\\\", f:parse_RRAutoFmt },\\n\\t0x014d: { n:\\\"RRInsertSh\\\", f:parse_RRInsertSh },\\n\\t0x014e: { n:\\\"RRDMoveBegin\\\", f:parse_RRDMoveBegin },\\n\\t0x014f: { n:\\\"RRDMoveEnd\\\", f:parse_RRDMoveEnd },\\n\\t0x0150: { n:\\\"RRDInsDelBegin\\\", f:parse_RRDInsDelBegin },\\n\\t0x0151: { n:\\\"RRDInsDelEnd\\\", f:parse_RRDInsDelEnd },\\n\\t0x0152: { n:\\\"RRDConflict\\\", f:parse_RRDConflict },\\n\\t0x0153: { n:\\\"RRDDefName\\\", f:parse_RRDDefName },\\n\\t0x0154: { n:\\\"RRDRstEtxp\\\", f:parse_RRDRstEtxp },\\n\\t0x015f: { n:\\\"LRng\\\", f:parse_LRng },\\n\\t0x0160: { n:\\\"UsesELFs\\\", f:parse_UsesELFs },\\n\\t0x0161: { n:\\\"DSF\\\", f:parse_DSF },\\n\\t0x0191: { n:\\\"CUsr\\\", f:parse_CUsr },\\n\\t0x0192: { n:\\\"CbUsr\\\", f:parse_CbUsr },\\n\\t0x0193: { n:\\\"UsrInfo\\\", f:parse_UsrInfo },\\n\\t0x0194: { n:\\\"UsrExcl\\\", f:parse_UsrExcl },\\n\\t0x0195: { n:\\\"FileLock\\\", f:parse_FileLock },\\n\\t0x0196: { n:\\\"RRDInfo\\\", f:parse_RRDInfo },\\n\\t0x0197: { n:\\\"BCUsrs\\\", f:parse_BCUsrs },\\n\\t0x0198: { n:\\\"UsrChk\\\", f:parse_UsrChk },\\n\\t0x01a9: { n:\\\"UserBView\\\", f:parse_UserBView },\\n\\t0x01aa: { n:\\\"UserSViewBegin\\\", f:parse_UserSViewBegin },\\n\\t0x01ab: { n:\\\"UserSViewEnd\\\", f:parse_UserSViewEnd },\\n\\t0x01ac: { n:\\\"RRDUserView\\\", f:parse_RRDUserView },\\n\\t0x01ad: { n:\\\"Qsi\\\", f:parse_Qsi },\\n\\t0x01ae: { n:\\\"SupBook\\\", f:parse_SupBook },\\n\\t0x01af: { n:\\\"Prot4Rev\\\", f:parse_Prot4Rev },\\n\\t0x01b0: { n:\\\"CondFmt\\\", f:parse_CondFmt },\\n\\t0x01b1: { n:\\\"CF\\\", f:parse_CF },\\n\\t0x01b2: { n:\\\"DVal\\\", f:parse_DVal },\\n\\t0x01b5: { n:\\\"DConBin\\\", f:parse_DConBin },\\n\\t0x01b6: { n:\\\"TxO\\\", f:parse_TxO },\\n\\t0x01b7: { n:\\\"RefreshAll\\\", f:parse_RefreshAll },\\n\\t0x01b8: { n:\\\"HLink\\\", f:parse_HLink },\\n\\t0x01b9: { n:\\\"Lel\\\", f:parse_Lel },\\n\\t0x01ba: { n:\\\"CodeName\\\", f:parse_XLSCodeName },\\n\\t0x01bb: { n:\\\"SXFDBType\\\", f:parse_SXFDBType },\\n\\t0x01bc: { n:\\\"Prot4RevPass\\\", f:parse_Prot4RevPass },\\n\\t0x01bd: { n:\\\"ObNoMacros\\\", f:parse_ObNoMacros },\\n\\t0x01be: { n:\\\"Dv\\\", f:parse_Dv },\\n\\t0x01c0: { n:\\\"Excel9File\\\", f:parse_Excel9File },\\n\\t0x01c1: { n:\\\"RecalcId\\\", f:parse_RecalcId, r:2},\\n\\t0x01c2: { n:\\\"EntExU2\\\", f:parse_EntExU2 },\\n\\t0x0200: { n:\\\"Dimensions\\\", f:parse_Dimensions },\\n\\t0x0201: { n:\\\"Blank\\\", f:parse_Blank },\\n\\t0x0203: { n:\\\"Number\\\", f:parse_Number },\\n\\t0x0204: { n:\\\"Label\\\", f:parse_Label },\\n\\t0x0205: { n:\\\"BoolErr\\\", f:parse_BoolErr },\\n\\t0x0207: { n:\\\"String\\\", f:parse_String },\\n\\t0x0208: { n:'Row', f:parse_Row },\\n\\t0x020b: { n:\\\"Index\\\", f:parse_Index },\\n\\t0x0221: { n:\\\"Array\\\", f:parse_Array },\\n\\t0x0225: { n:\\\"DefaultRowHeight\\\", f:parse_DefaultRowHeight },\\n\\t0x0236: { n:\\\"Table\\\", f:parse_Table },\\n\\t0x023e: { n:\\\"Window2\\\", f:parse_Window2 },\\n\\t0x027e: { n:\\\"RK\\\", f:parse_RK },\\n\\t0x0293: { n:\\\"Style\\\", f:parse_Style },\\n\\t0x0418: { n:\\\"BigName\\\", f:parse_BigName },\\n\\t0x041e: { n:\\\"Format\\\", f:parse_Format },\\n\\t0x043c: { n:\\\"ContinueBigName\\\", f:parse_ContinueBigName },\\n\\t0x04bc: { n:\\\"ShrFmla\\\", f:parse_ShrFmla },\\n\\t0x0800: { n:\\\"HLinkTooltip\\\", f:parse_HLinkTooltip },\\n\\t0x0801: { n:\\\"WebPub\\\", f:parse_WebPub },\\n\\t0x0802: { n:\\\"QsiSXTag\\\", f:parse_QsiSXTag },\\n\\t0x0803: { n:\\\"DBQueryExt\\\", f:parse_DBQueryExt },\\n\\t0x0804: { n:\\\"ExtString\\\", f:parse_ExtString },\\n\\t0x0805: { n:\\\"TxtQry\\\", f:parse_TxtQry },\\n\\t0x0806: { n:\\\"Qsir\\\", f:parse_Qsir },\\n\\t0x0807: { n:\\\"Qsif\\\", f:parse_Qsif },\\n\\t0x0808: { n:\\\"RRDTQSIF\\\", f:parse_RRDTQSIF },\\n\\t0x0809: { n:'BOF', f:parse_BOF },\\n\\t0x080a: { n:\\\"OleDbConn\\\", f:parse_OleDbConn },\\n\\t0x080b: { n:\\\"WOpt\\\", f:parse_WOpt },\\n\\t0x080c: { n:\\\"SXViewEx\\\", f:parse_SXViewEx },\\n\\t0x080d: { n:\\\"SXTH\\\", f:parse_SXTH },\\n\\t0x080e: { n:\\\"SXPIEx\\\", f:parse_SXPIEx },\\n\\t0x080f: { n:\\\"SXVDTEx\\\", f:parse_SXVDTEx },\\n\\t0x0810: { n:\\\"SXViewEx9\\\", f:parse_SXViewEx9 },\\n\\t0x0812: { n:\\\"ContinueFrt\\\", f:parse_ContinueFrt },\\n\\t0x0813: { n:\\\"RealTimeData\\\", f:parse_RealTimeData },\\n\\t0x0850: { n:\\\"ChartFrtInfo\\\", f:parse_ChartFrtInfo },\\n\\t0x0851: { n:\\\"FrtWrapper\\\", f:parse_FrtWrapper },\\n\\t0x0852: { n:\\\"StartBlock\\\", f:parse_StartBlock },\\n\\t0x0853: { n:\\\"EndBlock\\\", f:parse_EndBlock },\\n\\t0x0854: { n:\\\"StartObject\\\", f:parse_StartObject },\\n\\t0x0855: { n:\\\"EndObject\\\", f:parse_EndObject },\\n\\t0x0856: { n:\\\"CatLab\\\", f:parse_CatLab },\\n\\t0x0857: { n:\\\"YMult\\\", f:parse_YMult },\\n\\t0x0858: { n:\\\"SXViewLink\\\", f:parse_SXViewLink },\\n\\t0x0859: { n:\\\"PivotChartBits\\\", f:parse_PivotChartBits },\\n\\t0x085a: { n:\\\"FrtFontList\\\", f:parse_FrtFontList },\\n\\t0x0862: { n:\\\"SheetExt\\\", f:parse_SheetExt },\\n\\t0x0863: { n:\\\"BookExt\\\", f:parse_BookExt, r:12},\\n\\t0x0864: { n:\\\"SXAddl\\\", f:parse_SXAddl },\\n\\t0x0865: { n:\\\"CrErr\\\", f:parse_CrErr },\\n\\t0x0866: { n:\\\"HFPicture\\\", f:parse_HFPicture },\\n\\t0x0867: { n:'FeatHdr', f:parse_FeatHdr },\\n\\t0x0868: { n:\\\"Feat\\\", f:parse_Feat },\\n\\t0x086a: { n:\\\"DataLabExt\\\", f:parse_DataLabExt },\\n\\t0x086b: { n:\\\"DataLabExtContents\\\", f:parse_DataLabExtContents },\\n\\t0x086c: { n:\\\"CellWatch\\\", f:parse_CellWatch },\\n\\t0x0871: { n:\\\"FeatHdr11\\\", f:parse_FeatHdr11 },\\n\\t0x0872: { n:\\\"Feature11\\\", f:parse_Feature11 },\\n\\t0x0874: { n:\\\"DropDownObjIds\\\", f:parse_DropDownObjIds },\\n\\t0x0875: { n:\\\"ContinueFrt11\\\", f:parse_ContinueFrt11 },\\n\\t0x0876: { n:\\\"DConn\\\", f:parse_DConn },\\n\\t0x0877: { n:\\\"List12\\\", f:parse_List12 },\\n\\t0x0878: { n:\\\"Feature12\\\", f:parse_Feature12 },\\n\\t0x0879: { n:\\\"CondFmt12\\\", f:parse_CondFmt12 },\\n\\t0x087a: { n:\\\"CF12\\\", f:parse_CF12 },\\n\\t0x087b: { n:\\\"CFEx\\\", f:parse_CFEx },\\n\\t0x087c: { n:\\\"XFCRC\\\", f:parse_XFCRC, r:12 },\\n\\t0x087d: { n:\\\"XFExt\\\", f:parse_XFExt, r:12 },\\n\\t0x087e: { n:\\\"AutoFilter12\\\", f:parse_AutoFilter12 },\\n\\t0x087f: { n:\\\"ContinueFrt12\\\", f:parse_ContinueFrt12 },\\n\\t0x0884: { n:\\\"MDTInfo\\\", f:parse_MDTInfo },\\n\\t0x0885: { n:\\\"MDXStr\\\", f:parse_MDXStr },\\n\\t0x0886: { n:\\\"MDXTuple\\\", f:parse_MDXTuple },\\n\\t0x0887: { n:\\\"MDXSet\\\", f:parse_MDXSet },\\n\\t0x0888: { n:\\\"MDXProp\\\", f:parse_MDXProp },\\n\\t0x0889: { n:\\\"MDXKPI\\\", f:parse_MDXKPI },\\n\\t0x088a: { n:\\\"MDB\\\", f:parse_MDB },\\n\\t0x088b: { n:\\\"PLV\\\", f:parse_PLV },\\n\\t0x088c: { n:\\\"Compat12\\\", f:parse_Compat12, r:12 },\\n\\t0x088d: { n:\\\"DXF\\\", f:parse_DXF },\\n\\t0x088e: { n:\\\"TableStyles\\\", f:parse_TableStyles, r:12 },\\n\\t0x088f: { n:\\\"TableStyle\\\", f:parse_TableStyle },\\n\\t0x0890: { n:\\\"TableStyleElement\\\", f:parse_TableStyleElement },\\n\\t0x0892: { n:\\\"StyleExt\\\", f:parse_StyleExt },\\n\\t0x0893: { n:\\\"NamePublish\\\", f:parse_NamePublish },\\n\\t0x0894: { n:\\\"NameCmt\\\", f:parse_NameCmt },\\n\\t0x0895: { n:\\\"SortData\\\", f:parse_SortData },\\n\\t0x0896: { n:\\\"Theme\\\", f:parse_Theme, r:12 },\\n\\t0x0897: { n:\\\"GUIDTypeLib\\\", f:parse_GUIDTypeLib },\\n\\t0x0898: { n:\\\"FnGrp12\\\", f:parse_FnGrp12 },\\n\\t0x0899: { n:\\\"NameFnGrp12\\\", f:parse_NameFnGrp12 },\\n\\t0x089a: { n:\\\"MTRSettings\\\", f:parse_MTRSettings, r:12 },\\n\\t0x089b: { n:\\\"CompressPictures\\\", f:parse_CompressPictures },\\n\\t0x089c: { n:\\\"HeaderFooter\\\", f:parse_HeaderFooter },\\n\\t0x089d: { n:\\\"CrtLayout12\\\", f:parse_CrtLayout12 },\\n\\t0x089e: { n:\\\"CrtMlFrt\\\", f:parse_CrtMlFrt },\\n\\t0x089f: { n:\\\"CrtMlFrtContinue\\\", f:parse_CrtMlFrtContinue },\\n\\t0x08a3: { n:\\\"ForceFullCalculation\\\", f:parse_ForceFullCalculation },\\n\\t0x08a4: { n:\\\"ShapePropsStream\\\", f:parse_ShapePropsStream },\\n\\t0x08a5: { n:\\\"TextPropsStream\\\", f:parse_TextPropsStream },\\n\\t0x08a6: { n:\\\"RichTextStream\\\", f:parse_RichTextStream },\\n\\t0x08a7: { n:\\\"CrtLayout12A\\\", f:parse_CrtLayout12A },\\n\\t0x1001: { n:\\\"Units\\\", f:parse_Units },\\n\\t0x1002: { n:\\\"Chart\\\", f:parse_Chart },\\n\\t0x1003: { n:\\\"Series\\\", f:parse_Series },\\n\\t0x1006: { n:\\\"DataFormat\\\", f:parse_DataFormat },\\n\\t0x1007: { n:\\\"LineFormat\\\", f:parse_LineFormat },\\n\\t0x1009: { n:\\\"MarkerFormat\\\", f:parse_MarkerFormat },\\n\\t0x100a: { n:\\\"AreaFormat\\\", f:parse_AreaFormat },\\n\\t0x100b: { n:\\\"PieFormat\\\", f:parse_PieFormat },\\n\\t0x100c: { n:\\\"AttachedLabel\\\", f:parse_AttachedLabel },\\n\\t0x100d: { n:\\\"SeriesText\\\", f:parse_SeriesText },\\n\\t0x1014: { n:\\\"ChartFormat\\\", f:parse_ChartFormat },\\n\\t0x1015: { n:\\\"Legend\\\", f:parse_Legend },\\n\\t0x1016: { n:\\\"SeriesList\\\", f:parse_SeriesList },\\n\\t0x1017: { n:\\\"Bar\\\", f:parse_Bar },\\n\\t0x1018: { n:\\\"Line\\\", f:parse_Line },\\n\\t0x1019: { n:\\\"Pie\\\", f:parse_Pie },\\n\\t0x101a: { n:\\\"Area\\\", f:parse_Area },\\n\\t0x101b: { n:\\\"Scatter\\\", f:parse_Scatter },\\n\\t0x101c: { n:\\\"CrtLine\\\", f:parse_CrtLine },\\n\\t0x101d: { n:\\\"Axis\\\", f:parse_Axis },\\n\\t0x101e: { n:\\\"Tick\\\", f:parse_Tick },\\n\\t0x101f: { n:\\\"ValueRange\\\", f:parse_ValueRange },\\n\\t0x1020: { n:\\\"CatSerRange\\\", f:parse_CatSerRange },\\n\\t0x1021: { n:\\\"AxisLine\\\", f:parse_AxisLine },\\n\\t0x1022: { n:\\\"CrtLink\\\", f:parse_CrtLink },\\n\\t0x1024: { n:\\\"DefaultText\\\", f:parse_DefaultText },\\n\\t0x1025: { n:\\\"Text\\\", f:parse_Text },\\n\\t0x1026: { n:\\\"FontX\\\", f:parse_FontX },\\n\\t0x1027: { n:\\\"ObjectLink\\\", f:parse_ObjectLink },\\n\\t0x1032: { n:\\\"Frame\\\", f:parse_Frame },\\n\\t0x1033: { n:\\\"Begin\\\", f:parse_Begin },\\n\\t0x1034: { n:\\\"End\\\", f:parse_End },\\n\\t0x1035: { n:\\\"PlotArea\\\", f:parse_PlotArea },\\n\\t0x103a: { n:\\\"Chart3d\\\", f:parse_Chart3d },\\n\\t0x103c: { n:\\\"PicF\\\", f:parse_PicF },\\n\\t0x103d: { n:\\\"DropBar\\\", f:parse_DropBar },\\n\\t0x103e: { n:\\\"Radar\\\", f:parse_Radar },\\n\\t0x103f: { n:\\\"Surf\\\", f:parse_Surf },\\n\\t0x1040: { n:\\\"RadarArea\\\", f:parse_RadarArea },\\n\\t0x1041: { n:\\\"AxisParent\\\", f:parse_AxisParent },\\n\\t0x1043: { n:\\\"LegendException\\\", f:parse_LegendException },\\n\\t0x1044: { n:\\\"ShtProps\\\", f:parse_ShtProps },\\n\\t0x1045: { n:\\\"SerToCrt\\\", f:parse_SerToCrt },\\n\\t0x1046: { n:\\\"AxesUsed\\\", f:parse_AxesUsed },\\n\\t0x1048: { n:\\\"SBaseRef\\\", f:parse_SBaseRef },\\n\\t0x104a: { n:\\\"SerParent\\\", f:parse_SerParent },\\n\\t0x104b: { n:\\\"SerAuxTrend\\\", f:parse_SerAuxTrend },\\n\\t0x104e: { n:\\\"IFmtRecord\\\", f:parse_IFmtRecord },\\n\\t0x104f: { n:\\\"Pos\\\", f:parse_Pos },\\n\\t0x1050: { n:\\\"AlRuns\\\", f:parse_AlRuns },\\n\\t0x1051: { n:\\\"BRAI\\\", f:parse_BRAI },\\n\\t0x105b: { n:\\\"SerAuxErrBar\\\", f:parse_SerAuxErrBar },\\n\\t0x105c: { n:\\\"ClrtClient\\\", f:parse_ClrtClient },\\n\\t0x105d: { n:\\\"SerFmt\\\", f:parse_SerFmt },\\n\\t0x105f: { n:\\\"Chart3DBarShape\\\", f:parse_Chart3DBarShape },\\n\\t0x1060: { n:\\\"Fbi\\\", f:parse_Fbi },\\n\\t0x1061: { n:\\\"BopPop\\\", f:parse_BopPop },\\n\\t0x1062: { n:\\\"AxcExt\\\", f:parse_AxcExt },\\n\\t0x1063: { n:\\\"Dat\\\", f:parse_Dat },\\n\\t0x1064: { n:\\\"PlotGrowth\\\", f:parse_PlotGrowth },\\n\\t0x1065: { n:\\\"SIIndex\\\", f:parse_SIIndex },\\n\\t0x1066: { n:\\\"GelFrame\\\", f:parse_GelFrame },\\n\\t0x1067: { n:\\\"BopPopCustom\\\", f:parse_BopPopCustom },\\n\\t0x1068: { n:\\\"Fbi2\\\", f:parse_Fbi2 },\\n\\n\\t/* These are specified in an older version of the spec */\\n\\t0x0016: { n:\\\"ExternCount\\\", f:parsenoop },\\n\\t0x007e: { n:\\\"RK\\\", f:parsenoop }, /* Not necessarily same as 0x027e */\\n\\t0x007f: { n:\\\"ImData\\\", f:parsenoop },\\n\\t0x0087: { n:\\\"Addin\\\", f:parsenoop },\\n\\t0x0088: { n:\\\"Edg\\\", f:parsenoop },\\n\\t0x0089: { n:\\\"Pub\\\", f:parsenoop },\\n\\t0x0091: { n:\\\"Sub\\\", f:parsenoop },\\n\\t0x0094: { n:\\\"LHRecord\\\", f:parsenoop },\\n\\t0x0095: { n:\\\"LHNGraph\\\", f:parsenoop },\\n\\t0x0096: { n:\\\"Sound\\\", f:parsenoop },\\n\\t0x00a9: { n:\\\"CoordList\\\", f:parsenoop },\\n\\t0x00ab: { n:\\\"GCW\\\", f:parsenoop },\\n\\t0x00bc: { n:\\\"ShrFmla\\\", f:parsenoop }, /* Not necessarily same as 0x04bc */\\n\\t0x00c2: { n:\\\"AddMenu\\\", f:parsenoop },\\n\\t0x00c3: { n:\\\"DelMenu\\\", f:parsenoop },\\n\\t0x00d6: { n:\\\"RString\\\", f:parsenoop },\\n\\t0x00df: { n:\\\"UDDesc\\\", f:parsenoop },\\n\\t0x00ea: { n:\\\"TabIdConf\\\", f:parsenoop },\\n\\t0x0162: { n:\\\"XL5Modify\\\", f:parsenoop },\\n\\t0x01a5: { n:\\\"FileSharing2\\\", f:parsenoop },\\n\\t0x0218: { n:\\\"Name\\\", f:parsenoop },\\n\\t0x0223: { n:\\\"ExternName\\\", f:parse_ExternName },\\n\\t0x0231: { n:\\\"Font\\\", f:parsenoop },\\n\\t0x0406: { n:\\\"Formula\\\", f:parse_Formula },\\n\\t0x086d: { n:\\\"FeatInfo\\\", f:parsenoop },\\n\\t0x0873: { n:\\\"FeatInfo11\\\", f:parsenoop },\\n\\t0x0881: { n:\\\"SXAddl12\\\", f:parsenoop },\\n\\t0x08c0: { n:\\\"AutoWebPub\\\", f:parsenoop },\\n\\t0x08c1: { n:\\\"ListObj\\\", f:parsenoop },\\n\\t0x08c2: { n:\\\"ListField\\\", f:parsenoop },\\n\\t0x08c3: { n:\\\"ListDV\\\", f:parsenoop },\\n\\t0x08c4: { n:\\\"ListCondFmt\\\", f:parsenoop },\\n\\t0x08c5: { n:\\\"ListCF\\\", f:parsenoop },\\n\\t0x08c6: { n:\\\"FMQry\\\", f:parsenoop },\\n\\t0x08c7: { n:\\\"FMSQry\\\", f:parsenoop },\\n\\t0x08c8: { n:\\\"PLV\\\", f:parsenoop }, /* supposedly PLV for Excel 11 */\\n\\t0x08c9: { n:\\\"LnExt\\\", f:parsenoop },\\n\\t0x08ca: { n:\\\"MkrExt\\\", f:parsenoop },\\n\\t0x08cb: { n:\\\"CrtCoopt\\\", f:parsenoop },\\n\\n\\t0x0000: {}\\n};\\n\\n\\n/* Helper function to call out to ODS parser */\\nfunction parse_ods(zip, opts) {\\n\\tif(typeof module !== \\\"undefined\\\" && typeof require !== 'undefined' && typeof ODS === 'undefined') ODS = require('./od' + 's');\\n\\tif(typeof ODS === 'undefined' || !ODS.parse_ods) throw new Error(\\\"Unsupported ODS\\\");\\n\\treturn ODS.parse_ods(zip, opts);\\n}\\nfunction fix_opts_func(defaults) {\\n\\treturn function fix_opts(opts) {\\n\\t\\tfor(var i = 0; i != defaults.length; ++i) {\\n\\t\\t\\tvar d = defaults[i];\\n\\t\\t\\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\\n\\t\\t\\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\\n\\t\\t}\\n\\t};\\n}\\n\\nvar fix_read_opts = fix_opts_func([\\n\\t['cellNF', false], /* emit cell number format string as .z */\\n\\t['cellHTML', true], /* emit html string as .h */\\n\\t['cellFormula', true], /* emit formulae as .f */\\n\\t['cellStyles', false], /* emits style/theme as .s */\\n\\t['cellDates', false], /* emit date cells with type `d` */\\n\\n\\t['sheetStubs', false], /* emit empty cells */\\n\\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\\n\\n\\t['bookDeps', false], /* parse calculation chains */\\n\\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\\n\\t['bookProps', false], /* only try to get properties (no Sheets) */\\n\\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\\n\\t['bookVBA', false], /* include vba raw data (vbaraw) */\\n\\n\\t['password',''], /* password */\\n\\t['WTF', false] /* WTF mode (throws errors) */\\n]);\\n\\n\\nvar fix_write_opts = fix_opts_func([\\n\\t['cellDates', false], /* write date cells with type `d` */\\n\\n\\t['bookSST', false], /* Generate Shared String Table */\\n\\n\\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\\n\\n\\t['WTF', false] /* WTF mode (throws errors) */\\n]);\\nfunction safe_parse_wbrels(wbrels, sheets) {\\n\\tif(!wbrels) return 0;\\n\\ttry {\\n\\t\\twbrels = sheets.map(function pwbr(w) { return [w.name, wbrels['!id'][w.id].Target]; });\\n\\t} catch(e) { return null; }\\n\\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\\n}\\n\\nfunction safe_parse_ws(zip, path, relsPath, sheet, sheetRels, sheets, opts) {\\n\\ttry {\\n\\t\\tsheetRels[sheet]=parse_rels(getzipdata(zip, relsPath, true), path);\\n\\t\\tsheets[sheet]=parse_ws(getzipdata(zip, path),path,opts,sheetRels[sheet]);\\n\\t} catch(e) { if(opts.WTF) throw e; }\\n}\\n\\nvar nodirs = function nodirs(x){return x.substr(-1) != '/';};\\nfunction parse_zip(zip, opts) {\\n\\tmake_ssf(SSF);\\n\\topts = opts || {};\\n\\tfix_read_opts(opts);\\n\\treset_cp();\\n\\n\\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\\n\\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\\n\\n\\tvar entries = keys(zip.files).filter(nodirs).sort();\\n\\tvar dir = parse_ct(getzipdata(zip, '[Content_Types].xml'), opts);\\n\\tvar xlsb = false;\\n\\tvar sheets, binname;\\n\\tif(dir.workbooks.length === 0) {\\n\\t\\tbinname = \\\"xl/workbook.xml\\\";\\n\\t\\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\\n\\t}\\n\\tif(dir.workbooks.length === 0) {\\n\\t\\tbinname = \\\"xl/workbook.bin\\\";\\n\\t\\tif(!getzipfile(zip,binname,true)) throw new Error(\\\"Could not find workbook\\\");\\n\\t\\tdir.workbooks.push(binname);\\n\\t\\txlsb = true;\\n\\t}\\n\\tif(dir.workbooks[0].substr(-3) == \\\"bin\\\") xlsb = true;\\n\\tif(xlsb) set_cp(1200);\\n\\n\\tif(!opts.bookSheets && !opts.bookProps) {\\n\\t\\tstrs = [];\\n\\t\\tif(dir.sst) strs=parse_sst(getzipdata(zip, dir.sst.replace(/^\\\\//,'')), dir.sst, opts);\\n\\n\\t\\tstyles = {};\\n\\t\\tif(dir.style) styles = parse_sty(getzipdata(zip, dir.style.replace(/^\\\\//,'')),dir.style, opts);\\n\\n\\t\\tthemes = {};\\n\\t\\tif(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipdata(zip, dir.themes[0].replace(/^\\\\//,''), true),dir.themes[0], opts);\\n\\t}\\n\\n\\tvar wb = parse_wb(getzipdata(zip, dir.workbooks[0].replace(/^\\\\//,'')), dir.workbooks[0], opts);\\n\\n\\tvar props = {}, propdata = \\\"\\\";\\n\\n\\tif(dir.coreprops.length !== 0) {\\n\\t\\tpropdata = getzipdata(zip, dir.coreprops[0].replace(/^\\\\//,''), true);\\n\\t\\tif(propdata) props = parse_core_props(propdata);\\n\\t\\tif(dir.extprops.length !== 0) {\\n\\t\\t\\tpropdata = getzipdata(zip, dir.extprops[0].replace(/^\\\\//,''), true);\\n\\t\\t\\tif(propdata) parse_ext_props(propdata, props);\\n\\t\\t}\\n\\t}\\n\\n\\tvar custprops = {};\\n\\tif(!opts.bookSheets || opts.bookProps) {\\n\\t\\tif (dir.custprops.length !== 0) {\\n\\t\\t\\tpropdata = getzipdata(zip, dir.custprops[0].replace(/^\\\\//,''), true);\\n\\t\\t\\tif(propdata) custprops = parse_cust_props(propdata, opts);\\n\\t\\t}\\n\\t}\\n\\n\\tvar out = {};\\n\\tif(opts.bookSheets || opts.bookProps) {\\n\\t\\tif(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\\n\\t\\telse if(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\\n\\t\\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\\n\\t\\tif(typeof sheets !== 'undefined') out.SheetNames = sheets;\\n\\t\\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\\n\\t}\\n\\tsheets = {};\\n\\n\\tvar deps = {};\\n\\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, dir.calcchain.replace(/^\\\\//,'')),dir.calcchain,opts);\\n\\n\\tvar i=0;\\n\\tvar sheetRels = {};\\n\\tvar path, relsPath;\\n\\tif(!props.Worksheets) {\\n\\t\\tvar wbsheets = wb.Sheets;\\n\\t\\tprops.Worksheets = wbsheets.length;\\n\\t\\tprops.SheetNames = [];\\n\\t\\tfor(var j = 0; j != wbsheets.length; ++j) {\\n\\t\\t\\tprops.SheetNames[j] = wbsheets[j].name;\\n\\t\\t}\\n\\t}\\n\\n\\tvar wbext = xlsb ? \\\"bin\\\" : \\\"xml\\\";\\n\\tvar wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\\n\\tvar wbrels = parse_rels(getzipdata(zip, wbrelsfile, true), wbrelsfile);\\n\\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\\n\\t/* Numbers iOS hack */\\n\\tvar nmode = (getzipdata(zip,\\\"xl/worksheets/sheet.xml\\\",true))?1:0;\\n\\tfor(i = 0; i != props.Worksheets; ++i) {\\n\\t\\tif(wbrels) path = 'xl/' + (wbrels[i][1]).replace(/[\\\\/]?xl\\\\//, \\\"\\\");\\n\\t\\telse {\\n\\t\\t\\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\\\".\\\" + wbext;\\n\\t\\t\\tpath = path.replace(/sheet0\\\\./,\\\"sheet.\\\");\\n\\t\\t}\\n\\t\\trelsPath = path.replace(/^(.*)(\\\\/)([^\\\\/]*)$/, \\\"$1/_rels/$3.rels\\\");\\n\\t\\tsafe_parse_ws(zip, path, relsPath, props.SheetNames[i], sheetRels, sheets, opts);\\n\\t}\\n\\n\\tif(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts);\\n\\n\\tout = {\\n\\t\\tDirectory: dir,\\n\\t\\tWorkbook: wb,\\n\\t\\tProps: props,\\n\\t\\tCustprops: custprops,\\n\\t\\tDeps: deps,\\n\\t\\tSheets: sheets,\\n\\t\\tSheetNames: props.SheetNames,\\n\\t\\tStrings: strs,\\n\\t\\tStyles: styles,\\n\\t\\tThemes: themes,\\n\\t\\tSSF: SSF.get_table()\\n\\t};\\n\\tif(opts.bookFiles) {\\n\\t\\tout.keys = entries;\\n\\t\\tout.files = zip.files;\\n\\t}\\n\\tif(opts.bookVBA) {\\n\\t\\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,dir.vba[0],true);\\n\\t\\telse if(dir.defaults.bin === 'application/vnd.ms-office.vbaProject') out.vbaraw = getzipdata(zip,'xl/vbaProject.bin',true);\\n\\t}\\n\\treturn out;\\n}\\nfunction add_rels(rels, rId, f, type, relobj) {\\n\\tif(!relobj) relobj = {};\\n\\tif(!rels['!id']) rels['!id'] = {};\\n\\trelobj.Id = 'rId' + rId;\\n\\trelobj.Type = type;\\n\\trelobj.Target = f;\\n\\tif(rels['!id'][relobj.Id]) throw new Error(\\\"Cannot rewrite rId \\\" + rId);\\n\\trels['!id'][relobj.Id] = relobj;\\n\\trels[('/' + relobj.Target).replace(\\\"//\\\",\\\"/\\\")] = relobj;\\n}\\n\\nfunction write_zip(wb, opts) {\\n\\tif(wb && !wb.SSF) {\\n\\t\\twb.SSF = SSF.get_table();\\n\\t}\\n\\tif(wb && wb.SSF) {\\n\\t\\tmake_ssf(SSF); SSF.load_table(wb.SSF);\\n\\t\\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\\n\\t}\\n\\topts.rels = {}; opts.wbrels = {};\\n\\topts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0;\\n\\tvar wbext = opts.bookType == \\\"xlsb\\\" ? \\\"bin\\\" : \\\"xml\\\";\\n\\tvar ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],\\n\\t\\tcoreprops: [], extprops: [], custprops: [], strs:[], comments: [], vba: [],\\n\\t\\tTODO:[], rels:[], xmlns: \\\"\\\" };\\n\\tfix_write_opts(opts = opts || {});\\n\\tvar zip = new jszip();\\n\\tvar f = \\\"\\\", rId = 0;\\n\\n\\topts.cellXfs = [];\\n\\tget_cell_style(opts.cellXfs, {}, {revssf:{\\\"General\\\":0}});\\n\\n\\tf = \\\"docProps/core.xml\\\";\\n\\tzip.file(f, write_core_props(wb.Props, opts));\\n\\tct.coreprops.push(f);\\n\\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\\n\\n\\tf = \\\"docProps/app.xml\\\";\\n\\tif(!wb.Props) wb.Props = {};\\n\\twb.Props.SheetNames = wb.SheetNames;\\n\\twb.Props.Worksheets = wb.SheetNames.length;\\n\\tzip.file(f, write_ext_props(wb.Props, opts));\\n\\tct.extprops.push(f);\\n\\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\\n\\n\\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\\n\\t\\tf = \\\"docProps/custom.xml\\\";\\n\\t\\tzip.file(f, write_cust_props(wb.Custprops, opts));\\n\\t\\tct.custprops.push(f);\\n\\t\\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\\n\\t}\\n\\n\\tf = \\\"xl/workbook.\\\" + wbext;\\n\\tzip.file(f, write_wb(wb, f, opts));\\n\\tct.workbooks.push(f);\\n\\tadd_rels(opts.rels, 1, f, RELS.WB);\\n\\n\\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\\n\\t\\tf = \\\"xl/worksheets/sheet\\\" + rId + \\\".\\\" + wbext;\\n\\t\\tzip.file(f, write_ws(rId-1, f, opts, wb));\\n\\t\\tct.sheets.push(f);\\n\\t\\tadd_rels(opts.wbrels, rId, \\\"worksheets/sheet\\\" + rId + \\\".\\\" + wbext, RELS.WS);\\n\\t}\\n\\n\\tif(opts.Strings != null && opts.Strings.length > 0) {\\n\\t\\tf = \\\"xl/sharedStrings.\\\" + wbext;\\n\\t\\tzip.file(f, write_sst(opts.Strings, f, opts));\\n\\t\\tct.strs.push(f);\\n\\t\\tadd_rels(opts.wbrels, ++rId, \\\"sharedStrings.\\\" + wbext, RELS.SST);\\n\\t}\\n\\n\\t/* TODO: something more intelligent with themes */\\n\\n\\tf = \\\"xl/theme/theme1.xml\\\";\\n\\tzip.file(f, write_theme());\\n\\tct.themes.push(f);\\n\\tadd_rels(opts.wbrels, ++rId, \\\"theme/theme1.xml\\\", RELS.THEME);\\n\\n\\t/* TODO: something more intelligent with styles */\\n\\n\\tf = \\\"xl/styles.\\\" + wbext;\\n\\tzip.file(f, write_sty(wb, f, opts));\\n\\tct.styles.push(f);\\n\\tadd_rels(opts.wbrels, ++rId, \\\"styles.\\\" + wbext, RELS.STY);\\n\\n\\tzip.file(\\\"[Content_Types].xml\\\", write_ct(ct, opts));\\n\\tzip.file('_rels/.rels', write_rels(opts.rels));\\n\\tzip.file('xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\\n\\treturn zip;\\n}\\nfunction firstbyte(f,o) {\\n\\tswitch((o||{}).type || \\\"base64\\\") {\\n\\t\\tcase 'buffer': return f[0];\\n\\t\\tcase 'base64': return Base64.decode(f.substr(0,12)).charCodeAt(0);\\n\\t\\tcase 'binary': return f.charCodeAt(0);\\n\\t\\tcase 'array': return f[0];\\n\\t\\tdefault: throw new Error(\\\"Unrecognized type \\\" + o.type);\\n\\t}\\n}\\n\\nfunction read_zip(data, opts) {\\n\\tvar zip, d = data;\\n\\tvar o = opts||{};\\n\\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \\\"buffer\\\" : \\\"base64\\\";\\n\\tswitch(o.type) {\\n\\t\\tcase \\\"base64\\\": zip = new jszip(d, { base64:true }); break;\\n\\t\\tcase \\\"binary\\\": case \\\"array\\\": zip = new jszip(d, { base64:false }); break;\\n\\t\\tcase \\\"buffer\\\": zip = new jszip(d); break;\\n\\t\\tcase \\\"file\\\": zip=new jszip(d=_fs.readFileSync(data)); break;\\n\\t\\tdefault: throw new Error(\\\"Unrecognized type \\\" + o.type);\\n\\t}\\n\\treturn parse_zip(zip, o);\\n}\\n\\nfunction readSync(data, opts) {\\n\\tvar zip, d = data, isfile = false, n;\\n\\tvar o = opts||{};\\n\\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \\\"buffer\\\" : \\\"base64\\\";\\n\\tif(o.type == \\\"file\\\") { isfile = true; o.type = \\\"buffer\\\"; d = _fs.readFileSync(data); }\\n\\tswitch((n = firstbyte(d, o))) {\\n\\t\\tcase 0xD0:\\n\\t\\t\\tif(isfile) o.type = \\\"file\\\";\\n\\t\\t\\treturn parse_xlscfb(CFB.read(data, o), o);\\n\\t\\tcase 0x09: return parse_xlscfb(s2a(o.type === 'base64' ? Base64.decode(data) : data), o);\\n\\t\\tcase 0x3C: return parse_xlml(d, o);\\n\\t\\tcase 0x50:\\n\\t\\t\\tif(isfile) o.type = \\\"file\\\";\\n\\t\\t\\treturn read_zip(data, opts);\\n\\t\\tdefault: throw new Error(\\\"Unsupported file \\\" + n);\\n\\t}\\n}\\n\\nfunction readFileSync(data, opts) {\\n\\tvar o = opts||{}; o.type = 'file';\\n\\treturn readSync(data, o);\\n}\\nfunction write_zip_type(wb, opts) {\\n\\tvar o = opts||{};\\n\\tvar z = write_zip(wb, o);\\n\\tswitch(o.type) {\\n\\t\\tcase \\\"base64\\\": return z.generate({type:\\\"base64\\\"});\\n\\t\\tcase \\\"binary\\\": return z.generate({type:\\\"string\\\"});\\n\\t\\tcase \\\"buffer\\\": return z.generate({type:\\\"nodebuffer\\\"});\\n\\t\\tcase \\\"file\\\": return _fs.writeFileSync(o.file, z.generate({type:\\\"nodebuffer\\\"}));\\n\\t\\tdefault: throw new Error(\\\"Unrecognized type \\\" + o.type);\\n\\t}\\n}\\n\\nfunction writeSync(wb, opts) {\\n\\tvar o = opts||{};\\n\\tswitch(o.bookType) {\\n\\t\\tcase 'xml': return write_xlml(wb, o);\\n\\t\\tdefault: return write_zip_type(wb, o);\\n\\t}\\n}\\n\\nfunction writeFileSync(wb, filename, opts) {\\n\\tvar o = opts||{}; o.type = 'file';\\n\\to.file = filename;\\n\\tswitch(o.file.substr(-5).toLowerCase()) {\\n\\t\\tcase '.xlsx': o.bookType = 'xlsx'; break;\\n\\t\\tcase '.xlsm': o.bookType = 'xlsm'; break;\\n\\t\\tcase '.xlsb': o.bookType = 'xlsb'; break;\\n\\tdefault: switch(o.file.substr(-4).toLowerCase()) {\\n\\t\\tcase '.xls': o.bookType = 'xls'; break;\\n\\t\\tcase '.xml': o.bookType = 'xml'; break;\\n\\t}}\\n\\treturn writeSync(wb, o);\\n}\\n\\nfunction decode_row(rowstr) { return parseInt(unfix_row(rowstr),10) - 1; }\\nfunction encode_row(row) { return \\\"\\\" + (row + 1); }\\nfunction fix_row(cstr) { return cstr.replace(/([A-Z]|^)(\\\\d+)$/,\\\"$1$$$2\\\"); }\\nfunction unfix_row(cstr) { return cstr.replace(/\\\\$(\\\\d+)$/,\\\"$1\\\"); }\\n\\nfunction decode_col(colstr) { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\\nfunction encode_col(col) { var s=\\\"\\\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\\nfunction fix_col(cstr) { return cstr.replace(/^([A-Z])/,\\\"$$$1\\\"); }\\nfunction unfix_col(cstr) { return cstr.replace(/^\\\\$([A-Z])/,\\\"$1\\\"); }\\n\\nfunction split_cell(cstr) { return cstr.replace(/(\\\\$?[A-Z]*)(\\\\$?\\\\d*)/,\\\"$1,$2\\\").split(\\\",\\\"); }\\nfunction decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\\nfunction encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); }\\nfunction fix_cell(cstr) { return fix_col(fix_row(cstr)); }\\nfunction unfix_cell(cstr) { return unfix_col(unfix_row(cstr)); }\\nfunction decode_range(range) { var x =range.split(\\\":\\\").map(decode_cell); return {s:x[0],e:x[x.length-1]}; }\\nfunction encode_range(cs,ce) {\\n\\tif(ce === undefined || typeof ce === 'number') return encode_range(cs.s, cs.e);\\n\\tif(typeof cs !== 'string') cs = encode_cell(cs); if(typeof ce !== 'string') ce = encode_cell(ce);\\n\\treturn cs == ce ? cs : cs + \\\":\\\" + ce;\\n}\\n\\nfunction safe_decode_range(range) {\\n\\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\\n\\tvar idx = 0, i = 0, cc = 0;\\n\\tvar len = range.length;\\n\\tfor(idx = 0; i < len; ++i) {\\n\\t\\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\\n\\t\\tidx = 26*idx + cc;\\n\\t}\\n\\to.s.c = --idx;\\n\\n\\tfor(idx = 0; i < len; ++i) {\\n\\t\\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\\n\\t\\tidx = 10*idx + cc;\\n\\t}\\n\\to.s.r = --idx;\\n\\n\\tif(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\\n\\n\\tfor(idx = 0; i != len; ++i) {\\n\\t\\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\\n\\t\\tidx = 26*idx + cc;\\n\\t}\\n\\to.e.c = --idx;\\n\\n\\tfor(idx = 0; i != len; ++i) {\\n\\t\\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\\n\\t\\tidx = 10*idx + cc;\\n\\t}\\n\\to.e.r = --idx;\\n\\treturn o;\\n}\\n\\nfunction safe_format_cell(cell, v) {\\n\\tif(cell.z !== undefined) try { return (cell.w = SSF.format(cell.z, v)); } catch(e) { }\\n\\tif(!cell.XF) return v;\\n\\ttry { return (cell.w = SSF.format(cell.XF.ifmt||0, v)); } catch(e) { return ''+v; }\\n}\\n\\nfunction format_cell(cell, v) {\\n\\tif(cell == null || cell.t == null) return \\\"\\\";\\n\\tif(cell.w !== undefined) return cell.w;\\n\\tif(v === undefined) return safe_format_cell(cell, cell.v);\\n\\treturn safe_format_cell(cell, v);\\n}\\n\\nfunction sheet_to_json(sheet, opts){\\n\\tvar val, row, range, header = 0, offset = 1, r, hdr = [], isempty, R, C, v;\\n\\tvar o = opts != null ? opts : {};\\n\\tvar raw = o.raw;\\n\\tif(sheet == null || sheet[\\\"!ref\\\"] == null) return [];\\n\\trange = o.range !== undefined ? o.range : sheet[\\\"!ref\\\"];\\n\\tif(o.header === 1) header = 1;\\n\\telse if(o.header === \\\"A\\\") header = 2;\\n\\telse if(Array.isArray(o.header)) header = 3;\\n\\tswitch(typeof range) {\\n\\t\\tcase 'string': r = safe_decode_range(range); break;\\n\\t\\tcase 'number': r = safe_decode_range(sheet[\\\"!ref\\\"]); r.s.r = range; break;\\n\\t\\tdefault: r = range;\\n\\t}\\n\\tif(header > 0) offset = 0;\\n\\tvar rr = encode_row(r.s.r);\\n\\tvar cols = new Array(r.e.c-r.s.c+1);\\n\\tvar out = new Array(r.e.r-r.s.r-offset+1);\\n\\tvar outi = 0;\\n\\tfor(C = r.s.c; C <= r.e.c; ++C) {\\n\\t\\tcols[C] = encode_col(C);\\n\\t\\tval = sheet[cols[C] + rr];\\n\\t\\tswitch(header) {\\n\\t\\t\\tcase 1: hdr[C] = C; break;\\n\\t\\t\\tcase 2: hdr[C] = cols[C]; break;\\n\\t\\t\\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\\n\\t\\t\\tdefault:\\n\\t\\t\\t\\tif(val === undefined) continue;\\n\\t\\t\\t\\thdr[C] = format_cell(val);\\n\\t\\t}\\n\\t}\\n\\n\\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\\n\\t\\trr = encode_row(R);\\n\\t\\tisempty = true;\\n\\t\\tif(header === 1) row = [];\\n\\t\\telse {\\n\\t\\t\\trow = {};\\n\\t\\t\\tif(Object.defineProperty) Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false});\\n\\t\\t\\telse row.__rowNum__ = R;\\n\\t\\t}\\n\\t\\tfor (C = r.s.c; C <= r.e.c; ++C) {\\n\\t\\t\\tval = sheet[cols[C] + rr];\\n\\t\\t\\tif(val === undefined || val.t === undefined) continue;\\n\\t\\t\\tv = val.v;\\n\\t\\t\\tswitch(val.t){\\n\\t\\t\\t\\tcase 'e': continue;\\n\\t\\t\\t\\tcase 's': break;\\n\\t\\t\\t\\tcase 'b': case 'n': break;\\n\\t\\t\\t\\tdefault: throw 'unrecognized type ' + val.t;\\n\\t\\t\\t}\\n\\t\\t\\tif(v !== undefined) {\\n\\t\\t\\t\\trow[hdr[C]] = raw ? v : format_cell(val,v);\\n\\t\\t\\t\\tisempty = false;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(isempty === false || header === 1) out[outi++] = row;\\n\\t}\\n\\tout.length = outi;\\n\\treturn out;\\n}\\n\\nfunction sheet_to_row_object_array(sheet, opts) { return sheet_to_json(sheet, opts != null ? opts : {}); }\\n\\nfunction sheet_to_csv(sheet, opts) {\\n\\tvar out = \\\"\\\", txt = \\\"\\\", qreg = /\\\"/g;\\n\\tvar o = opts == null ? {} : opts;\\n\\tif(sheet == null || sheet[\\\"!ref\\\"] == null) return \\\"\\\";\\n\\tvar r = safe_decode_range(sheet[\\\"!ref\\\"]);\\n\\tvar FS = o.FS !== undefined ? o.FS : \\\",\\\", fs = FS.charCodeAt(0);\\n\\tvar RS = o.RS !== undefined ? o.RS : \\\"\\\\n\\\", rs = RS.charCodeAt(0);\\n\\tvar row = \\\"\\\", rr = \\\"\\\", cols = [];\\n\\tvar i = 0, cc = 0, val;\\n\\tvar R = 0, C = 0;\\n\\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\\n\\tfor(R = r.s.r; R <= r.e.r; ++R) {\\n\\t\\trow = \\\"\\\";\\n\\t\\trr = encode_row(R);\\n\\t\\tfor(C = r.s.c; C <= r.e.c; ++C) {\\n\\t\\t\\tval = sheet[cols[C] + rr];\\n\\t\\t\\ttxt = val !== undefined ? ''+format_cell(val) : \\\"\\\";\\n\\t\\t\\tfor(i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34) {\\n\\t\\t\\t\\ttxt = \\\"\\\\\\\"\\\" + txt.replace(qreg, '\\\"\\\"') + \\\"\\\\\\\"\\\"; break; }\\n\\t\\t\\trow += (C === r.s.c ? \\\"\\\" : FS) + txt;\\n\\t\\t}\\n\\t\\tout += row + RS;\\n\\t}\\n\\treturn out;\\n}\\nvar make_csv = sheet_to_csv;\\n\\nfunction sheet_to_formulae(sheet) {\\n\\tvar cmds, y = \\\"\\\", x, val=\\\"\\\";\\n\\tif(sheet == null || sheet[\\\"!ref\\\"] == null) return \\\"\\\";\\n\\tvar r = safe_decode_range(sheet['!ref']), rr = \\\"\\\", cols = [], C;\\n\\tcmds = new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));\\n\\tvar i = 0;\\n\\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\\n\\tfor(var R = r.s.r; R <= r.e.r; ++R) {\\n\\t\\trr = encode_row(R);\\n\\t\\tfor(C = r.s.c; C <= r.e.c; ++C) {\\n\\t\\t\\ty = cols[C] + rr;\\n\\t\\t\\tx = sheet[y];\\n\\t\\t\\tval = \\\"\\\";\\n\\t\\t\\tif(x === undefined) continue;\\n\\t\\t\\tif(x.f != null) val = x.f;\\n\\t\\t\\telse if(x.w !== undefined) val = \\\"'\\\" + x.w;\\n\\t\\t\\telse if(x.v === undefined) continue;\\n\\t\\t\\telse val = \\\"\\\"+x.v;\\n\\t\\t\\tcmds[i++] = y + \\\"=\\\" + val;\\n\\t\\t}\\n\\t}\\n\\tcmds.length = i;\\n\\treturn cmds;\\n}\\n\\nvar utils = {\\n\\tencode_col: encode_col,\\n\\tencode_row: encode_row,\\n\\tencode_cell: encode_cell,\\n\\tencode_range: encode_range,\\n\\tdecode_col: decode_col,\\n\\tdecode_row: decode_row,\\n\\tsplit_cell: split_cell,\\n\\tdecode_cell: decode_cell,\\n\\tdecode_range: decode_range,\\n\\tformat_cell: format_cell,\\n\\tget_formulae: sheet_to_formulae,\\n\\tmake_csv: sheet_to_csv,\\n\\tmake_json: sheet_to_json,\\n\\tmake_formulae: sheet_to_formulae,\\n\\tsheet_to_csv: sheet_to_csv,\\n\\tsheet_to_json: sheet_to_json,\\n\\tsheet_to_formulae: sheet_to_formulae,\\n\\tsheet_to_row_object_array: sheet_to_row_object_array\\n};\\nXLSX.parse_xlscfb = parse_xlscfb;\\nXLSX.parse_zip = parse_zip;\\nXLSX.read = readSync; //xlsread\\nXLSX.readFile = readFileSync; //readFile\\nXLSX.readFileSync = readFileSync;\\nXLSX.write = writeSync;\\nXLSX.writeFile = writeFileSync;\\nXLSX.writeFileSync = writeFileSync;\\nXLSX.utils = utils;\\nXLSX.CFB = CFB;\\nXLSX.SSF = SSF;\\n})(typeof exports !== 'undefined' ? exports : XLSX);\\nvar XLS = XLSX;\\n$tw.utils.extend(old_exports,exports);exports = old_exports;module.exports=exports;\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/xlsx.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/dist/cpexcel.js\": {\n \"text\": \"if($tw.browser){Buffer = undefined;};/* cpexcel.js (C) 2013-2014 SheetJS -- http://sheetjs.com */\\n/*jshint -W100 */\\nvar cptable = {version:\\\"1.3.7\\\"};\\ncptable[874] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[932] = (function(){ var d = [], e = {}, D = [], j;\\nD[0] = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚��������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\\nD[129] = \\\"���������������������������������������������������������������� 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×�÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓�����������∈∋⊆⊇⊂⊃∪∩��������∧∨¬⇒⇔∀∃�����������∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬�������ʼn♯♭♪†‡¶����◯���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\\nD[130] = \\\"�������������������������������������������������������������������������������0123456789�������ABCDEFGHIJKLMNOPQRSTUVWXYZ�������abcdefghijklmnopqrstuvwxyz����ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん��������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\\nD[131] = \\\"����������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ�ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ��������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�����������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\\nD[132] = \\\"����������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмн�опрстуфхцчшщъыьэюя�������������─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂�����������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\\nD[135] = \\\"����������������������������������������������������������������①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡��������㍻�〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪���������������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\\nD[136] = \\\"���������������������������������������������������������������������������������������������������������������������������������������������������������������亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\\nD[137] = \\\"����������������������������������������������������������������院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円�園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\\nD[138] = \\\"����������������������������������������������������������������魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫�橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\\nD[139] = \\\"����������������������������������������������������������������機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救�朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\\nD[140] = \\\"����������������������������������������������������������������掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨�劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\\nD[141] = \\\"����������������������������������������������������������������后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降�項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\\nD[142] = \\\"����������������������������������������������������������������察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止�死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\\nD[143] = \\\"����������������������������������������������������������������宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳�準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\\nD[144] = \\\"����������������������������������������������������������������拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨�逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\\nD[145] = \\\"����������������������������������������������������������������繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻�操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\\nD[146] = \\\"����������������������������������������������������������������叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄�逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\\nD[147] = \\\"����������������������������������������������������������������邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬�凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\\nD[148] = \\\"����������������������������������������������������������������如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅�楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\\nD[149] = \\\"����������������������������������������������������������������鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷�斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\\nD[150] = \\\"����������������������������������������������������������������法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆�摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\\nD[151] = \\\"����������������������������������������������������������������諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲�沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\\nD[152] = \\\"����������������������������������������������������������������蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕��������������������������������������������弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\\nD[153] = \\\"����������������������������������������������������������������僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭�凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\\nD[154] = \\\"����������������������������������������������������������������咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸�噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\\nD[155] = \\\"����������������������������������������������������������������奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀�它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\\nD[156] = \\\"����������������������������������������������������������������廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠�怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\\nD[157] = \\\"����������������������������������������������������������������戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫�捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\\nD[158] = \\\"����������������������������������������������������������������曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎�梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\\nD[159] = \\\"����������������������������������������������������������������檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯�麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\\nD[224] = \\\"����������������������������������������������������������������漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝�烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\\nD[225] = \\\"����������������������������������������������������������������瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿�痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\\nD[226] = \\\"����������������������������������������������������������������磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰�窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\\nD[227] = \\\"����������������������������������������������������������������紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷�縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\\nD[228] = \\\"����������������������������������������������������������������隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤�艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\\nD[229] = \\\"����������������������������������������������������������������蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬�蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\\nD[230] = \\\"����������������������������������������������������������������襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧�諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\\nD[231] = \\\"����������������������������������������������������������������蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜�轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\\nD[232] = \\\"����������������������������������������������������������������錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙�閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\\nD[233] = \\\"����������������������������������������������������������������顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃�騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\\nD[234] = \\\"����������������������������������������������������������������鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯�黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙�������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\\nD[237] = \\\"����������������������������������������������������������������纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏�塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\\nD[238] = \\\"����������������������������������������������������������������犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙�蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\\nD[250] = \\\"����������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊�兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\\nD[251] = \\\"����������������������������������������������������������������涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神�祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\\nD[252] = \\\"����������������������������������������������������������������髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\\nreturn {\\\"enc\\\": e, \\\"dec\\\": d }; })();\\ncptable[936] = (function(){ var d = [], e = {}, D = [], j;\\nD[0] = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�������������������������������������������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\\nD[129] = \\\"����������������������������������������������������������������丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪乫乬乭乮乯乲乴乵乶乷乸乹乺乻乼乽乿亀亁亂亃亄亅亇亊�亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂伃伄伅伆伇伈伋伌伒伓伔伕伖伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾伿佀佁佂佄佅佇佈佉佊佋佌佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\\nD[130] = \\\"����������������������������������������������������������������侤侫侭侰侱侲侳侴侶侷侸侹侺侻侼侽侾俀俁係俆俇俈俉俋俌俍俒俓俔俕俖俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿倀倁倂倃倄倅倆倇倈倉倊�個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯倰倱倲倳倴倵倶倷倸倹倻倽倿偀偁偂偄偅偆偉偊偋偍偐偑偒偓偔偖偗偘偙偛偝偞偟偠偡偢偣偤偦偧偨偩偪偫偭偮偯偰偱偲偳側偵偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟傠傡傢傤傦傪傫傭傮傯傰傱傳傴債傶傷傸傹傼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\\nD[131] = \\\"����������������������������������������������������������������傽傾傿僀僁僂僃僄僅僆僇僈僉僊僋僌働僎僐僑僒僓僔僕僗僘僙僛僜僝僞僟僠僡僢僣僤僥僨僩僪僫僯僰僱僲僴僶僷僸價僺僼僽僾僿儀儁儂儃億儅儈�儉儊儌儍儎儏儐儑儓儔儕儖儗儘儙儚儛儜儝儞償儠儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾兂兇兊兌兎兏児兒兓兗兘兙兛兝兞兟兠兡兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦冧冨冩冪冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒凓凔凕凖凗�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\\nD[132] = \\\"����������������������������������������������������������������凘凙凚凜凞凟凢凣凥処凧凨凩凪凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄剅剆則剈剉剋剎剏剒剓剕剗剘�剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳剴創剶剷剸剹剺剻剼剾劀劃劄劅劆劇劉劊劋劌劍劎劏劑劒劔劕劖劗劘劙劚劜劤劥劦劧劮劯劰労劵劶劷劸効劺劻劼劽勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務勚勛勜勝勞勠勡勢勣勥勦勧勨勩勪勫勬勭勮勯勱勲勳勴勵勶勷勸勻勼勽匁匂匃匄匇匉匊匋匌匎�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\\nD[133] = \\\"����������������������������������������������������������������匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯匰匱匲匳匴匵匶匷匸匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏�厐厑厒厓厔厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯厰厱厲厳厴厵厷厸厹厺厼厽厾叀參叄叅叆叇収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝呞呟呠呡呣呥呧呩呪呫呬呭呮呯呰呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[133].length; ++j) if(D[133][j].charCodeAt(0) !== 0xFFFD) { e[D[133][j]] = 34048 + j; d[34048 + j] = D[133][j];}\\nD[134] = \\\"����������������������������������������������������������������咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠員哢哣哤哫哬哯哰哱哴哵哶哷哸哹哻哾唀唂唃唄唅唈唊唋唌唍唎唒唓唕唖唗唘唙唚唜唝唞唟唡唥唦�唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋啌啍啎問啑啒啓啔啗啘啙啚啛啝啞啟啠啢啣啨啩啫啯啰啱啲啳啴啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠喡喢喣喤喥喦喨喩喪喫喬喭單喯喰喲喴営喸喺喼喿嗀嗁嗂嗃嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗嗘嗙嗚嗛嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸嗹嗺嗻嗼嗿嘂嘃嘄嘅�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[134].length; ++j) if(D[134][j].charCodeAt(0) !== 0xFFFD) { e[D[134][j]] = 34304 + j; d[34304 + j] = D[134][j];}\\nD[135] = \\\"����������������������������������������������������������������嘆嘇嘊嘋嘍嘐嘑嘒嘓嘔嘕嘖嘗嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀噁噂噃噄噅噆噇噈噉噊噋噏噐噑噒噓噕噖噚噛噝噞噟噠噡�噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽噾噿嚀嚁嚂嚃嚄嚇嚈嚉嚊嚋嚌嚍嚐嚑嚒嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟嚠嚡嚢嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚰嚱嚲嚳嚴嚵嚶嚸嚹嚺嚻嚽嚾嚿囀囁囂囃囄囅囆囇囈囉囋囌囍囎囏囐囑囒囓囕囖囘囙囜団囥囦囧囨囩囪囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國圌圍圎圏圐圑�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\\nD[136] = \\\"����������������������������������������������������������������園圓圔圕圖圗團圙圚圛圝圞圠圡圢圤圥圦圧圫圱圲圴圵圶圷圸圼圽圿坁坃坄坅坆坈坉坋坒坓坔坕坖坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀�垁垇垈垉垊垍垎垏垐垑垔垕垖垗垘垙垚垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹垺垻垼垽垾垿埀埁埄埅埆埇埈埉埊埌埍埐埑埓埖埗埛埜埞埡埢埣埥埦埧埨埩埪埫埬埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥堦堧堨堩堫堬堭堮堯報堲堳場堶堷堸堹堺堻堼堽�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\\nD[137] = \\\"����������������������������������������������������������������堾堿塀塁塂塃塅塆塇塈塉塊塋塎塏塐塒塓塕塖塗塙塚塛塜塝塟塠塡塢塣塤塦塧塨塩塪塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塿墂墄墆墇墈墊墋墌�墍墎墏墐墑墔墕墖増墘墛墜墝墠墡墢墣墤墥墦墧墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墽墾墿壀壂壃壄壆壇壈壉壊壋壌壍壎壏壐壒壓壔壖壗壘壙壚壛壜壝壞壟壠壡壢壣壥壦壧壨壩壪壭壯壱売壴壵壷壸壺壻壼壽壾壿夀夁夃夅夆夈変夊夋夌夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\\nD[138] = \\\"����������������������������������������������������������������夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛奜奝奞奟奡奣奤奦奧奨奩奪奫奬奭奮奯奰奱奲奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦�妧妬妭妰妱妳妴妵妶妷妸妺妼妽妿姀姁姂姃姄姅姇姈姉姌姍姎姏姕姖姙姛姞姟姠姡姢姤姦姧姩姪姫姭姮姯姰姱姲姳姴姵姶姷姸姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪娫娬娭娮娯娰娳娵娷娸娹娺娻娽娾娿婁婂婃婄婅婇婈婋婌婍婎婏婐婑婒婓婔婖婗婘婙婛婜婝婞婟婠�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\\nD[139] = \\\"����������������������������������������������������������������婡婣婤婥婦婨婩婫婬婭婮婯婰婱婲婳婸婹婻婼婽婾媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媓媔媕媖媗媘媙媜媝媞媟媠媡媢媣媤媥媦媧媨媩媫媬�媭媮媯媰媱媴媶媷媹媺媻媼媽媿嫀嫃嫄嫅嫆嫇嫈嫊嫋嫍嫎嫏嫐嫑嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬嫭嫮嫯嫰嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬁嬂嬃嬄嬅嬆嬇嬈嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬸嬹嬺嬻嬼嬽嬾嬿孁孂孃孄孅孆孇�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\\nD[140] = \\\"����������������������������������������������������������������孈孉孊孋孌孍孎孏孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏�寑寔寕寖寗寘寙寚寛寜寠寢寣實寧審寪寫寬寭寯寱寲寳寴寵寶寷寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧屨屩屪屫屬屭屰屲屳屴屵屶屷屸屻屼屽屾岀岃岄岅岆岇岉岊岋岎岏岒岓岕岝岞岟岠岡岤岥岦岧岨�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\\nD[141] = \\\"����������������������������������������������������������������岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅峆峇峈峉峊峌峍峎峏峐峑峓峔峕峖峗峘峚峛峜峝峞峟峠峢峣峧峩峫峬峮峯峱峲峳峴峵島峷峸峹峺峼峽峾峿崀�崁崄崅崈崉崊崋崌崍崏崐崑崒崓崕崗崘崙崚崜崝崟崠崡崢崣崥崨崪崫崬崯崰崱崲崳崵崶崷崸崹崺崻崼崿嵀嵁嵂嵃嵄嵅嵆嵈嵉嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵙嵚嵜嵞嵟嵠嵡嵢嵣嵤嵥嵦嵧嵨嵪嵭嵮嵰嵱嵲嵳嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶚嶛嶜嶞嶟嶠�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\\nD[142] = \\\"����������������������������������������������������������������嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶸嶹嶺嶻嶼嶽嶾嶿巀巁巂巃巄巆巇巈巉巊巋巌巎巏巐巑巒巓巔巕巖巗巘巙巚巜巟巠巣巤巪巬巭�巰巵巶巸巹巺巻巼巿帀帄帇帉帊帋帍帎帒帓帗帞帟帠帡帢帣帤帥帨帩帪師帬帯帰帲帳帴帵帶帹帺帾帿幀幁幃幆幇幈幉幊幋幍幎幏幐幑幒幓幖幗幘幙幚幜幝幟幠幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨庩庪庫庬庮庯庰庱庲庴庺庻庼庽庿廀廁廂廃廄廅�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\\nD[143] = \\\"����������������������������������������������������������������廆廇廈廋廌廍廎廏廐廔廕廗廘廙廚廜廝廞廟廠廡廢廣廤廥廦廧廩廫廬廭廮廯廰廱廲廳廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤�弨弫弬弮弰弲弳弴張弶強弸弻弽弾弿彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢徣徤徥徦徧復徫徬徯徰徱徲徳徴徶徸徹徺徻徾徿忀忁忂忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\\nD[144] = \\\"����������������������������������������������������������������怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰怱怲怳怴怶怷怸怹怺怽怾恀恄恅恆恇恈恉恊恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀�悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽悾悿惀惁惂惃惄惇惈惉惌惍惎惏惐惒惓惔惖惗惙惛惞惡惢惣惤惥惪惱惲惵惷惸惻惼惽惾惿愂愃愄愅愇愊愋愌愐愑愒愓愔愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾慀慁慂慃慄慅慆�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\\nD[145] = \\\"����������������������������������������������������������������慇慉態慍慏慐慒慓慔慖慗慘慙慚慛慜慞慟慠慡慣慤慥慦慩慪慫慬慭慮慯慱慲慳慴慶慸慹慺慻慼慽慾慿憀憁憂憃憄憅憆憇憈憉憊憌憍憏憐憑憒憓憕�憖憗憘憙憚憛憜憞憟憠憡憢憣憤憥憦憪憫憭憮憯憰憱憲憳憴憵憶憸憹憺憻憼憽憿懀懁懃懄懅懆懇應懌懍懎懏懐懓懕懖懗懘懙懚懛懜懝懞懟懠懡懢懣懤懥懧懨懩懪懫懬懭懮懯懰懱懲懳懴懶懷懸懹懺懻懼懽懾戀戁戂戃戄戅戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸戹戺戻戼扂扄扅扆扊�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\\nD[146] = \\\"����������������������������������������������������������������扏扐払扖扗扙扚扜扝扞扟扠扡扢扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋抌抍抎抏抐抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁�拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳挴挵挶挷挸挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖捗捘捙捚捛捜捝捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙掚掛掜掝掞掟採掤掦掫掯掱掲掵掶掹掻掽掿揀�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\\nD[147] = \\\"����������������������������������������������������������������揁揂揃揅揇揈揊揋揌揑揓揔揕揗揘揙揚換揜揝揟揢揤揥揦揧揨揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆搇搈搉搊損搎搑搒搕搖搗搘搙搚搝搟搢搣搤�搥搧搨搩搫搮搯搰搱搲搳搵搶搷搸搹搻搼搾摀摂摃摉摋摌摍摎摏摐摑摓摕摖摗摙摚摛摜摝摟摠摡摢摣摤摥摦摨摪摫摬摮摯摰摱摲摳摴摵摶摷摻摼摽摾摿撀撁撃撆撈撉撊撋撌撍撎撏撐撓撔撗撘撚撛撜撝撟撠撡撢撣撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆擇擈擉擊擋擌擏擑擓擔擕擖擙據�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\\nD[148] = \\\"����������������������������������������������������������������擛擜擝擟擠擡擣擥擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿攁攂攃攄攅攆攇攈攊攋攌攍攎攏攐攑攓攔攕攖攗攙攚攛攜攝攞攟攠攡�攢攣攤攦攧攨攩攪攬攭攰攱攲攳攷攺攼攽敀敁敂敃敄敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數敹敺敻敼敽敾敿斀斁斂斃斄斅斆斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱斲斳斴斵斶斷斸斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘旙旚旛旜旝旞旟旡旣旤旪旫�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\\nD[149] = \\\"����������������������������������������������������������������旲旳旴旵旸旹旻旼旽旾旿昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷昸昹昺昻昽昿晀時晄晅晆晇晈晉晊晍晎晐晑晘�晙晛晜晝晞晠晢晣晥晧晩晪晫晬晭晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘暙暚暛暜暞暟暠暡暢暣暤暥暦暩暪暫暬暭暯暰暱暲暳暵暶暷暸暺暻暼暽暿曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曚曞曟曠曡曢曣曤曥曧曨曪曫曬曭曮曯曱曵曶書曺曻曽朁朂會�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\\nD[150] = \\\"����������������������������������������������������������������朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠朡朢朣朤朥朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗杘杙杚杛杝杢杣杤杦杧杫杬杮東杴杶�杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹枺枻枼枽枾枿柀柂柅柆柇柈柉柊柋柌柍柎柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵柶柷柸柹柺査柼柾栁栂栃栄栆栍栐栒栔栕栘栙栚栛栜栞栟栠栢栣栤栥栦栧栨栫栬栭栮栯栰栱栴栵栶栺栻栿桇桋桍桏桒桖桗桘桙桚桛�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\\nD[151] = \\\"����������������������������������������������������������������桜桝桞桟桪桬桭桮桯桰桱桲桳桵桸桹桺桻桼桽桾桿梀梂梄梇梈梉梊梋梌梍梎梐梑梒梔梕梖梘梙梚梛梜條梞梟梠梡梣梤梥梩梪梫梬梮梱梲梴梶梷梸�梹梺梻梼梽梾梿棁棃棄棅棆棇棈棊棌棎棏棐棑棓棔棖棗棙棛棜棝棞棟棡棢棤棥棦棧棨棩棪棫棬棭棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆椇椈椉椊椌椏椑椓椔椕椖椗椘椙椚椛検椝椞椡椢椣椥椦椧椨椩椪椫椬椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楕楖楘楙楛楜楟�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\\nD[152] = \\\"����������������������������������������������������������������楡楢楤楥楧楨楩楪楬業楯楰楲楳楴極楶楺楻楽楾楿榁榃榅榊榋榌榎榏榐榑榒榓榖榗榙榚榝榞榟榠榡榢榣榤榥榦榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽�榾榿槀槂槃槄槅槆槇槈槉構槍槏槑槒槓槕槖槗様槙槚槜槝槞槡槢槣槤槥槦槧槨槩槪槫槬槮槯槰槱槳槴槵槶槷槸槹槺槻槼槾樀樁樂樃樄樅樆樇樈樉樋樌樍樎樏樐樑樒樓樔樕樖標樚樛樜樝樞樠樢樣樤樥樦樧権樫樬樭樮樰樲樳樴樶樷樸樹樺樻樼樿橀橁橂橃橅橆橈橉橊橋橌橍橎橏橑橒橓橔橕橖橗橚�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\\nD[153] = \\\"����������������������������������������������������������������橜橝橞機橠橢橣橤橦橧橨橩橪橫橬橭橮橯橰橲橳橴橵橶橷橸橺橻橽橾橿檁檂檃檅檆檇檈檉檊檋檌檍檏檒檓檔檕檖檘檙檚檛檜檝檞檟檡檢檣檤檥檦�檧檨檪檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟欥欦欨欩欪欫欬欭欮�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\\nD[154] = \\\"����������������������������������������������������������������欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍歎歏歐歑歒歓歔歕歖歗歘歚歛歜歝歞歟歠歡歨歩歫歬歭歮歯歰歱歲歳歴歵歶歷歸歺歽歾歿殀殅殈�殌殎殏殐殑殔殕殗殘殙殜殝殞殟殠殢殣殤殥殦殧殨殩殫殬殭殮殯殰殱殲殶殸殹殺殻殼殽殾毀毃毄毆毇毈毉毊毌毎毐毑毘毚毜毝毞毟毠毢毣毤毥毦毧毨毩毬毭毮毰毱毲毴毶毷毸毺毻毼毾毿氀氁氂氃氄氈氉氊氋氌氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋汌汍汎汏汑汒汓汖汘�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\\nD[155] = \\\"����������������������������������������������������������������汙汚汢汣汥汦汧汫汬汭汮汯汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘�泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟洠洡洢洣洤洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽浾浿涀涁涃涄涆涇涊涋涍涏涐涒涖涗涘涙涚涜涢涥涬涭涰涱涳涴涶涷涹涺涻涼涽涾淁淂淃淈淉淊�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\\nD[156] = \\\"����������������������������������������������������������������淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽淾淿渀渁渂渃渄渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵�渶渷渹渻渼渽渾渿湀湁湂湅湆湇湈湉湊湋湌湏湐湑湒湕湗湙湚湜湝湞湠湡湢湣湤湥湦湧湨湩湪湬湭湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽満溁溂溄溇溈溊溋溌溍溎溑溒溓溔溕準溗溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪滫滬滭滮滯�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\\nD[157] = \\\"����������������������������������������������������������������滰滱滲滳滵滶滷滸滺滻滼滽滾滿漀漁漃漄漅漇漈漊漋漌漍漎漐漑漒漖漗漘漙漚漛漜漝漞漟漡漢漣漥漦漧漨漬漮漰漲漴漵漷漸漹漺漻漼漽漿潀潁潂�潃潄潅潈潉潊潌潎潏潐潑潒潓潔潕潖潗潙潚潛潝潟潠潡潣潤潥潧潨潩潪潫潬潯潰潱潳潵潶潷潹潻潽潾潿澀澁澂澃澅澆澇澊澋澏澐澑澒澓澔澕澖澗澘澙澚澛澝澞澟澠澢澣澤澥澦澨澩澪澫澬澭澮澯澰澱澲澴澵澷澸澺澻澼澽澾澿濁濃濄濅濆濇濈濊濋濌濍濎濏濐濓濔濕濖濗濘濙濚濛濜濝濟濢濣濤濥�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\\nD[158] = \\\"����������������������������������������������������������������濦濧濨濩濪濫濬濭濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀒瀓瀔瀕瀖瀗瀘瀙瀜瀝瀞瀟瀠瀡瀢瀤瀥瀦瀧瀨瀩瀪�瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀶瀷瀸瀺瀻瀼瀽瀾瀿灀灁灂灃灄灅灆灇灈灉灊灋灍灎灐灑灒灓灔灕灖灗灘灙灚灛灜灝灟灠灡灢灣灤灥灦灧灨灩灪灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞炟炠炡炢炣炤炥炦炧炨炩炪炰炲炴炵炶為炾炿烄烅烆烇烉烋烌烍烎烏烐烑烒烓烔烕烖烗烚�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\\nD[159] = \\\"����������������������������������������������������������������烜烝烞烠烡烢烣烥烪烮烰烱烲烳烴烵烶烸烺烻烼烾烿焀焁焂焃焄焅焆焇焈焋焌焍焎焏焑焒焔焗焛焜焝焞焟焠無焢焣焤焥焧焨焩焪焫焬焭焮焲焳焴�焵焷焸焹焺焻焼焽焾焿煀煁煂煃煄煆煇煈煉煋煍煏煐煑煒煓煔煕煖煗煘煙煚煛煝煟煠煡煢煣煥煩煪煫煬煭煯煰煱煴煵煶煷煹煻煼煾煿熀熁熂熃熅熆熇熈熉熋熌熍熎熐熑熒熓熕熖熗熚熛熜熝熞熡熢熣熤熥熦熧熩熪熫熭熮熯熰熱熲熴熶熷熸熺熻熼熽熾熿燀燁燂燄燅燆燇燈燉燊燋燌燍燏燐燑燒燓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\\nD[160] = \\\"����������������������������������������������������������������燖燗燘燙燚燛燜燝燞營燡燢燣燤燦燨燩燪燫燬燭燯燰燱燲燳燴燵燶燷燸燺燻燼燽燾燿爀爁爂爃爄爅爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚�爛爜爞爟爠爡爢爣爤爥爦爧爩爫爭爮爯爲爳爴爺爼爾牀牁牂牃牄牅牆牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅犆犇犈犉犌犎犐犑犓犔犕犖犗犘犙犚犛犜犝犞犠犡犢犣犤犥犦犧犨犩犪犫犮犱犲犳犵犺犻犼犽犾犿狀狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[160].length; ++j) if(D[160][j].charCodeAt(0) !== 0xFFFD) { e[D[160][j]] = 40960 + j; d[40960 + j] = D[160][j];}\\nD[161] = \\\"����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\\nD[162] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���\\\".split(\\\"\\\");\\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\\nD[163] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\\nD[164] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\\nD[165] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\\nD[166] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������︵︶︹︺︿﹀︽︾﹁﹂﹃﹄��︻︼︷︸︱�︳︴����������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\\nD[167] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\\nD[168] = \\\"����������������������������������������������������������������ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇�█▉▊▋▌▍▎▏▓▔▕▼▽◢◣◤◥☉⊕〒〝〞�����������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ�ńň�ɡ����ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\\nD[169] = \\\"����������������������������������������������������������������〡〢〣〤〥〦〧〨〩㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦�℡㈱�‐���ー゛゜ヽヾ〆ゝゞ﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡�﹢﹣﹤﹥﹦﹨﹩﹪﹫�������������〇�������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\\nD[170] = \\\"����������������������������������������������������������������狜狝狟狢狣狤狥狦狧狪狫狵狶狹狽狾狿猀猂猄猅猆猇猈猉猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀獁獂獃獄獅獆獇獈�獉獊獋獌獎獏獑獓獔獕獖獘獙獚獛獜獝獞獟獡獢獣獤獥獦獧獨獩獪獫獮獰獱�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\\nD[171] = \\\"����������������������������������������������������������������獲獳獴獵獶獷獸獹獺獻獼獽獿玀玁玂玃玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣玤玥玦玧玨玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃珄珅珆珇�珋珌珎珒珓珔珕珖珗珘珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳珴珵珶珷�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\\nD[172] = \\\"����������������������������������������������������������������珸珹珺珻珼珽現珿琀琁琂琄琇琈琋琌琍琎琑琒琓琔琕琖琗琘琙琜琝琞琟琠琡琣琤琧琩琫琭琯琱琲琷琸琹琺琻琽琾琿瑀瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍�瑎瑏瑐瑑瑒瑓瑔瑖瑘瑝瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑮瑯瑱瑲瑳瑴瑵瑸瑹瑺�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\\nD[173] = \\\"����������������������������������������������������������������瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑璒璓璔璕璖璗璘璙璚璛璝璟璠璡璢璣璤璥璦璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璻璼璽璾璿瓀瓁瓂瓃瓄瓅瓆瓇�瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓓瓔瓕瓖瓗瓘瓙瓚瓛瓝瓟瓡瓥瓧瓨瓩瓪瓫瓬瓭瓰瓱瓲�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\\nD[174] = \\\"����������������������������������������������������������������瓳瓵瓸瓹瓺瓻瓼瓽瓾甀甁甂甃甅甆甇甈甉甊甋甌甎甐甒甔甕甖甗甛甝甞甠甡產産甤甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘�畝畞畟畠畡畢畣畤畧畨畩畫畬畭畮畯異畱畳畵當畷畺畻畼畽畾疀疁疂疄疅疇�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\\nD[175] = \\\"����������������������������������������������������������������疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦疧疨疩疪疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇�瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\\nD[176] = \\\"����������������������������������������������������������������癅癆癇癈癉癊癋癎癏癐癑癒癓癕癗癘癙癚癛癝癟癠癡癢癤癥癦癧癨癩癪癬癭癮癰癱癲癳癴癵癶癷癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛�皜皝皞皟皠皡皢皣皥皦皧皨皩皪皫皬皭皯皰皳皵皶皷皸皹皺皻皼皽皾盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\\nD[177] = \\\"����������������������������������������������������������������盄盇盉盋盌盓盕盙盚盜盝盞盠盡盢監盤盦盧盨盩盪盫盬盭盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎眏眐眑眒眓眔眕眖眗眘眛眜眝眞眡眣眤眥眧眪眫�眬眮眰眱眲眳眴眹眻眽眾眿睂睄睅睆睈睉睊睋睌睍睎睏睒睓睔睕睖睗睘睙睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\\nD[178] = \\\"����������������������������������������������������������������睝睞睟睠睤睧睩睪睭睮睯睰睱睲睳睴睵睶睷睸睺睻睼瞁瞂瞃瞆瞇瞈瞉瞊瞋瞏瞐瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶瞷瞸瞹瞺�瞼瞾矀矁矂矃矄矅矆矇矈矉矊矋矌矎矏矐矑矒矓矔矕矖矘矙矚矝矞矟矠矡矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\\nD[179] = \\\"����������������������������������������������������������������矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃砄砅砆砇砈砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚�硛硜硞硟硠硡硢硣硤硥硦硧硨硩硯硰硱硲硳硴硵硶硸硹硺硻硽硾硿碀碁碂碃场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\\nD[180] = \\\"����������������������������������������������������������������碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨碩碪碫碬碭碮碯碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚磛磜磝磞磟磠磡磢磣�磤磥磦磧磩磪磫磭磮磯磰磱磳磵磶磸磹磻磼磽磾磿礀礂礃礄礆礇礈礉礊礋礌础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\\nD[181] = \\\"����������������������������������������������������������������礍礎礏礐礑礒礔礕礖礗礘礙礚礛礜礝礟礠礡礢礣礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礵礶礷礸礹礽礿祂祃祄祅祇祊祋祌祍祎祏祐祑祒祔祕祘祙祡祣�祤祦祩祪祫祬祮祰祱祲祳祴祵祶祹祻祼祽祾祿禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\\nD[182] = \\\"����������������������������������������������������������������禓禔禕禖禗禘禙禛禜禝禞禟禠禡禢禣禤禥禦禨禩禪禫禬禭禮禯禰禱禲禴禵禶禷禸禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙秚秛秜秝秞秠秡秢秥秨秪�秬秮秱秲秳秴秵秶秷秹秺秼秾秿稁稄稅稇稈稉稊稌稏稐稑稒稓稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\\nD[183] = \\\"����������������������������������������������������������������稝稟稡稢稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稴稵稶稸稺稾穀穁穂穃穄穅穇穈穉穊穋穌積穎穏穐穒穓穔穕穖穘穙穚穛穜穝穞穟穠穡穢穣穤穥穦穧穨�穩穪穫穬穭穮穯穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\\nD[184] = \\\"����������������������������������������������������������������窣窤窧窩窪窫窮窯窰窱窲窴窵窶窷窸窹窺窻窼窽窾竀竁竂竃竄竅竆竇竈竉竊竌竍竎竏竐竑竒竓竔竕竗竘竚竛竜竝竡竢竤竧竨竩竪竫竬竮竰竱竲竳�竴竵競竷竸竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\\nD[185] = \\\"����������������������������������������������������������������笯笰笲笴笵笶笷笹笻笽笿筀筁筂筃筄筆筈筊筍筎筓筕筗筙筜筞筟筡筣筤筥筦筧筨筩筪筫筬筭筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆箇箈箉箊箋箌箎箏�箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹箺箻箼箽箾箿節篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\\nD[186] = \\\"����������������������������������������������������������������篅篈築篊篋篍篎篏篐篒篔篕篖篗篘篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲篳篴篵篶篸篹篺篻篽篿簀簁簂簃簄簅簆簈簉簊簍簎簐簑簒簓簔簕簗簘簙�簚簛簜簝簞簠簡簢簣簤簥簨簩簫簬簭簮簯簰簱簲簳簴簵簶簷簹簺簻簼簽簾籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\\nD[187] = \\\"����������������������������������������������������������������籃籄籅籆籇籈籉籊籋籌籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲籵籶籷籸籹籺籾籿粀粁粂粃粄粅粆粇�粈粊粋粌粍粎粏粐粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴粵粶粷粸粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\\nD[188] = \\\"����������������������������������������������������������������粿糀糂糃糄糆糉糋糎糏糐糑糒糓糔糘糚糛糝糞糡糢糣糤糥糦糧糩糪糫糬糭糮糰糱糲糳糴糵糶糷糹糺糼糽糾糿紀紁紂紃約紅紆紇紈紉紋紌納紎紏紐�紑紒紓純紕紖紗紘紙級紛紜紝紞紟紡紣紤紥紦紨紩紪紬紭紮細紱紲紳紴紵紶肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\\nD[189] = \\\"����������������������������������������������������������������紷紸紹紺紻紼紽紾紿絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟絠絡絢絣絤絥給絧絨絩絪絫絬絭絯絰統絲絳絴絵絶�絸絹絺絻絼絽絾絿綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\\nD[190] = \\\"����������������������������������������������������������������継続綛綜綝綞綟綠綡綢綣綤綥綧綨綩綪綫綬維綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙�線緛緜緝緞緟締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\\nD[191] = \\\"����������������������������������������������������������������緻緼緽緾緿縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹�縺縼總績縿繀繂繃繄繅繆繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\\nD[192] = \\\"����������������������������������������������������������������繞繟繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿纀纁纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纜纝纞�纮纴纻纼绖绤绬绹缊缐缞缷缹缻缼缽缾缿罀罁罃罆罇罈罉罊罋罌罍罎罏罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\\nD[193] = \\\"����������������������������������������������������������������罖罙罛罜罝罞罠罣罤罥罦罧罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂羃羄羅羆羇羈羉羋羍羏羐羑羒羓羕羖羗羘羙羛羜羠羢羣羥羦羨義羪羫羬羭羮羱�羳羴羵羶羷羺羻羾翀翂翃翄翆翇翈翉翋翍翏翐翑習翓翖翗翙翚翛翜翝翞翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\\nD[194] = \\\"����������������������������������������������������������������翤翧翨翪翫翬翭翯翲翴翵翶翷翸翹翺翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫耬耭耮耯耰耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗�聙聛聜聝聞聟聠聡聢聣聤聥聦聧聨聫聬聭聮聯聰聲聳聴聵聶職聸聹聺聻聼聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\\nD[195] = \\\"����������������������������������������������������������������聾肁肂肅肈肊肍肎肏肐肑肒肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇胈胉胊胋胏胐胑胒胓胔胕胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋�脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\\nD[196] = \\\"����������������������������������������������������������������腀腁腂腃腄腅腇腉腍腎腏腒腖腗腘腛腜腝腞腟腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃膄膅膆膇膉膋膌膍膎膐膒膓膔膕膖膗膙膚膞膟膠膡膢膤膥�膧膩膫膬膭膮膯膰膱膲膴膵膶膷膸膹膼膽膾膿臄臅臇臈臉臋臍臎臏臐臑臒臓摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\\nD[197] = \\\"����������������������������������������������������������������臔臕臖臗臘臙臚臛臜臝臞臟臠臡臢臤臥臦臨臩臫臮臯臰臱臲臵臶臷臸臹臺臽臿舃與興舉舊舋舎舏舑舓舕舖舗舘舙舚舝舠舤舥舦舧舩舮舲舺舼舽舿�艀艁艂艃艅艆艈艊艌艍艎艐艑艒艓艔艕艖艗艙艛艜艝艞艠艡艢艣艤艥艦艧艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\\nD[198] = \\\"����������������������������������������������������������������艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸�苺苼苽苾苿茀茊茋茍茐茒茓茖茘茙茝茞茟茠茡茢茣茤茥茦茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\\nD[199] = \\\"����������������������������������������������������������������茾茿荁荂荄荅荈荊荋荌荍荎荓荕荖荗荘荙荝荢荰荱荲荳荴荵荶荹荺荾荿莀莁莂莃莄莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡莢莣莤莥莦莧莬莭莮�莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}\\nD[200] = \\\"����������������������������������������������������������������菮華菳菴菵菶菷菺菻菼菾菿萀萂萅萇萈萉萊萐萒萓萔萕萖萗萙萚萛萞萟萠萡萢萣萩萪萫萬萭萮萯萰萲萳萴萵萶萷萹萺萻萾萿葀葁葂葃葄葅葇葈葉�葊葋葌葍葎葏葐葒葓葔葕葖葘葝葞葟葠葢葤葥葦葧葨葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}\\nD[201] = \\\"����������������������������������������������������������������葽葾葿蒀蒁蒃蒄蒅蒆蒊蒍蒏蒐蒑蒒蒓蒔蒕蒖蒘蒚蒛蒝蒞蒟蒠蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗�蓘蓙蓚蓛蓜蓞蓡蓢蓤蓧蓨蓩蓪蓫蓭蓮蓯蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}\\nD[202] = \\\"����������������������������������������������������������������蔃蔄蔅蔆蔇蔈蔉蔊蔋蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢蔣蔤蔥蔦蔧蔨蔩蔪蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔾蔿蕀蕁蕂蕄蕅蕆蕇蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕�蕗蕘蕚蕛蕜蕝蕟蕠蕡蕢蕣蕥蕦蕧蕩蕪蕫蕬蕭蕮蕯蕰蕱蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\\nD[203] = \\\"����������������������������������������������������������������薂薃薆薈薉薊薋薌薍薎薐薑薒薓薔薕薖薗薘薙薚薝薞薟薠薡薢薣薥薦薧薩薫薬薭薱薲薳薴薵薶薸薺薻薼薽薾薿藀藂藃藄藅藆藇藈藊藋藌藍藎藑藒�藔藖藗藘藙藚藛藝藞藟藠藡藢藣藥藦藧藨藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\\nD[204] = \\\"����������������������������������������������������������������藹藺藼藽藾蘀蘁蘂蘃蘄蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘒蘓蘔蘕蘗蘘蘙蘚蘛蘜蘝蘞蘟蘠蘡蘢蘣蘤蘥蘦蘨蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘹蘺蘻蘽蘾蘿虀�虁虂虃虄虅虆虇虈虉虊虋虌虒虓處虖虗虘虙虛虜虝號虠虡虣虤虥虦虧虨虩虪獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\\nD[205] = \\\"����������������������������������������������������������������虭虯虰虲虳虴虵虶虷虸蚃蚄蚅蚆蚇蚈蚉蚎蚏蚐蚑蚒蚔蚖蚗蚘蚙蚚蚛蚞蚟蚠蚡蚢蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻蚼蚽蚾蚿蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜�蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\\nD[206] = \\\"����������������������������������������������������������������蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀蝁蝂蝃蝄蝅蝆蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚蝛蝜蝝蝞蝟蝡蝢蝦蝧蝨蝩蝪蝫蝬蝭蝯蝱蝲蝳蝵�蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎螏螐螑螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\\nD[207] = \\\"����������������������������������������������������������������螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁蟂蟃蟄蟅蟇蟈蟉蟌蟍蟎蟏蟐蟔蟕蟖蟗蟘蟙蟚蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸�蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋蠌蠍蠎蠏蠐蠑蠒蠔蠗蠘蠙蠚蠜蠝蠞蠟蠠蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\\nD[208] = \\\"����������������������������������������������������������������蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠳蠴蠵蠶蠷蠸蠺蠻蠽蠾蠿衁衂衃衆衇衈衉衊衋衎衏衐衑衒術衕衖衘衚衛衜衝衞衟衠衦衧衪衭衯衱衳衴衵衶衸衹衺�衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\\nD[209] = \\\"����������������������������������������������������������������袬袮袯袰袲袳袴袵袶袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚裛補裝裞裠裡裦裧裩裪裫裬裭裮裯裲裵裶裷裺裻製裿褀褁褃褄褅褆複褈�褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟褠褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\\nD[210] = \\\"����������������������������������������������������������������褸褹褺褻褼褽褾褿襀襂襃襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襠襡襢襣襤襥襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襼�襽襾覀覂覄覅覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\\nD[211] = \\\"����������������������������������������������������������������覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿觀觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴觵觶觷觸觹觺�觻觼觽觾觿訁訂訃訄訅訆計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\\nD[212] = \\\"����������������������������������������������������������������訞訟訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訿詀詁詂詃詄詅詆詇詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞�詟詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詺詻詼詽詾詿誀浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\\nD[213] = \\\"����������������������������������������������������������������誁誂誃誄誅誆誇誈誋誌認誎誏誐誑誒誔誕誖誗誘誙誚誛誜誝語誟誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調諀諁諂�諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟諠諡諢諣铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\\nD[214] = \\\"����������������������������������������������������������������諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿謀謁謂謃謄謅謆謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟謠謡謢謣�謤謥謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿譀譁譂譃譄譅帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\\nD[215] = \\\"����������������������������������������������������������������譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟譠譡譢譣譤譥譧譨譩譪譫譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿讀讁讂讃讄讅讆�讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\\nD[216] = \\\"����������������������������������������������������������������谸谹谺谻谼谽谾谿豀豂豃豄豅豈豊豋豍豎豏豐豑豒豓豔豖豗豘豙豛豜豝豞豟豠豣豤豥豦豧豨豩豬豭豮豯豰豱豲豴豵豶豷豻豼豽豾豿貀貁貃貄貆貇�貈貋貍貎貏貐貑貒貓貕貖貗貙貚貛貜貝貞貟負財貢貣貤貥貦貧貨販貪貫責貭亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\\nD[217] = \\\"����������������������������������������������������������������貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟賠賡賢賣賤賥賦賧賨賩質賫賬�賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿贀贁贂贃贄贅贆贇贈贉贊贋贌贍佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\\nD[218] = \\\"����������������������������������������������������������������贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸赹赺赻赼赽赾赿趀趂趃趆趇趈趉趌趍趎趏趐趒趓趕趖趗趘趙趚趛趜趝趞趠趡�趢趤趥趦趧趨趩趪趫趬趭趮趯趰趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\\nD[219] = \\\"����������������������������������������������������������������跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾跿踀踁踂踃踄踆踇踈踋踍踎踐踑踒踓踕踖踗踘踙踚踛踜踠踡踤踥踦踧踨踫踭踰踲踳踴踶踷踸踻踼踾�踿蹃蹅蹆蹌蹍蹎蹏蹐蹓蹔蹕蹖蹗蹘蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\\nD[220] = \\\"����������������������������������������������������������������蹳蹵蹷蹸蹹蹺蹻蹽蹾躀躂躃躄躆躈躉躊躋躌躍躎躑躒躓躕躖躗躘躙躚躛躝躟躠躡躢躣躤躥躦躧躨躩躪躭躮躰躱躳躴躵躶躷躸躹躻躼躽躾躿軀軁軂�軃軄軅軆軇軈軉車軋軌軍軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟軠軡転軣軤堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\\nD[221] = \\\"����������������������������������������������������������������軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟輠輡輢輣�輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿轀轁轂轃轄荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\\nD[222] = \\\"����������������������������������������������������������������轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟轠轡轢轣轤轥轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆�迉迊迋迌迍迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\\nD[223] = \\\"����������������������������������������������������������������這逜連逤逥逧逨逩逪逫逬逰週進逳逴逷逹逺逽逿遀遃遅遆遈遉遊運遌過達違遖遙遚遜遝遞遟遠遡遤遦遧適遪遫遬遯遰遱遲遳遶遷選遹遺遻遼遾邁�還邅邆邇邉邊邌邍邎邏邐邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\\nD[224] = \\\"����������������������������������������������������������������郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄚鄛鄜�鄝鄟鄠鄡鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄰鄲鄳鄴鄵鄶鄷鄸鄺鄻鄼鄽鄾鄿酀酁酂酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\\nD[225] = \\\"����������������������������������������������������������������酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀醁醂醃醄醆醈醊醎醏醓醔醕醖醗醘醙醜醝醞醟醠醡醤醥醦醧醨醩醫醬醰醱醲醳醶醷醸醹醻�醼醽醾醿釀釁釂釃釄釅釆釈釋釐釒釓釔釕釖釗釘釙釚釛針釞釟釠釡釢釣釤釥帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\\nD[226] = \\\"����������������������������������������������������������������釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟鈠鈡鈢鈣鈤�鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿鉀鉁鉂鉃鉄鉅狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\\nD[227] = \\\"����������������������������������������������������������������鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿銀銁銂銃銄銅�銆銇銈銉銊銋銌銍銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟銠銡銢銣銤銥銦銧恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\\nD[228] = \\\"����������������������������������������������������������������銨銩銪銫銬銭銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿鋀鋁鋂鋃鋄鋅鋆鋇鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟鋠鋡鋢鋣鋤鋥鋦鋧鋨�鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿錀錁錂錃錄錅錆錇錈錉洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\\nD[229] = \\\"����������������������������������������������������������������錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錿鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉�鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\\nD[230] = \\\"����������������������������������������������������������������鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫�鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\\nD[231] = \\\"����������������������������������������������������������������鏎鏏鏐鏑鏒鏓鏔鏕鏗鏘鏙鏚鏛鏜鏝鏞鏟鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍�鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\\nD[232] = \\\"����������������������������������������������������������������鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐿鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑬鑭鑮鑯�鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿钀钁钂钃钄钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\\nD[233] = \\\"����������������������������������������������������������������锧锳锽镃镈镋镕镚镠镮镴镵長镸镹镺镻镼镽镾門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟閠閡関閣閤閥閦閧閨閩閪�閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿闀闁闂闃闄闅闆闇闈闉闊闋椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\\nD[234] = \\\"����������������������������������������������������������������闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟闠闡闢闣闤闥闦闧闬闿阇阓阘阛阞阠阣阤阥阦阧阨阩阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗�陘陙陚陜陝陞陠陣陥陦陫陭陮陯陰陱陳陸陹険陻陼陽陾陿隀隁隂隃隄隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\\nD[235] = \\\"����������������������������������������������������������������隌階隑隒隓隕隖隚際隝隞隟隠隡隢隣隤隥隦隨隩險隫隬隭隮隯隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖雗雘雙雚雛雜雝雞雟雡離難雤雥雦雧雫�雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗霘霙霚霛霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\\nD[236] = \\\"����������������������������������������������������������������霡霢霣霤霥霦霧霨霩霫霬霮霯霱霳霴霵霶霷霺霻霼霽霿靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑靔靕靗靘靚靜靝靟靣靤靦靧靨靪靫靬靭靮靯靰靱�靲靵靷靸靹靺靻靽靾靿鞀鞁鞂鞃鞄鞆鞇鞈鞉鞊鞌鞎鞏鞐鞓鞕鞖鞗鞙鞚鞛鞜鞝臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\\nD[237] = \\\"����������������������������������������������������������������鞞鞟鞡鞢鞤鞥鞦鞧鞨鞩鞪鞬鞮鞰鞱鞳鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟韠韡韢韣�韤韥韨韮韯韰韱韲韴韷韸韹韺韻韼韽韾響頀頁頂頃頄項順頇須頉頊頋頌頍頎怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\\nD[238] = \\\"����������������������������������������������������������������頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿顀顁顂顃顄顅顆顇顈顉顊顋題額�顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\\nD[239] = \\\"����������������������������������������������������������������顯顰顱顲顳顴颋颎颒颕颙颣風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿飀飁飂飃飄飅飆飇飈飉飊飋飌飍飏飐飔飖飗飛飜飝飠飡飢飣飤�飥飦飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿餀餁餂餃餄餅餆餇铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\\nD[240] = \\\"����������������������������������������������������������������餈餉養餋餌餎餏餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟餠餡餢餣餤餥餦餧館餩餪餫餬餭餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿饀饁饂饃饄饅饆饇饈饉�饊饋饌饍饎饏饐饑饒饓饖饗饘饙饚饛饜饝饞饟饠饡饢饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\\nD[241] = \\\"����������������������������������������������������������������馌馎馚馛馜馝馞馟馠馡馢馣馤馦馧馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘�駙駚駛駜駝駞駟駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\\nD[242] = \\\"����������������������������������������������������������������駺駻駼駽駾駿騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸�騹騺騻騼騽騾騿驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\\nD[243] = \\\"����������������������������������������������������������������驚驛驜驝驞驟驠驡驢驣驤驥驦驧驨驩驪驫驲骃骉骍骎骔骕骙骦骩骪骫骬骭骮骯骲骳骴骵骹骻骽骾骿髃髄髆髇髈髉髊髍髎髏髐髒體髕髖髗髙髚髛髜�髝髞髠髢髣髤髥髧髨髩髪髬髮髰髱髲髳髴髵髶髷髸髺髼髽髾髿鬀鬁鬂鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\\nD[244] = \\\"����������������������������������������������������������������鬇鬉鬊鬋鬌鬍鬎鬐鬑鬒鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬠鬡鬢鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬰鬱鬳鬴鬵鬶鬷鬸鬹鬺鬽鬾鬿魀魆魊魋魌魎魐魒魓魕魖魗魘魙魚�魛魜魝魞魟魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\\nD[245] = \\\"����������������������������������������������������������������魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺�鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\\nD[246] = \\\"����������������������������������������������������������������鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚�鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\\nD[247] = \\\"����������������������������������������������������������������鰼鰽鰾鰿鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺�鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾鲿鳀鳁鳂鳈鳉鳑鳒鳚鳛鳠鳡鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\\nD[248] = \\\"����������������������������������������������������������������鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡�鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\\nD[249] = \\\"����������������������������������������������������������������鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁�鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\\nD[250] = \\\"����������������������������������������������������������������鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡�鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\\nD[251] = \\\"����������������������������������������������������������������鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽麀�麁麃麄麅麆麉麊麌麍麎麏麐麑麔麕麖麗麘麙麚麛麜麞麠麡麢麣麤麥麧麨麩麪�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\\nD[252] = \\\"����������������������������������������������������������������麫麬麭麮麯麰麱麲麳麵麶麷麹麺麼麿黀黁黂黃黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰黱黲黳黴黵黶黷黸黺黽黿鼀鼁鼂鼃鼄鼅�鼆鼇鼈鼉鼊鼌鼏鼑鼒鼔鼕鼖鼘鼚鼛鼜鼝鼞鼟鼡鼣鼤鼥鼦鼧鼨鼩鼪鼫鼭鼮鼰鼱�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\\nD[253] = \\\"����������������������������������������������������������������鼲鼳鼴鼵鼶鼸鼺鼼鼿齀齁齂齃齅齆齇齈齉齊齋齌齍齎齏齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸�齹齺齻齼齽齾龁龂龍龎龏龐龑龒龓龔龕龖龗龘龜龝龞龡龢龣龤龥郎凉秊裏隣�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[253].length; ++j) if(D[253][j].charCodeAt(0) !== 0xFFFD) { e[D[253][j]] = 64768 + j; d[64768 + j] = D[253][j];}\\nD[254] = \\\"����������������������������������������������������������������兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[254].length; ++j) if(D[254][j].charCodeAt(0) !== 0xFFFD) { e[D[254][j]] = 65024 + j; d[65024 + j] = D[254][j];}\\nreturn {\\\"enc\\\": e, \\\"dec\\\": d }; })();\\ncptable[949] = (function(){ var d = [], e = {}, D = [], j;\\nD[0] = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\\nD[129] = \\\"�����������������������������������������������������������������갂갃갅갆갋갌갍갎갏갘갞갟갡갢갣갥갦갧갨갩갪갫갮갲갳갴������갵갶갷갺갻갽갾갿걁걂걃걄걅걆걇걈걉걊걌걎걏걐걑걒걓걕������걖걗걙걚걛걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯걲걳걵걶걹걻걼걽걾걿겂겇겈겍겎겏겑겒겓겕겖겗겘겙겚겛겞겢겣겤겥겦겧겫겭겮겱겲겳겴겵겶겷겺겾겿곀곂곃곅곆곇곉곊곋곍곎곏곐곑곒곓곔곖곘곙곚곛곜곝곞곟곢곣곥곦곩곫곭곮곲곴곷곸곹곺곻곾곿괁괂괃괅괇괈괉괊괋괎괐괒괓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[129].length; ++j) if(D[129][j].charCodeAt(0) !== 0xFFFD) { e[D[129][j]] = 33024 + j; d[33024 + j] = D[129][j];}\\nD[130] = \\\"�����������������������������������������������������������������괔괕괖괗괙괚괛괝괞괟괡괢괣괤괥괦괧괨괪괫괮괯괰괱괲괳������괶괷괹괺괻괽괾괿굀굁굂굃굆굈굊굋굌굍굎굏굑굒굓굕굖굗������굙굚굛굜굝굞굟굠굢굤굥굦굧굨굩굪굫굮굯굱굲굷굸굹굺굾궀궃궄궅궆궇궊궋궍궎궏궑궒궓궔궕궖궗궘궙궚궛궞궟궠궡궢궣궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궸궹궺궻궼궽궾궿귂귃귅귆귇귉귊귋귌귍귎귏귒귔귕귖귗귘귙귚귛귝귞귟귡귢귣귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[130].length; ++j) if(D[130][j].charCodeAt(0) !== 0xFFFD) { e[D[130][j]] = 33280 + j; d[33280 + j] = D[130][j];}\\nD[131] = \\\"�����������������������������������������������������������������귺귻귽귾긂긃긄긅긆긇긊긌긎긏긐긑긒긓긕긖긗긘긙긚긛긜������긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯긲긳긵긶긹긻긼������긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗깘깙깚깛깞깢깣깤깦깧깪깫깭깮깯깱깲깳깴깵깶깷깺깾깿꺀꺁꺂꺃꺆꺇꺈꺉꺊꺋꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺿껁껂껃껅껆껇껈껉껊껋껎껒껓껔껕껖껗껚껛껝껞껟껠껡껢껣껤껥�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[131].length; ++j) if(D[131][j].charCodeAt(0) !== 0xFFFD) { e[D[131][j]] = 33536 + j; d[33536 + j] = D[131][j];}\\nD[132] = \\\"�����������������������������������������������������������������껦껧껩껪껬껮껯껰껱껲껳껵껶껷껹껺껻껽껾껿꼀꼁꼂꼃꼄꼅������꼆꼉꼊꼋꼌꼎꼏꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣������꼤꼥꼦꼧꼨꼩꼪꼫꼮꼯꼱꼳꼵꼶꼷꼸꼹꼺꼻꼾꽀꽄꽅꽆꽇꽊꽋꽌꽍꽎꽏꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽞꽟꽠꽡꽢꽣꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽺꽻꽼꽽꽾꽿꾁꾂꾃꾅꾆꾇꾉꾊꾋꾌꾍꾎꾏꾒꾓꾔꾖꾗꾘꾙꾚꾛꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾺꾻꾽꾾�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[132].length; ++j) if(D[132][j].charCodeAt(0) !== 0xFFFD) { e[D[132][j]] = 33792 + j; d[33792 + j] = D[132][j];}\\nD[133] = \\\"�����������������������������������������������������������������꾿꿁꿂꿃꿄꿅꿆꿊꿌꿏꿐꿑꿒꿓꿕꿖꿗꿘꿙꿚꿛꿝꿞꿟꿠꿡������꿢꿣꿤꿥꿦꿧꿪꿫꿬꿭꿮꿯꿲꿳꿵꿶꿷꿹꿺꿻꿼꿽꿾꿿뀂뀃������뀅뀆뀇뀈뀉뀊뀋뀍뀎뀏뀑뀒뀓뀕뀖뀗뀘뀙뀚뀛뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끾끿낁낂낃낅낆낇낈낉낊낋낎낐낒낓낔낕낖낗낛낝낞낣낤�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[133].length; ++j) if(D[133][j].charCodeAt(0) !== 0xFFFD) { e[D[133][j]] = 34048 + j; d[34048 + j] = D[133][j];}\\nD[134] = \\\"�����������������������������������������������������������������낥낦낧낪낰낲낶낷낹낺낻낽낾낿냀냁냂냃냆냊냋냌냍냎냏냒������냓냕냖냗냙냚냛냜냝냞냟냡냢냣냤냦냧냨냩냪냫냬냭냮냯냰������냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇넊넍넎넏넑넔넕넖넗넚넞넟넠넡넢넦넧넩넪넫넭넮넯넰넱넲넳넶넺넻넼넽넾넿녂녃녅녆녇녉녊녋녌녍녎녏녒녓녖녗녙녚녛녝녞녟녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷녺녻녽녾녿놁놃놄놅놆놇놊놌놎놏놐놑놕놖놗놙놚놛놝�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[134].length; ++j) if(D[134][j].charCodeAt(0) !== 0xFFFD) { e[D[134][j]] = 34304 + j; d[34304 + j] = D[134][j];}\\nD[135] = \\\"�����������������������������������������������������������������놞놟놠놡놢놣놤놥놦놧놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸������놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇍뇎뇏뇑뇒뇓뇕������뇖뇗뇘뇙뇚뇛뇞뇠뇡뇢뇣뇤뇥뇦뇧뇪뇫뇭뇮뇯뇱뇲뇳뇴뇵뇶뇷뇸뇺뇼뇾뇿눀눁눂눃눆눇눉눊눍눎눏눐눑눒눓눖눘눚눛눜눝눞눟눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눵눶눷눸눹눺눻눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉙뉚뉛뉝뉞뉟뉡뉢뉣뉤뉥뉦뉧뉪뉫뉬뉭뉮�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[135].length; ++j) if(D[135][j].charCodeAt(0) !== 0xFFFD) { e[D[135][j]] = 34560 + j; d[34560 + j] = D[135][j];}\\nD[136] = \\\"�����������������������������������������������������������������뉯뉰뉱뉲뉳뉶뉷뉸뉹뉺뉻뉽뉾뉿늀늁늂늃늆늇늈늊늋늌늍늎������늏늒늓늕늖늗늛늜늝늞늟늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷������늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇닊닋닍닎닏닑닓닔닕닖닗닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉댊댋댌댍댎댏댒댖댗댘댙댚댛댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓덗덙덚덝덠덡덢덣�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[136].length; ++j) if(D[136][j].charCodeAt(0) !== 0xFFFD) { e[D[136][j]] = 34816 + j; d[34816 + j] = D[136][j];}\\nD[137] = \\\"�����������������������������������������������������������������덦덨덪덬덭덯덲덳덵덶덷덹덺덻덼덽덾덿뎂뎆뎇뎈뎉뎊뎋뎍������뎎뎏뎑뎒뎓뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎢뎣뎤뎥뎦뎧뎩뎪뎫뎭������뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됑됒됓됔됕됖됗됙됚됛됝됞됟됡됢됣됤됥됦됧됪됬됭됮됯됰됱됲됳됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[137].length; ++j) if(D[137][j].charCodeAt(0) !== 0xFFFD) { e[D[137][j]] = 35072 + j; d[35072 + j] = D[137][j];}\\nD[138] = \\\"�����������������������������������������������������������������둅둆둇둈둉둊둋둌둍둎둏둒둓둕둖둗둙둚둛둜둝둞둟둢둤둦������둧둨둩둪둫둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒁뒂������뒃뒄뒅뒆뒇뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒞뒟뒠뒡뒢뒣뒥뒦뒧뒩뒪뒫뒭뒮뒯뒰뒱뒲뒳뒴뒶뒸뒺뒻뒼뒽뒾뒿듁듂듃듅듆듇듉듊듋듌듍듎듏듑듒듓듔듖듗듘듙듚듛듞듟듡듢듥듧듨듩듪듫듮듰듲듳듴듵듶듷듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓딖딗딙딚딝�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[138].length; ++j) if(D[138][j].charCodeAt(0) !== 0xFFFD) { e[D[138][j]] = 35328 + j; d[35328 + j] = D[138][j];}\\nD[139] = \\\"�����������������������������������������������������������������딞딟딠딡딢딣딦딫딬딭딮딯딲딳딵딶딷딹딺딻딼딽딾딿땂땆������땇땈땉땊땎땏땑땒땓땕땖땗땘땙땚땛땞땢땣땤땥땦땧땨땩땪������땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떢떣떥떦떧떩떬떭떮떯떲떶떷떸떹떺떾떿뗁뗂뗃뗅뗆뗇뗈뗉뗊뗋뗎뗒뗓뗔뗕뗖뗗뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[139].length; ++j) if(D[139][j].charCodeAt(0) !== 0xFFFD) { e[D[139][j]] = 35584 + j; d[35584 + j] = D[139][j];}\\nD[140] = \\\"�����������������������������������������������������������������똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏똒똓똕똖똗똙똚똛똜똝������똞똟똠똡똢똣똤똦똧똨똩똪똫똭똮똯똰똱똲똳똵똶똷똸똹똺������똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙥뙦뙧뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚞뚟뚡뚢뚣뚥뚦뚧뚨뚩뚪뚭뚮뚯뚰뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[140].length; ++j) if(D[140][j].charCodeAt(0) !== 0xFFFD) { e[D[140][j]] = 35840 + j; d[35840 + j] = D[140][j];}\\nD[141] = \\\"�����������������������������������������������������������������뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛕뛖뛗뛘뛙뛚뛛뛜뛝������뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛱뛲뛳뛵뛶뛷뛹뛺������뛻뛼뛽뛾뛿뜂뜃뜄뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜪뜫뜭뜮뜱뜲뜳뜴뜵뜶뜷뜺뜼뜽뜾뜿띀띁띂띃띅띆띇띉띊띋띍띎띏띐띑띒띓띖띗띘띙띚띛띜띝띞띟띡띢띣띥띦띧띩띪띫띬띭띮띯띲띴띶띷띸띹띺띻띾띿랁랂랃랅랆랇랈랉랊랋랎랓랔랕랚랛랝랞�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[141].length; ++j) if(D[141][j].charCodeAt(0) !== 0xFFFD) { e[D[141][j]] = 36096 + j; d[36096 + j] = D[141][j];}\\nD[142] = \\\"�����������������������������������������������������������������랟랡랢랣랤랥랦랧랪랮랯랰랱랲랳랶랷랹랺랻랼랽랾랿럀럁������럂럃럄럅럆럈럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝������럞럟럠럡럢럣럤럥럦럧럨럩럪럫럮럯럱럲럳럵럶럷럸럹럺럻럾렂렃렄렅렆렊렋렍렎렏렑렒렓렔렕렖렗렚렜렞렟렠렡렢렣렦렧렩렪렫렭렮렯렰렱렲렳렶렺렻렼렽렾렿롁롂롃롅롆롇롈롉롊롋롌롍롎롏롐롒롔롕롖롗롘롙롚롛롞롟롡롢롣롥롦롧롨롩롪롫롮롰롲롳롴롵롶롷롹롺롻롽롾롿뢀뢁뢂뢃뢄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[142].length; ++j) if(D[142][j].charCodeAt(0) !== 0xFFFD) { e[D[142][j]] = 36352 + j; d[36352 + j] = D[142][j];}\\nD[143] = \\\"�����������������������������������������������������������������뢅뢆뢇뢈뢉뢊뢋뢌뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟������뢠뢡뢢뢣뢤뢥뢦뢧뢩뢪뢫뢬뢭뢮뢯뢱뢲뢳뢵뢶뢷뢹뢺뢻뢼뢽������뢾뢿룂룄룆룇룈룉룊룋룍룎룏룑룒룓룕룖룗룘룙룚룛룜룞룠룢룣룤룥룦룧룪룫룭룮룯룱룲룳룴룵룶룷룺룼룾룿뤀뤁뤂뤃뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤙뤚뤛뤜뤝뤞뤟뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤾뤿륁륂륃륅륆륇륈륉륊륋륍륎륐륒륓륔륕륖륗�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[143].length; ++j) if(D[143][j].charCodeAt(0) !== 0xFFFD) { e[D[143][j]] = 36608 + j; d[36608 + j] = D[143][j];}\\nD[144] = \\\"�����������������������������������������������������������������륚륛륝륞륟륡륢륣륤륥륦륧륪륬륮륯륰륱륲륳륶륷륹륺륻륽������륾륿릀릁릂릃릆릈릋릌릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞������릟릠릡릢릣릤릥릦릧릨릩릪릫릮릯릱릲릳릵릶릷릸릹릺릻릾맀맂맃맄맅맆맇맊맋맍맓맔맕맖맗맚맜맟맠맢맦맧맩맪맫맭맮맯맰맱맲맳맶맻맼맽맾맿먂먃먄먅먆먇먉먊먋먌먍먎먏먐먑먒먓먔먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷먺먻먽먾먿멁멃멄멅멆�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[144].length; ++j) if(D[144][j].charCodeAt(0) !== 0xFFFD) { e[D[144][j]] = 36864 + j; d[36864 + j] = D[144][j];}\\nD[145] = \\\"�����������������������������������������������������������������멇멊멌멏멐멑멒멖멗멙멚멛멝멞멟멠멡멢멣멦멪멫멬멭멮멯������멲멳멵멶멷멹멺멻멼멽멾멿몀몁몂몆몈몉몊몋몍몎몏몐몑몒������몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧몪몭몮몯몱몳몴몵몶몷몺몼몾몿뫀뫁뫂뫃뫅뫆뫇뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫽뫾뫿묁묂묃묅묆묇묈묉묊묋묌묎묐묒묓묔묕묖묗묙묚묛묝묞묟묡묢묣묤묥묦묧�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[145].length; ++j) if(D[145][j].charCodeAt(0) !== 0xFFFD) { e[D[145][j]] = 37120 + j; d[37120 + j] = D[145][j];}\\nD[146] = \\\"�����������������������������������������������������������������묨묪묬묭묮묯묰묱묲묳묷묹묺묿뭀뭁뭂뭃뭆뭈뭊뭋뭌뭎뭑뭒������뭓뭕뭖뭗뭙뭚뭛뭜뭝뭞뭟뭠뭢뭤뭥뭦뭧뭨뭩뭪뭫뭭뭮뭯뭰뭱������뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮉뮊뮋뮍뮎뮏뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮥뮦뮧뮩뮪뮫뮭뮮뮯뮰뮱뮲뮳뮵뮶뮸뮹뮺뮻뮼뮽뮾뮿믁믂믃믅믆믇믉믊믋믌믍믎믏믑믒믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷믺믻믽믾밁�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[146].length; ++j) if(D[146][j].charCodeAt(0) !== 0xFFFD) { e[D[146][j]] = 37376 + j; d[37376 + j] = D[146][j];}\\nD[147] = \\\"�����������������������������������������������������������������밃밄밅밆밇밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵������밶밷밹밺밻밼밽밾밿뱂뱆뱇뱈뱊뱋뱎뱏뱑뱒뱓뱔뱕뱖뱗뱘뱙������뱚뱛뱜뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃벆벇벉벊벍벏벐벑벒벓벖벘벛벜벝벞벟벢벣벥벦벩벪벫벬벭벮벯벲벶벷벸벹벺벻벾벿볁볂볃볅볆볇볈볉볊볋볌볎볒볓볔볖볗볙볚볛볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳볷볹볺볻볽�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[147].length; ++j) if(D[147][j].charCodeAt(0) !== 0xFFFD) { e[D[147][j]] = 37632 + j; d[37632 + j] = D[147][j];}\\nD[148] = \\\"�����������������������������������������������������������������볾볿봀봁봂봃봆봈봊봋봌봍봎봏봑봒봓봕봖봗봘봙봚봛봜봝������봞봟봠봡봢봣봥봦봧봨봩봪봫봭봮봯봰봱봲봳봴봵봶봷봸봹������봺봻봼봽봾봿뵁뵂뵃뵄뵅뵆뵇뵊뵋뵍뵎뵏뵑뵒뵓뵔뵕뵖뵗뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵥뵦뵧뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿붂붃붅붆붋붌붍붎붏붒붔붖붗붘붛붝붞붟붠붡붢붣붥붦붧붨붩붪붫붬붭붮붯붱붲붳붴붵붶붷붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[148].length; ++j) if(D[148][j].charCodeAt(0) !== 0xFFFD) { e[D[148][j]] = 37888 + j; d[37888 + j] = D[148][j];}\\nD[149] = \\\"�����������������������������������������������������������������뷒뷓뷖뷗뷙뷚뷛뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷪뷫뷬뷭뷮뷯뷱������뷲뷳뷵뷶뷷뷹뷺뷻뷼뷽뷾뷿븁븂븄븆븇븈븉븊븋븎븏븑븒븓������븕븖븗븘븙븚븛븞븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃빆빇빉빊빋빍빏빐빑빒빓빖빘빜빝빞빟빢빣빥빦빧빩빫빬빭빮빯빲빶빷빸빹빺빾빿뺁뺂뺃뺅뺆뺇뺈뺉뺊뺋뺎뺒뺓뺔뺕뺖뺗뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[149].length; ++j) if(D[149][j].charCodeAt(0) !== 0xFFFD) { e[D[149][j]] = 38144 + j; d[38144 + j] = D[149][j];}\\nD[150] = \\\"�����������������������������������������������������������������뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻒뻓������뻕뻖뻙뻚뻛뻜뻝뻞뻟뻡뻢뻦뻧뻨뻩뻪뻫뻭뻮뻯뻰뻱뻲뻳뻴뻵������뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼂뼃뼄뼅뼆뼇뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼚뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽂뽃뽅뽆뽇뽉뽊뽋뽌뽍뽎뽏뽒뽓뽔뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[150].length; ++j) if(D[150][j].charCodeAt(0) !== 0xFFFD) { e[D[150][j]] = 38400 + j; d[38400 + j] = D[150][j];}\\nD[151] = \\\"�����������������������������������������������������������������뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾕뾖뾗뾘뾙뾚뾛뾜뾝������뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾱뾲뾳뾴뾵뾶뾷뾸������뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿆뿇뿈뿉뿊뿋뿎뿏뿑뿒뿓뿕뿖뿗뿘뿙뿚뿛뿝뿞뿠뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀽쀾쀿�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[151].length; ++j) if(D[151][j].charCodeAt(0) !== 0xFFFD) { e[D[151][j]] = 38656 + j; d[38656 + j] = D[151][j];}\\nD[152] = \\\"�����������������������������������������������������������������쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁒쁓쁔쁕쁖쁗쁙쁚쁛������쁝쁞쁟쁡쁢쁣쁤쁥쁦쁧쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹������쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삒삓삕삖삗삙삚삛삜삝삞삟삢삤삦삧삨삩삪삫삮삱삲삷삸삹삺삻삾샂샃샄샆샇샊샋샍샎샏샑샒샓샔샕샖샗샚샞샟샠샡샢샣샦샧샩샪샫샭샮샯샰샱샲샳샶샸샺샻샼샽샾샿섁섂섃섅섆섇섉섊섋섌섍섎섏섑섒섓섔섖섗섘섙섚섛섡섢섥섨섩섪섫섮�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[152].length; ++j) if(D[152][j].charCodeAt(0) !== 0xFFFD) { e[D[152][j]] = 38912 + j; d[38912 + j] = D[152][j];}\\nD[153] = \\\"�����������������������������������������������������������������섲섳섴섵섷섺섻섽섾섿셁셂셃셄셅셆셇셊셎셏셐셑셒셓셖셗������셙셚셛셝셞셟셠셡셢셣셦셪셫셬셭셮셯셱셲셳셵셶셷셹셺셻������셼셽셾셿솀솁솂솃솄솆솇솈솉솊솋솏솑솒솓솕솗솘솙솚솛솞솠솢솣솤솦솧솪솫솭솮솯솱솲솳솴솵솶솷솸솹솺솻솼솾솿쇀쇁쇂쇃쇅쇆쇇쇉쇊쇋쇍쇎쇏쇐쇑쇒쇓쇕쇖쇙쇚쇛쇜쇝쇞쇟쇡쇢쇣쇥쇦쇧쇩쇪쇫쇬쇭쇮쇯쇲쇴쇵쇶쇷쇸쇹쇺쇻쇾쇿숁숂숃숅숆숇숈숉숊숋숎숐숒숓숔숕숖숗숚숛숝숞숡숢숣�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[153].length; ++j) if(D[153][j].charCodeAt(0) !== 0xFFFD) { e[D[153][j]] = 39168 + j; d[39168 + j] = D[153][j];}\\nD[154] = \\\"�����������������������������������������������������������������숤숥숦숧숪숬숮숰숳숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅������쉆쉇쉉쉊쉋쉌쉍쉎쉏쉒쉓쉕쉖쉗쉙쉚쉛쉜쉝쉞쉟쉡쉢쉣쉤쉦������쉧쉨쉩쉪쉫쉮쉯쉱쉲쉳쉵쉶쉷쉸쉹쉺쉻쉾슀슂슃슄슅슆슇슊슋슌슍슎슏슑슒슓슔슕슖슗슙슚슜슞슟슠슡슢슣슦슧슩슪슫슮슯슰슱슲슳슶슸슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛싞싟싡싢싥싦싧싨싩싪싮싰싲싳싴싵싷싺싽싾싿쌁쌂쌃쌄쌅쌆쌇쌊쌋쌎쌏�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[154].length; ++j) if(D[154][j].charCodeAt(0) !== 0xFFFD) { e[D[154][j]] = 39424 + j; d[39424 + j] = D[154][j];}\\nD[155] = \\\"�����������������������������������������������������������������쌐쌑쌒쌖쌗쌙쌚쌛쌝쌞쌟쌠쌡쌢쌣쌦쌧쌪쌫쌬쌭쌮쌯쌰쌱쌲������쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썆썇썈썉썊썋썌썍������썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧썪썫썭썮썯썱썳썴썵썶썷썺썻썾썿쎀쎁쎂쎃쎅쎆쎇쎉쎊쎋쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏚�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[155].length; ++j) if(D[155][j].charCodeAt(0) !== 0xFFFD) { e[D[155][j]] = 39680 + j; d[39680 + j] = D[155][j];}\\nD[156] = \\\"�����������������������������������������������������������������쏛쏝쏞쏡쏣쏤쏥쏦쏧쏪쏫쏬쏮쏯쏰쏱쏲쏳쏶쏷쏹쏺쏻쏼쏽쏾������쏿쐀쐁쐂쐃쐄쐅쐆쐇쐉쐊쐋쐌쐍쐎쐏쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚������쐛쐜쐝쐞쐟쐠쐡쐢쐣쐥쐦쐧쐨쐩쐪쐫쐭쐮쐯쐱쐲쐳쐵쐶쐷쐸쐹쐺쐻쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑦쑧쑩쑪쑫쑭쑮쑯쑰쑱쑲쑳쑶쑷쑸쑺쑻쑼쑽쑾쑿쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒕쒖쒗쒘쒙쒚쒛쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[156].length; ++j) if(D[156][j].charCodeAt(0) !== 0xFFFD) { e[D[156][j]] = 39936 + j; d[39936 + j] = D[156][j];}\\nD[157] = \\\"�����������������������������������������������������������������쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒹쒺쒻쒽쒾쒿쓀쓁쓂쓃쓄쓅������쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟������쓠쓡쓢쓣쓤쓥쓦쓧쓨쓪쓫쓬쓭쓮쓯쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂씃씄씅씆씇씈씉씊씋씍씎씏씑씒씓씕씖씗씘씙씚씛씝씞씟씠씡씢씣씤씥씦씧씪씫씭씮씯씱씲씳씴씵씶씷씺씼씾씿앀앁앂앃앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩앪앫앬앭앮앯앲앶앷앸앹앺앻앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[157].length; ++j) if(D[157][j].charCodeAt(0) !== 0xFFFD) { e[D[157][j]] = 40192 + j; d[40192 + j] = D[157][j];}\\nD[158] = \\\"�����������������������������������������������������������������얖얙얚얛얝얞얟얡얢얣얤얥얦얧얨얪얫얬얭얮얯얰얱얲얳얶������얷얺얿엀엁엂엃엋엍엏엒엓엕엖엗엙엚엛엜엝엞엟엢엤엦엧������엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑옒옓옔옕옖옗옚옝옞옟옠옡옢옣옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉왊왋왌왍왎왏왒왖왗왘왙왚왛왞왟왡왢왣왤왥왦왧왨왩왪왫왭왮왰왲왳왴왵왶왷왺왻왽왾왿욁욂욃욄욅욆욇욊욌욎욏욐욑욒욓욖욗욙욚욛욝욞욟욠욡욢욣욦�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[158].length; ++j) if(D[158][j].charCodeAt(0) !== 0xFFFD) { e[D[158][j]] = 40448 + j; d[40448 + j] = D[158][j];}\\nD[159] = \\\"�����������������������������������������������������������������욨욪욫욬욭욮욯욲욳욵욶욷욻욼욽욾욿웂웄웆웇웈웉웊웋웎������웏웑웒웓웕웖웗웘웙웚웛웞웟웢웣웤웥웦웧웪웫웭웮웯웱웲������웳웴웵웶웷웺웻웼웾웿윀윁윂윃윆윇윉윊윋윍윎윏윐윑윒윓윖윘윚윛윜윝윞윟윢윣윥윦윧윩윪윫윬윭윮윯윲윴윶윸윹윺윻윾윿읁읂읃읅읆읇읈읉읋읎읐읙읚읛읝읞읟읡읢읣읤읥읦읧읩읪읬읭읮읯읰읱읲읳읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛잜잝잞잟잢잧잨잩잪잫잮잯잱잲잳잵잶잷�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[159].length; ++j) if(D[159][j].charCodeAt(0) !== 0xFFFD) { e[D[159][j]] = 40704 + j; d[40704 + j] = D[159][j];}\\nD[160] = \\\"�����������������������������������������������������������������잸잹잺잻잾쟂쟃쟄쟅쟆쟇쟊쟋쟍쟏쟑쟒쟓쟔쟕쟖쟗쟙쟚쟛쟜������쟞쟟쟠쟡쟢쟣쟥쟦쟧쟩쟪쟫쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺������쟻쟼쟽쟾쟿젂젃젅젆젇젉젋젌젍젎젏젒젔젗젘젙젚젛젞젟젡젢젣젥젦젧젨젩젪젫젮젰젲젳젴젵젶젷젹젺젻젽젾젿졁졂졃졄졅졆졇졊졋졎졏졐졑졒졓졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯졲졳졵졶졷졹졻졼졽졾졿좂좄좈좉좊좎좏좐좑좒좓좕좖좗좘좙좚좛좜좞좠좢좣좤�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[160].length; ++j) if(D[160][j].charCodeAt(0) !== 0xFFFD) { e[D[160][j]] = 40960 + j; d[40960 + j] = D[160][j];}\\nD[161] = \\\"�����������������������������������������������������������������좥좦좧좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좾좿죀죁������죂죃죅죆죇죉죊죋죍죎죏죐죑죒죓죖죘죚죛죜죝죞죟죢죣죥������죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죶죷죸죹죺죻죾죿줁줂줃줇줈줉줊줋줎 、。·‥…¨〃―∥\∼‘’“”〔〕〈〉《》「」『』【】±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\\nD[162] = \\\"�����������������������������������������������������������������줐줒줓줔줕줖줗줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫������줭줮줯줰줱줲줳줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇������쥈쥉쥊쥋쥌쥍쥎쥏쥒쥓쥕쥖쥗쥙쥚쥛쥜쥝쥞쥟쥢쥤쥥쥦쥧쥨쥩쥪쥫쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\\nD[163] = \\\"�����������������������������������������������������������������쥱쥲쥳쥵쥶쥷쥸쥹쥺쥻쥽쥾쥿즀즁즂즃즄즅즆즇즊즋즍즎즏������즑즒즓즔즕즖즗즚즜즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮������즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿짂짃짅짆짉짋짌짍짎짏짒짔짗짘짛!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[₩]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\\nD[164] = \\\"�����������������������������������������������������������������짞짟짡짣짥짦짨짩짪짫짮짲짳짴짵짶짷짺짻짽짾짿쨁쨂쨃쨄������쨅쨆쨇쨊쨎쨏쨐쨑쨒쨓쨕쨖쨗쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥������쨦쨧쨨쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\\nD[165] = \\\"�����������������������������������������������������������������쩇쩈쩉쩊쩋쩎쩏쩑쩒쩓쩕쩖쩗쩘쩙쩚쩛쩞쩢쩣쩤쩥쩦쩧쩩쩪������쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩾쩿쪀쪁쪂쪃쪅쪆������쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ�����ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\\nD[166] = \\\"�����������������������������������������������������������������쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪾쪿쫁쫂쫃쫅������쫆쫇쫈쫉쫊쫋쫎쫐쫒쫔쫕쫖쫗쫚쫛쫜쫝쫞쫟쫡쫢쫣쫤쫥쫦쫧������쫨쫩쫪쫫쫭쫮쫯쫰쫱쫲쫳쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃╄╅╆╇╈╉╊���������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\\nD[167] = \\\"�����������������������������������������������������������������쬋쬌쬍쬎쬏쬑쬒쬓쬕쬖쬗쬙쬚쬛쬜쬝쬞쬟쬢쬣쬤쬥쬦쬧쬨쬩������쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭂쭃쭄������쭅쭆쭇쭊쭋쭍쭎쭏쭑쭒쭓쭔쭕쭖쭗쭚쭛쭜쭞쭟쭠쭡쭢쭣쭥쭦쭧쭨쭩쭪쭫쭬㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆����������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\\nD[168] = \\\"�����������������������������������������������������������������쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈������쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮝쮞쮟쮠쮡쮢쮣������쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄ÆÐªĦ�IJ�ĿŁØŒºÞŦŊ�㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮½⅓⅔¼¾⅛⅜⅝⅞�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\\nD[169] = \\\"�����������������������������������������������������������������쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟������쯠쯡쯢쯣쯥쯦쯨쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼������쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찎찏찑찒찓찕찖찗찘찙찚찛찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂¹²³⁴ⁿ₁₂₃₄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\\nD[170] = \\\"�����������������������������������������������������������������찥찦찪찫찭찯찱찲찳찴찵찶찷찺찿챀챁챂챃챆챇챉챊챋챍챎������챏챐챑챒챓챖챚챛챜챝챞챟챡챢챣챥챧챩챪챫챬챭챮챯챱챲������챳챴챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\\nD[171] = \\\"�����������������������������������������������������������������첔첕첖첗첚첛첝첞첟첡첢첣첤첥첦첧첪첮첯첰첱첲첳첶첷첹������첺첻첽첾첿쳀쳁쳂쳃쳆쳈쳊쳋쳌쳍쳎쳏쳑쳒쳓쳕쳖쳗쳘쳙쳚������쳛쳜쳝쳞쳟쳠쳡쳢쳣쳥쳦쳧쳨쳩쳪쳫쳭쳮쳯쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\\nD[172] = \\\"�����������������������������������������������������������������쳾쳿촀촂촃촄촅촆촇촊촋촍촎촏촑촒촓촔촕촖촗촚촜촞촟촠������촡촢촣촥촦촧촩촪촫촭촮촯촰촱촲촳촴촵촶촷촸촺촻촼촽촾������촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛쵝쵞쵟АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\\nD[173] = \\\"�����������������������������������������������������������������쵡쵢쵣쵥쵦쵧쵨쵩쵪쵫쵮쵰쵲쵳쵴쵵쵶쵷쵹쵺쵻쵼쵽쵾쵿춀������춁춂춃춄춅춆춇춉춊춋춌춍춎춏춐춑춒춓춖춗춙춚춛춝춞춟������춠춡춢춣춦춨춪춫춬춭춮춯춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췅�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\\nD[174] = \\\"�����������������������������������������������������������������췆췇췈췉췊췋췍췎췏췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡������췢췣췤췥췦췧췩췪췫췭췮췯췱췲췳췴췵췶췷췺췼췾췿츀츁츂������츃츅츆츇츉츊츋츍츎츏츐츑츒츓츕츖츗츘츚츛츜츝츞츟츢츣츥츦츧츩츪츫�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\\nD[175] = \\\"�����������������������������������������������������������������츬츭츮츯츲츴츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉������칊칋칌칍칎칏칐칑칒칓칔칕칖칗칚칛칝칞칢칣칤칥칦칧칪칬������칮칯칰칱칲칳칶칷칹칺칻칽칾칿캀캁캂캃캆캈캊캋캌캍캎캏캒캓캕캖캗캙�����������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\\nD[176] = \\\"�����������������������������������������������������������������캚캛캜캝캞캟캢캦캧캨캩캪캫캮캯캰캱캲캳캴캵캶캷캸캹캺������캻캼캽캾캿컀컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕������컖컗컘컙컚컛컜컝컞컟컠컡컢컣컦컧컩컪컭컮컯컰컱컲컳컶컺컻컼컽컾컿가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\\nD[177] = \\\"�����������������������������������������������������������������켂켃켅켆켇켉켊켋켌켍켎켏켒켔켖켗켘켙켚켛켝켞켟켡켢켣������켥켦켧켨켩켪켫켮켲켳켴켵켶켷켹켺켻켼켽켾켿콀콁콂콃콄������콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓콖콗콙콚콛콝콞콟콠콡콢콣콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\\nD[178] = \\\"�����������������������������������������������������������������콭콮콯콲콳콵콶콷콹콺콻콼콽콾콿쾁쾂쾃쾄쾆쾇쾈쾉쾊쾋쾍������쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾢쾣쾤쾥쾦쾧쾩������쾪쾫쾬쾭쾮쾯쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿅쿆쿇쿈쿉쿊쿋깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\\nD[179] = \\\"�����������������������������������������������������������������쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿢쿣쿥쿦쿧쿩������쿪쿫쿬쿭쿮쿯쿲쿴쿶쿷쿸쿹쿺쿻쿽쿾쿿퀁퀂퀃퀅퀆퀇퀈퀉퀊������퀋퀌퀍퀎퀏퀐퀒퀓퀔퀕퀖퀗퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\\nD[180] = \\\"�����������������������������������������������������������������퀮퀯퀰퀱퀲퀳퀶퀷퀹퀺퀻퀽퀾퀿큀큁큂큃큆큈큊큋큌큍큎큏������큑큒큓큕큖큗큙큚큛큜큝큞큟큡큢큣큤큥큦큧큨큩큪큫큮큯������큱큲큳큵큶큷큸큹큺큻큾큿킀킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\\nD[181] = \\\"�����������������������������������������������������������������킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣킦킧킩킪킫킭킮킯킰킱킲������킳킶킸킺킻킼킽킾킿탂탃탅탆탇탊탋탌탍탎탏탒탖탗탘탙탚������탛탞탟탡탢탣탥탦탧탨탩탪탫탮탲탳탴탵탶탷탹탺탻탼탽탾탿턀턁턂턃턄덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\\nD[182] = \\\"�����������������������������������������������������������������턅턆턇턈턉턊턋턌턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟������턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯턲턳턵턶턷턹턻턼턽턾������턿텂텆텇텈텉텊텋텎텏텑텒텓텕텖텗텘텙텚텛텞텠텢텣텤텥텦텧텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\\nD[183] = \\\"�����������������������������������������������������������������텮텯텰텱텲텳텴텵텶텷텸텹텺텻텽텾텿톀톁톂톃톅톆톇톉톊������톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟톢톣톥톦톧������톩톪톫톬톭톮톯톲톴톶톷톸톹톻톽톾톿퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\\nD[184] = \\\"�����������������������������������������������������������������퇐퇑퇒퇓퇔퇕퇖퇗퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪������퇫퇬퇭퇮퇯퇰퇱퇲퇳퇵퇶퇷퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆������툈툊툋툌툍툎툏툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\\nD[185] = \\\"�����������������������������������������������������������������툪툫툮툯툱툲툳툵툶툷툸툹툺툻툾퉀퉂퉃퉄퉅퉆퉇퉉퉊퉋퉌������퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉝퉞퉟퉠퉡퉢퉣퉥퉦퉧퉨������퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\\nD[186] = \\\"�����������������������������������������������������������������튍튎튏튒튓튔튖튗튘튙튚튛튝튞튟튡튢튣튥튦튧튨튩튪튫튭������튮튯튰튲튳튴튵튶튷튺튻튽튾틁틃틄틅틆틇틊틌틍틎틏틐틑������틒틓틕틖틗틙틚틛틝틞틟틠틡틢틣틦틧틨틩틪틫틬틭틮틯틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\\nD[187] = \\\"�����������������������������������������������������������������틻틼틽틾틿팂팄팆팇팈팉팊팋팏팑팒팓팕팗팘팙팚팛팞팢팣������팤팦팧팪팫팭팮팯팱팲팳팴팵팶팷팺팾팿퍀퍁퍂퍃퍆퍇퍈퍉������퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\\nD[188] = \\\"�����������������������������������������������������������������퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍾퍿펁펂펃펅펆펇������펈펉펊펋펎펒펓펔펕펖펗펚펛펝펞펟펡펢펣펤펥펦펧펪펬펮������펯펰펱펲펳펵펶펷펹펺펻펽펾펿폀폁폂폃폆폇폊폋폌폍폎폏폑폒폓폔폕폖샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\\nD[189] = \\\"�����������������������������������������������������������������폗폙폚폛폜폝폞폟폠폢폤폥폦폧폨폩폪폫폮폯폱폲폳폵폶폷������폸폹폺폻폾퐀퐂퐃퐄퐅퐆퐇퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖������퐗퐘퐙퐚퐛퐜퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\\nD[190] = \\\"�����������������������������������������������������������������퐸퐹퐺퐻퐼퐽퐾퐿푁푂푃푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓������푔푕푖푗푘푙푚푛푝푞푟푡푢푣푥푦푧푨푩푪푫푬푮푰푱푲������푳푴푵푶푷푺푻푽푾풁풃풄풅풆풇풊풌풎풏풐풑풒풓풕풖풗풘풙풚풛풜풝쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\\nD[191] = \\\"�����������������������������������������������������������������풞풟풠풡풢풣풤풥풦풧풨풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸������풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓍퓎퓏퓑퓒퓓퓕������퓖퓗퓘퓙퓚퓛퓝퓞퓠퓡퓢퓣퓤퓥퓦퓧퓩퓪퓫퓭퓮퓯퓱퓲퓳퓴퓵퓶퓷퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\\nD[192] = \\\"�����������������������������������������������������������������퓾퓿픀픁픂픃픅픆픇픉픊픋픍픎픏픐픑픒픓픖픘픙픚픛픜픝������픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷������픸픹픺픻픾픿핁핂핃핅핆핇핈핉핊핋핎핐핒핓핔핕핖핗핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\\nD[193] = \\\"�����������������������������������������������������������������핤핦핧핪핬핮핯핰핱핲핳핶핷핹핺핻핽핾핿햀햁햂햃햆햊햋������햌햍햎햏햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤햦햧������햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\\nD[194] = \\\"�����������������������������������������������������������������헊헋헍헎헏헑헓헔헕헖헗헚헜헞헟헠헡헢헣헦헧헩헪헫헭헮������헯헰헱헲헳헶헸헺헻헼헽헾헿혂혃혅혆혇혉혊혋혌혍혎혏혒������혖혗혘혙혚혛혝혞혟혡혢혣혥혦혧혨혩혪혫혬혮혯혰혱혲혳혴혵혶혷혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\\nD[195] = \\\"�����������������������������������������������������������������혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝홞홟홠홡������홢홣홤홥홦홨홪홫홬홭홮홯홲홳홵홶홷홸홹홺홻홼홽홾홿횀������횁횂횄횆횇횈횉횊횋횎횏횑횒횓횕횖횗횘횙횚횛횜횞횠횢횣횤횥횦횧횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\\nD[196] = \\\"�����������������������������������������������������������������횫횭횮횯횱횲횳횴횵횶횷횸횺횼횽횾횿훀훁훂훃훆훇훉훊훋������훍훎훏훐훒훓훕훖훘훚훛훜훝훞훟훡훢훣훥훦훧훩훪훫훬훭������훮훯훱훲훳훴훶훷훸훹훺훻훾훿휁휂휃휅휆휇휈휉휊휋휌휍휎휏휐휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\\nD[197] = \\\"�����������������������������������������������������������������휕휖휗휚휛휝휞휟휡휢휣휤휥휦휧휪휬휮휯휰휱휲휳휶휷휹������휺휻휽휾휿흀흁흂흃흅흆흈흊흋흌흍흎흏흒흓흕흚흛흜흝흞������흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵흶흷흸흹흺흻흾흿힀힂힃힄힅힆힇힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\\nD[198] = \\\"�����������������������������������������������������������������힍힎힏힑힒힓힔힕힖힗힚힜힞힟힠힡힢힣������������������������������������������������������������������������������퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\\nD[199] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[199].length; ++j) if(D[199][j].charCodeAt(0) !== 0xFFFD) { e[D[199][j]] = 50944 + j; d[50944 + j] = D[199][j];}\\nD[200] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[200].length; ++j) if(D[200][j].charCodeAt(0) !== 0xFFFD) { e[D[200][j]] = 51200 + j; d[51200 + j] = D[200][j];}\\nD[202] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\\nD[203] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\\nD[204] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\\nD[205] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\\nD[206] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\\nD[207] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\\nD[208] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\\nD[209] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那樂洛烙珞落諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\\nD[210] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������納臘蠟衲囊娘廊朗浪狼郎乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺碌祿綠菉錄鹿論壟弄濃籠聾膿農惱牢磊腦賂雷尿壘屢樓淚漏累縷陋嫩訥杻紐勒肋凜凌稜綾能菱陵尼泥匿溺多茶�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\\nD[211] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\\nD[212] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\\nD[213] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\\nD[214] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\\nD[215] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\\nD[216] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\\nD[217] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\\nD[218] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\\nD[219] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\\nD[220] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\\nD[221] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\\nD[222] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\\nD[223] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\\nD[224] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\\nD[225] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\\nD[226] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\\nD[227] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\\nD[228] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\\nD[229] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\\nD[230] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\\nD[231] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\\nD[232] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\\nD[233] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\\nD[234] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\\nD[235] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\\nD[236] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\\nD[237] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\\nD[238] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\\nD[239] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\\nD[240] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\\nD[241] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\\nD[242] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\\nD[243] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\\nD[244] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\\nD[245] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\\nD[246] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\\nD[247] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\\nD[248] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\\nD[249] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\\nD[250] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[250].length; ++j) if(D[250][j].charCodeAt(0) !== 0xFFFD) { e[D[250][j]] = 64000 + j; d[64000 + j] = D[250][j];}\\nD[251] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[251].length; ++j) if(D[251][j].charCodeAt(0) !== 0xFFFD) { e[D[251][j]] = 64256 + j; d[64256 + j] = D[251][j];}\\nD[252] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[252].length; ++j) if(D[252][j].charCodeAt(0) !== 0xFFFD) { e[D[252][j]] = 64512 + j; d[64512 + j] = D[252][j];}\\nD[253] = \\\"�����������������������������������������������������������������������������������������������������������������������������������������������������������������爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[253].length; ++j) if(D[253][j].charCodeAt(0) !== 0xFFFD) { e[D[253][j]] = 64768 + j; d[64768 + j] = D[253][j];}\\nreturn {\\\"enc\\\": e, \\\"dec\\\": d }; })();\\ncptable[950] = (function(){ var d = [], e = {}, D = [], j;\\nD[0] = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[0].length; ++j) if(D[0][j].charCodeAt(0) !== 0xFFFD) { e[D[0][j]] = 0 + j; d[0 + j] = D[0][j];}\\nD[161] = \\\"���������������������������������������������������������������� ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚����������������������������������﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢﹣﹤﹥﹦~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[161].length; ++j) if(D[161][j].charCodeAt(0) !== 0xFFFD) { e[D[161][j]] = 41216 + j; d[41216 + j] = D[161][j];}\\nD[162] = \\\"����������������������������������������������������������������\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭����������������������������������╮╰╯═╞╪╡◢◣◥◤╱╲╳0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ〡〢〣〤〥〦〧〨〩十卄卅ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[162].length; ++j) if(D[162][j].charCodeAt(0) !== 0xFFFD) { e[D[162][j]] = 41472 + j; d[41472 + j] = D[162][j];}\\nD[163] = \\\"����������������������������������������������������������������wxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ����������������������������������ㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ���������������������������������€������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[163].length; ++j) if(D[163][j].charCodeAt(0) !== 0xFFFD) { e[D[163][j]] = 41728 + j; d[41728 + j] = D[163][j];}\\nD[164] = \\\"����������������������������������������������������������������一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才����������������������������������丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[164].length; ++j) if(D[164][j].charCodeAt(0) !== 0xFFFD) { e[D[164][j]] = 41984 + j; d[41984 + j] = D[164][j];}\\nD[165] = \\\"����������������������������������������������������������������世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外����������������������������������央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[165].length; ++j) if(D[165][j].charCodeAt(0) !== 0xFFFD) { e[D[165][j]] = 42240 + j; d[42240 + j] = D[165][j];}\\nD[166] = \\\"����������������������������������������������������������������共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年����������������������������������式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[166].length; ++j) if(D[166][j].charCodeAt(0) !== 0xFFFD) { e[D[166][j]] = 42496 + j; d[42496 + j] = D[166][j];}\\nD[167] = \\\"����������������������������������������������������������������作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍����������������������������������均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[167].length; ++j) if(D[167][j].charCodeAt(0) !== 0xFFFD) { e[D[167][j]] = 42752 + j; d[42752 + j] = D[167][j];}\\nD[168] = \\\"����������������������������������������������������������������杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒����������������������������������芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[168].length; ++j) if(D[168][j].charCodeAt(0) !== 0xFFFD) { e[D[168][j]] = 43008 + j; d[43008 + j] = D[168][j];}\\nD[169] = \\\"����������������������������������������������������������������咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居����������������������������������屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[169].length; ++j) if(D[169][j].charCodeAt(0) !== 0xFFFD) { e[D[169][j]] = 43264 + j; d[43264 + j] = D[169][j];}\\nD[170] = \\\"����������������������������������������������������������������昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠����������������������������������炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[170].length; ++j) if(D[170][j].charCodeAt(0) !== 0xFFFD) { e[D[170][j]] = 43520 + j; d[43520 + j] = D[170][j];}\\nD[171] = \\\"����������������������������������������������������������������陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品����������������������������������哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[171].length; ++j) if(D[171][j].charCodeAt(0) !== 0xFFFD) { e[D[171][j]] = 43776 + j; d[43776 + j] = D[171][j];}\\nD[172] = \\\"����������������������������������������������������������������拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗����������������������������������活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[172].length; ++j) if(D[172][j].charCodeAt(0) !== 0xFFFD) { e[D[172][j]] = 44032 + j; d[44032 + j] = D[172][j];}\\nD[173] = \\\"����������������������������������������������������������������耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥����������������������������������迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[173].length; ++j) if(D[173][j].charCodeAt(0) !== 0xFFFD) { e[D[173][j]] = 44288 + j; d[44288 + j] = D[173][j];}\\nD[174] = \\\"����������������������������������������������������������������哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙����������������������������������恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[174].length; ++j) if(D[174][j].charCodeAt(0) !== 0xFFFD) { e[D[174][j]] = 44544 + j; d[44544 + j] = D[174][j];}\\nD[175] = \\\"����������������������������������������������������������������浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷����������������������������������砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[175].length; ++j) if(D[175][j].charCodeAt(0) !== 0xFFFD) { e[D[175][j]] = 44800 + j; d[44800 + j] = D[175][j];}\\nD[176] = \\\"����������������������������������������������������������������虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡����������������������������������陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[176].length; ++j) if(D[176][j].charCodeAt(0) !== 0xFFFD) { e[D[176][j]] = 45056 + j; d[45056 + j] = D[176][j];}\\nD[177] = \\\"����������������������������������������������������������������娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽����������������������������������情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[177].length; ++j) if(D[177][j].charCodeAt(0) !== 0xFFFD) { e[D[177][j]] = 45312 + j; d[45312 + j] = D[177][j];}\\nD[178] = \\\"����������������������������������������������������������������毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶����������������������������������瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[178].length; ++j) if(D[178][j].charCodeAt(0) !== 0xFFFD) { e[D[178][j]] = 45568 + j; d[45568 + j] = D[178][j];}\\nD[179] = \\\"����������������������������������������������������������������莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途����������������������������������部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[179].length; ++j) if(D[179][j].charCodeAt(0) !== 0xFFFD) { e[D[179][j]] = 45824 + j; d[45824 + j] = D[179][j];}\\nD[180] = \\\"����������������������������������������������������������������婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍����������������������������������插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[180].length; ++j) if(D[180][j].charCodeAt(0) !== 0xFFFD) { e[D[180][j]] = 46080 + j; d[46080 + j] = D[180][j];}\\nD[181] = \\\"����������������������������������������������������������������溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘����������������������������������窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[181].length; ++j) if(D[181][j].charCodeAt(0) !== 0xFFFD) { e[D[181][j]] = 46336 + j; d[46336 + j] = D[181][j];}\\nD[182] = \\\"����������������������������������������������������������������詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑����������������������������������間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[182].length; ++j) if(D[182][j].charCodeAt(0) !== 0xFFFD) { e[D[182][j]] = 46592 + j; d[46592 + j] = D[182][j];}\\nD[183] = \\\"����������������������������������������������������������������媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業����������������������������������楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[183].length; ++j) if(D[183][j].charCodeAt(0) !== 0xFFFD) { e[D[183][j]] = 46848 + j; d[46848 + j] = D[183][j];}\\nD[184] = \\\"����������������������������������������������������������������睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫����������������������������������腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[184].length; ++j) if(D[184][j].charCodeAt(0) !== 0xFFFD) { e[D[184][j]] = 47104 + j; d[47104 + j] = D[184][j];}\\nD[185] = \\\"����������������������������������������������������������������辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴����������������������������������飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[185].length; ++j) if(D[185][j].charCodeAt(0) !== 0xFFFD) { e[D[185][j]] = 47360 + j; d[47360 + j] = D[185][j];}\\nD[186] = \\\"����������������������������������������������������������������愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢����������������������������������滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[186].length; ++j) if(D[186][j].charCodeAt(0) !== 0xFFFD) { e[D[186][j]] = 47616 + j; d[47616 + j] = D[186][j];}\\nD[187] = \\\"����������������������������������������������������������������罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤����������������������������������說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[187].length; ++j) if(D[187][j].charCodeAt(0) !== 0xFFFD) { e[D[187][j]] = 47872 + j; d[47872 + j] = D[187][j];}\\nD[188] = \\\"����������������������������������������������������������������劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂����������������������������������慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[188].length; ++j) if(D[188][j].charCodeAt(0) !== 0xFFFD) { e[D[188][j]] = 48128 + j; d[48128 + j] = D[188][j];}\\nD[189] = \\\"����������������������������������������������������������������瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯����������������������������������翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[189].length; ++j) if(D[189][j].charCodeAt(0) !== 0xFFFD) { e[D[189][j]] = 48384 + j; d[48384 + j] = D[189][j];}\\nD[190] = \\\"����������������������������������������������������������������輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉����������������������������������鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[190].length; ++j) if(D[190][j].charCodeAt(0) !== 0xFFFD) { e[D[190][j]] = 48640 + j; d[48640 + j] = D[190][j];}\\nD[191] = \\\"����������������������������������������������������������������濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊����������������������������������縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[191].length; ++j) if(D[191][j].charCodeAt(0) !== 0xFFFD) { e[D[191][j]] = 48896 + j; d[48896 + j] = D[191][j];}\\nD[192] = \\\"����������������������������������������������������������������錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇����������������������������������嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[192].length; ++j) if(D[192][j].charCodeAt(0) !== 0xFFFD) { e[D[192][j]] = 49152 + j; d[49152 + j] = D[192][j];}\\nD[193] = \\\"����������������������������������������������������������������瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪����������������������������������薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[193].length; ++j) if(D[193][j].charCodeAt(0) !== 0xFFFD) { e[D[193][j]] = 49408 + j; d[49408 + j] = D[193][j];}\\nD[194] = \\\"����������������������������������������������������������������駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘����������������������������������癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[194].length; ++j) if(D[194][j].charCodeAt(0) !== 0xFFFD) { e[D[194][j]] = 49664 + j; d[49664 + j] = D[194][j];}\\nD[195] = \\\"����������������������������������������������������������������鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸����������������������������������獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[195].length; ++j) if(D[195][j].charCodeAt(0) !== 0xFFFD) { e[D[195][j]] = 49920 + j; d[49920 + j] = D[195][j];}\\nD[196] = \\\"����������������������������������������������������������������願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼����������������������������������纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[196].length; ++j) if(D[196][j].charCodeAt(0) !== 0xFFFD) { e[D[196][j]] = 50176 + j; d[50176 + j] = D[196][j];}\\nD[197] = \\\"����������������������������������������������������������������護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬����������������������������������禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[197].length; ++j) if(D[197][j].charCodeAt(0) !== 0xFFFD) { e[D[197][j]] = 50432 + j; d[50432 + j] = D[197][j];}\\nD[198] = \\\"����������������������������������������������������������������讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲���������������������������������������������������������������������������������������������������������������������������������\\\".split(\\\"\\\");\\nfor(j = 0; j != D[198].length; ++j) if(D[198][j].charCodeAt(0) !== 0xFFFD) { e[D[198][j]] = 50688 + j; d[50688 + j] = D[198][j];}\\nD[201] = \\\"����������������������������������������������������������������乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕����������������������������������氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[201].length; ++j) if(D[201][j].charCodeAt(0) !== 0xFFFD) { e[D[201][j]] = 51456 + j; d[51456 + j] = D[201][j];}\\nD[202] = \\\"����������������������������������������������������������������汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘����������������������������������吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[202].length; ++j) if(D[202][j].charCodeAt(0) !== 0xFFFD) { e[D[202][j]] = 51712 + j; d[51712 + j] = D[202][j];}\\nD[203] = \\\"����������������������������������������������������������������杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓����������������������������������芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[203].length; ++j) if(D[203][j].charCodeAt(0) !== 0xFFFD) { e[D[203][j]] = 51968 + j; d[51968 + j] = D[203][j];}\\nD[204] = \\\"����������������������������������������������������������������坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋����������������������������������怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[204].length; ++j) if(D[204][j].charCodeAt(0) !== 0xFFFD) { e[D[204][j]] = 52224 + j; d[52224 + j] = D[204][j];}\\nD[205] = \\\"����������������������������������������������������������������泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺����������������������������������矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[205].length; ++j) if(D[205][j].charCodeAt(0) !== 0xFFFD) { e[D[205][j]] = 52480 + j; d[52480 + j] = D[205][j];}\\nD[206] = \\\"����������������������������������������������������������������哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛����������������������������������峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[206].length; ++j) if(D[206][j].charCodeAt(0) !== 0xFFFD) { e[D[206][j]] = 52736 + j; d[52736 + j] = D[206][j];}\\nD[207] = \\\"����������������������������������������������������������������柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂����������������������������������洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[207].length; ++j) if(D[207][j].charCodeAt(0) !== 0xFFFD) { e[D[207][j]] = 52992 + j; d[52992 + j] = D[207][j];}\\nD[208] = \\\"����������������������������������������������������������������穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪����������������������������������苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[208].length; ++j) if(D[208][j].charCodeAt(0) !== 0xFFFD) { e[D[208][j]] = 53248 + j; d[53248 + j] = D[208][j];}\\nD[209] = \\\"����������������������������������������������������������������唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧����������������������������������恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[209].length; ++j) if(D[209][j].charCodeAt(0) !== 0xFFFD) { e[D[209][j]] = 53504 + j; d[53504 + j] = D[209][j];}\\nD[210] = \\\"����������������������������������������������������������������毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸����������������������������������牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[210].length; ++j) if(D[210][j].charCodeAt(0) !== 0xFFFD) { e[D[210][j]] = 53760 + j; d[53760 + j] = D[210][j];}\\nD[211] = \\\"����������������������������������������������������������������笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢����������������������������������荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[211].length; ++j) if(D[211][j].charCodeAt(0) !== 0xFFFD) { e[D[211][j]] = 54016 + j; d[54016 + j] = D[211][j];}\\nD[212] = \\\"����������������������������������������������������������������酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅����������������������������������唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[212].length; ++j) if(D[212][j].charCodeAt(0) !== 0xFFFD) { e[D[212][j]] = 54272 + j; d[54272 + j] = D[212][j];}\\nD[213] = \\\"����������������������������������������������������������������崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟����������������������������������捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[213].length; ++j) if(D[213][j].charCodeAt(0) !== 0xFFFD) { e[D[213][j]] = 54528 + j; d[54528 + j] = D[213][j];}\\nD[214] = \\\"����������������������������������������������������������������淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏����������������������������������痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[214].length; ++j) if(D[214][j].charCodeAt(0) !== 0xFFFD) { e[D[214][j]] = 54784 + j; d[54784 + j] = D[214][j];}\\nD[215] = \\\"����������������������������������������������������������������耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷����������������������������������蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[215].length; ++j) if(D[215][j].charCodeAt(0) !== 0xFFFD) { e[D[215][j]] = 55040 + j; d[55040 + j] = D[215][j];}\\nD[216] = \\\"����������������������������������������������������������������釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷����������������������������������堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[216].length; ++j) if(D[216][j].charCodeAt(0) !== 0xFFFD) { e[D[216][j]] = 55296 + j; d[55296 + j] = D[216][j];}\\nD[217] = \\\"����������������������������������������������������������������惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒����������������������������������晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[217].length; ++j) if(D[217][j].charCodeAt(0) !== 0xFFFD) { e[D[217][j]] = 55552 + j; d[55552 + j] = D[217][j];}\\nD[218] = \\\"����������������������������������������������������������������湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖����������������������������������琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[218].length; ++j) if(D[218][j].charCodeAt(0) !== 0xFFFD) { e[D[218][j]] = 55808 + j; d[55808 + j] = D[218][j];}\\nD[219] = \\\"����������������������������������������������������������������罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳����������������������������������菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[219].length; ++j) if(D[219][j].charCodeAt(0) !== 0xFFFD) { e[D[219][j]] = 56064 + j; d[56064 + j] = D[219][j];}\\nD[220] = \\\"����������������������������������������������������������������軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈����������������������������������隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[220].length; ++j) if(D[220][j].charCodeAt(0) !== 0xFFFD) { e[D[220][j]] = 56320 + j; d[56320 + j] = D[220][j];}\\nD[221] = \\\"����������������������������������������������������������������媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤����������������������������������搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[221].length; ++j) if(D[221][j].charCodeAt(0) !== 0xFFFD) { e[D[221][j]] = 56576 + j; d[56576 + j] = D[221][j];}\\nD[222] = \\\"����������������������������������������������������������������毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓����������������������������������煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[222].length; ++j) if(D[222][j].charCodeAt(0) !== 0xFFFD) { e[D[222][j]] = 56832 + j; d[56832 + j] = D[222][j];}\\nD[223] = \\\"����������������������������������������������������������������稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯����������������������������������腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[223].length; ++j) if(D[223][j].charCodeAt(0) !== 0xFFFD) { e[D[223][j]] = 57088 + j; d[57088 + j] = D[223][j];}\\nD[224] = \\\"����������������������������������������������������������������觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿����������������������������������遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[224].length; ++j) if(D[224][j].charCodeAt(0) !== 0xFFFD) { e[D[224][j]] = 57344 + j; d[57344 + j] = D[224][j];}\\nD[225] = \\\"����������������������������������������������������������������凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠����������������������������������寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[225].length; ++j) if(D[225][j].charCodeAt(0) !== 0xFFFD) { e[D[225][j]] = 57600 + j; d[57600 + j] = D[225][j];}\\nD[226] = \\\"����������������������������������������������������������������榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊����������������������������������漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[226].length; ++j) if(D[226][j].charCodeAt(0) !== 0xFFFD) { e[D[226][j]] = 57856 + j; d[57856 + j] = D[226][j];}\\nD[227] = \\\"����������������������������������������������������������������禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞����������������������������������耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[227].length; ++j) if(D[227][j].charCodeAt(0) !== 0xFFFD) { e[D[227][j]] = 58112 + j; d[58112 + j] = D[227][j];}\\nD[228] = \\\"����������������������������������������������������������������裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍����������������������������������銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[228].length; ++j) if(D[228][j].charCodeAt(0) !== 0xFFFD) { e[D[228][j]] = 58368 + j; d[58368 + j] = D[228][j];}\\nD[229] = \\\"����������������������������������������������������������������噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉����������������������������������憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[229].length; ++j) if(D[229][j].charCodeAt(0) !== 0xFFFD) { e[D[229][j]] = 58624 + j; d[58624 + j] = D[229][j];}\\nD[230] = \\\"����������������������������������������������������������������澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙����������������������������������獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[230].length; ++j) if(D[230][j].charCodeAt(0) !== 0xFFFD) { e[D[230][j]] = 58880 + j; d[58880 + j] = D[230][j];}\\nD[231] = \\\"����������������������������������������������������������������膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢����������������������������������蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[231].length; ++j) if(D[231][j].charCodeAt(0) !== 0xFFFD) { e[D[231][j]] = 59136 + j; d[59136 + j] = D[231][j];}\\nD[232] = \\\"����������������������������������������������������������������踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓����������������������������������銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[232].length; ++j) if(D[232][j].charCodeAt(0) !== 0xFFFD) { e[D[232][j]] = 59392 + j; d[59392 + j] = D[232][j];}\\nD[233] = \\\"����������������������������������������������������������������噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺����������������������������������憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[233].length; ++j) if(D[233][j].charCodeAt(0) !== 0xFFFD) { e[D[233][j]] = 59648 + j; d[59648 + j] = D[233][j];}\\nD[234] = \\\"����������������������������������������������������������������澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙����������������������������������瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[234].length; ++j) if(D[234][j].charCodeAt(0) !== 0xFFFD) { e[D[234][j]] = 59904 + j; d[59904 + j] = D[234][j];}\\nD[235] = \\\"����������������������������������������������������������������蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠����������������������������������諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[235].length; ++j) if(D[235][j].charCodeAt(0) !== 0xFFFD) { e[D[235][j]] = 60160 + j; d[60160 + j] = D[235][j];}\\nD[236] = \\\"����������������������������������������������������������������錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕����������������������������������魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[236].length; ++j) if(D[236][j].charCodeAt(0) !== 0xFFFD) { e[D[236][j]] = 60416 + j; d[60416 + j] = D[236][j];}\\nD[237] = \\\"����������������������������������������������������������������檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶����������������������������������瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[237].length; ++j) if(D[237][j].charCodeAt(0) !== 0xFFFD) { e[D[237][j]] = 60672 + j; d[60672 + j] = D[237][j];}\\nD[238] = \\\"����������������������������������������������������������������蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞����������������������������������謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[238].length; ++j) if(D[238][j].charCodeAt(0) !== 0xFFFD) { e[D[238][j]] = 60928 + j; d[60928 + j] = D[238][j];}\\nD[239] = \\\"����������������������������������������������������������������鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰����������������������������������鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[239].length; ++j) if(D[239][j].charCodeAt(0) !== 0xFFFD) { e[D[239][j]] = 61184 + j; d[61184 + j] = D[239][j];}\\nD[240] = \\\"����������������������������������������������������������������璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒����������������������������������臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[240].length; ++j) if(D[240][j].charCodeAt(0) !== 0xFFFD) { e[D[240][j]] = 61440 + j; d[61440 + j] = D[240][j];}\\nD[241] = \\\"����������������������������������������������������������������蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪����������������������������������鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[241].length; ++j) if(D[241][j].charCodeAt(0) !== 0xFFFD) { e[D[241][j]] = 61696 + j; d[61696 + j] = D[241][j];}\\nD[242] = \\\"����������������������������������������������������������������徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛����������������������������������礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[242].length; ++j) if(D[242][j].charCodeAt(0) !== 0xFFFD) { e[D[242][j]] = 61952 + j; d[61952 + j] = D[242][j];}\\nD[243] = \\\"����������������������������������������������������������������譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦����������������������������������鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[243].length; ++j) if(D[243][j].charCodeAt(0) !== 0xFFFD) { e[D[243][j]] = 62208 + j; d[62208 + j] = D[243][j];}\\nD[244] = \\\"����������������������������������������������������������������嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩����������������������������������禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[244].length; ++j) if(D[244][j].charCodeAt(0) !== 0xFFFD) { e[D[244][j]] = 62464 + j; d[62464 + j] = D[244][j];}\\nD[245] = \\\"����������������������������������������������������������������鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛����������������������������������鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[245].length; ++j) if(D[245][j].charCodeAt(0) !== 0xFFFD) { e[D[245][j]] = 62720 + j; d[62720 + j] = D[245][j];}\\nD[246] = \\\"����������������������������������������������������������������蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺����������������������������������騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[246].length; ++j) if(D[246][j].charCodeAt(0) !== 0xFFFD) { e[D[246][j]] = 62976 + j; d[62976 + j] = D[246][j];}\\nD[247] = \\\"����������������������������������������������������������������糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊����������������������������������驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[247].length; ++j) if(D[247][j].charCodeAt(0) !== 0xFFFD) { e[D[247][j]] = 63232 + j; d[63232 + j] = D[247][j];}\\nD[248] = \\\"����������������������������������������������������������������讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏����������������������������������齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[248].length; ++j) if(D[248][j].charCodeAt(0) !== 0xFFFD) { e[D[248][j]] = 63488 + j; d[63488 + j] = D[248][j];}\\nD[249] = \\\"����������������������������������������������������������������纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊����������������������������������龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓�\\\".split(\\\"\\\");\\nfor(j = 0; j != D[249].length; ++j) if(D[249][j].charCodeAt(0) !== 0xFFFD) { e[D[249][j]] = 63744 + j; d[63744 + j] = D[249][j];}\\nreturn {\\\"enc\\\": e, \\\"dec\\\": d }; })();\\ncptable[1250] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[1251] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[1252] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[1253] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[1254] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[1255] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹ�ֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת���\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[1256] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œں ،¢£¤¥¦§¨©ھ«¬®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[1257] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[1258] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[10000] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[10006] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[10007] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[10029] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[10079] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\ncptable[10081] = (function(){ var d = \\\"\\\\u0000\\\\u0001\\\\u0002\\\\u0003\\\\u0004\\\\u0005\\\\u0006\\\\u0007\\\\b\\\\t\\\\n\\\\u000b\\\\f\\\\r\\\\u000e\\\\u000f\\\\u0010\\\\u0011\\\\u0012\\\\u0013\\\\u0014\\\\u0015\\\\u0016\\\\u0017\\\\u0018\\\\u0019\\\\u001a\\\\u001b\\\\u001c\\\\u001d\\\\u001e\\\\u001f !\\\\\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\\\", D = [], e = {}; for(var i=0;i!=d.length;++i) { if(d.charCodeAt(i) !== 0xFFFD) e[d[i]] = i; D[i] = d.charAt(i); } return {\\\"enc\\\": e, \\\"dec\\\": D }; })();\\nif (typeof module !== 'undefined' && module.exports) module.exports = cptable;\\n/* cputils.js (C) 2013-2014 SheetJS -- http://sheetjs.com */\\n/*jshint newcap: false */\\n(function(root, factory){\\n \\\"use strict\\\";\\n if(typeof cptable === \\\"undefined\\\") {\\n if(typeof require !== \\\"undefined\\\"){\\n var cpt = require('./cpt' + 'able');\\n if (typeof module !== 'undefined' && module.exports) module.exports = factory(cpt);\\n else root.cptable = factory(cpt);\\n } else throw new Error(\\\"cptable not found\\\");\\n } else cptable = factory(cptable);\\n}(this, function(cpt){\\n \\\"use strict\\\";\\n var magic = {\\n \\\"1200\\\":\\\"utf16le\\\",\\n \\\"1201\\\":\\\"utf16be\\\",\\n \\\"12000\\\":\\\"utf32le\\\",\\n \\\"12001\\\":\\\"utf32be\\\",\\n \\\"16969\\\":\\\"utf64le\\\",\\n \\\"20127\\\":\\\"ascii\\\",\\n \\\"65000\\\":\\\"utf7\\\",\\n \\\"65001\\\":\\\"utf8\\\"\\n };\\n\\n var sbcs_cache = [874,1250,1251,1252,1253,1254,1255,1256,10000];\\n var dbcs_cache = [932,936,949,950];\\n var magic_cache = [65001];\\n var magic_decode = {};\\n var magic_encode = {};\\n var cpecache = {};\\n var cpdcache = {};\\n\\n var sfcc = function sfcc(x) { return String.fromCharCode(x); };\\n var cca = function cca(x){ return x.charCodeAt(0); };\\n\\n var has_buf = (typeof Buffer !== 'undefined');\\n if(has_buf) {\\n var mdl = 1024, mdb = new Buffer(mdl);\\n var make_EE = function make_EE(E){\\n var EE = new Buffer(65536);\\n for(var i = 0; i < 65536;++i) EE[i] = 0;\\n var keys = Object.keys(E), len = keys.length;\\n for(var ee = 0, e = keys[ee]; ee < len; ++ee) {\\n if(!(e = keys[ee])) continue;\\n EE[e.charCodeAt(0)] = E[e];\\n }\\n return EE;\\n };\\n var sbcs_encode = function make_sbcs_encode(cp) {\\n var EE = make_EE(cpt[cp].enc);\\n return function sbcs_e(data, ofmt) {\\n var len = data.length;\\n var out, i, j, D, w;\\n if(typeof data === 'string') {\\n out = Buffer(len);\\n for(i = 0; i < len; ++i) out[i] = EE[data.charCodeAt(i)];\\n } else if(Buffer.isBuffer(data)) {\\n out = Buffer(2*len);\\n j = 0;\\n for(i = 0; i < len; ++i) {\\n D = data[i];\\n if(D < 128) out[j++] = EE[D];\\n else if(D < 224) { out[j++] = EE[((D&31)<<6)+(data[i+1]&63)]; ++i; }\\n else if(D < 240) { out[j++] = EE[((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63)]; i+=2; }\\n else {\\n w = ((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63); i+=3;\\n if(w < 65536) out[j++] = EE[w];\\n else { w -= 65536; out[j++] = EE[0xD800 + ((w>>10)&1023)]; out[j++] = EE[0xDC00 + (w&1023)]; }\\n }\\n }\\n out.length = j;\\n out = out.slice(0,j);\\n } else {\\n out = Buffer(len);\\n for(i = 0; i < len; ++i) out[i] = EE[data[i].charCodeAt(0)];\\n }\\n if(ofmt === undefined || ofmt === 'buf') return out;\\n if(ofmt !== 'arr') return out.toString('binary');\\n return [].slice.call(out);\\n };\\n };\\n var sbcs_decode = function make_sbcs_decode(cp) {\\n var D = cpt[cp].dec;\\n var DD = new Buffer(131072), d=0, c;\\n for(d=0;d<D.length;++d) {\\n if(!(c=D[d])) continue;\\n var w = c.charCodeAt(0);\\n DD[2*d] = w&255; DD[2*d+1] = w>>8;\\n }\\n return function sbcs_d(data) {\\n var len = data.length, i=0, j;\\n if(2 * len > mdl) { mdl = 2 * len; mdb = new Buffer(mdl); }\\n if(Buffer.isBuffer(data)) {\\n for(i = 0; i < len; i++) {\\n j = 2*data[i];\\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\\n }\\n } else if(typeof data === \\\"string\\\") {\\n for(i = 0; i < len; i++) {\\n j = 2*data.charCodeAt(i);\\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\\n }\\n } else {\\n for(i = 0; i < len; i++) {\\n j = 2*data[i];\\n mdb[2*i] = DD[j]; mdb[2*i+1] = DD[j+1];\\n }\\n }\\n mdb.length = 2 * len;\\n return mdb.toString('ucs2');\\n };\\n };\\n var dbcs_encode = function make_dbcs_encode(cp) {\\n var E = cpt[cp].enc;\\n var EE = new Buffer(131072);\\n for(var i = 0; i < 131072; ++i) EE[i] = 0;\\n var keys = Object.keys(E);\\n for(var ee = 0, e = keys[ee]; ee < keys.length; ++ee) {\\n if(!(e = keys[ee])) continue;\\n var f = e.charCodeAt(0);\\n EE[2*f] = E[e] & 255; EE[2*f+1] = E[e]>>8;\\n }\\n return function dbcs_e(data, ofmt) {\\n var len = data.length, out = new Buffer(2*len), i, j, jj, k, D;\\n if(typeof data === 'string') {\\n for(i = k = 0; i < len; ++i) {\\n j = data.charCodeAt(i)*2;\\n out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\\n }\\n out.length = k;\\n out = out.slice(0,k);\\n } else if(Buffer.isBuffer(data)) {\\n for(i = k = 0; i < len; ++i) {\\n D = data[i];\\n if(D < 128) j = D;\\n else if(D < 224) { j = ((D&31)<<6)+(data[i+1]&63); ++i; }\\n else if(D < 240) { j = ((D&15)<<12)+((data[i+1]&63)<<6)+(data[i+2]&63); i+=2; }\\n else { j = ((D&7)<<18)+((data[i+1]&63)<<12)+((data[i+2]&63)<<6)+(data[i+3]&63); i+=3; }\\n if(j<65536) { j*=2; out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j]; }\\n else { jj = j-65536;\\n j=2*(0xD800 + ((jj>>10)&1023)); out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\\n j=2*(0xDC00 + (jj&1023)); out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\\n }\\n }\\n out.length = k;\\n out = out.slice(0,k);\\n } else {\\n for(i = k = 0; i < len; i++) {\\n j = data[i].charCodeAt(0)*2;\\n out[k++] = EE[j+1] || EE[j]; if(EE[j+1] > 0) out[k++] = EE[j];\\n }\\n }\\n if(ofmt === undefined || ofmt === 'buf') return out;\\n if(ofmt !== 'arr') return out.toString('binary');\\n return [].slice.call(out);\\n };\\n };\\n var dbcs_decode = function make_dbcs_decode(cp) {\\n var D = cpt[cp].dec;\\n var DD = new Buffer(131072), d=0, c, w=0, j=0, i=0;\\n for(i = 0; i < 65536; ++i) { DD[2*i] = 0xFF; DD[2*i+1] = 0xFD;}\\n for(d = 0; d < D.length; ++d) {\\n if(!(c=D[d])) continue;\\n w = c.charCodeAt(0);\\n j = 2*d;\\n DD[j] = w&255; DD[j+1] = w>>8;\\n }\\n return function dbcs_d(data) {\\n var len = data.length, out = new Buffer(2*len), i, j, k=0;\\n if(Buffer.isBuffer(data)) {\\n for(i = 0; i < len; i++) {\\n j = 2*data[i];\\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data[i]<<8)+data[i+1]); ++i; }\\n out[k++] = DD[j]; out[k++] = DD[j+1];\\n }\\n } else if(typeof data === \\\"string\\\") {\\n for(i = 0; i < len; i++) {\\n j = 2*data.charCodeAt(i);\\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data.charCodeAt(i)<<8)+data.charCodeAt(i+1)); ++i; }\\n out[k++] = DD[j]; out[k++] = DD[j+1];\\n }\\n } else {\\n for(i = 0; i < len; i++) {\\n j = 2*data[i];\\n if(DD[j]===0xFF && DD[j+1]===0xFD) { j=2*((data[i]<<8)+data[i+1]); ++i; }\\n out[k++] = DD[j]; out[k++] = DD[j+1];\\n }\\n }\\n out.length = k;\\n return out.toString('ucs2');\\n };\\n };\\n magic_decode[65001] = function utf8_d(data) {\\n var len = data.length, w = 0, ww = 0;\\n if(4 * len > mdl) { mdl = 4 * len; mdb = new Buffer(mdl); }\\n mdb.length = 0;\\n var i = 0;\\n if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3;\\n for(var j = 1, k = 0, D = 0; i < len; i+=j) {\\n j = 1; D = data[i];\\n if(D < 128) w = D;\\n else if(D < 224) { w=(D&31)*64+(data[i+1]&63); j=2; }\\n else if(D < 240) { w=((D&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63); j=3; }\\n else { w=(D&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63); j=4; }\\n if(w < 65536) { mdb[k++] = w&255; mdb[k++] = w>>8; }\\n else {\\n w -= 65536; ww = 0xD800 + ((w>>10)&1023); w = 0xDC00 + (w&1023);\\n mdb[k++] = ww&255; mdb[k++] = ww>>>8; mdb[k++] = w&255; mdb[k++] = (w>>>8)&255;\\n }\\n }\\n mdb.length = k;\\n return mdb.toString('ucs2');\\n };\\n magic_encode[65001] = function utf8_e(data, ofmt) {\\n var len = data.length, w = 0, ww = 0, j = 0;\\n var direct = typeof data === \\\"string\\\";\\n if(4 * len > mdl) { mdl = 4 * len; mdb = new Buffer(mdl); }\\n for(var i = 0; i < len; ++i) {\\n w = direct ? data.charCodeAt(i) : data[i].charCodeAt(0);\\n if(w <= 0x007F) mdb[j++] = w;\\n else if(w <= 0x07FF) {\\n mdb[j++] = 192 + (w >> 6);\\n mdb[j++] = 128 + (w&63);\\n } else if(w >= 0xD800 && w <= 0xDFFF) {\\n w -= 0xD800; ++i;\\n ww = (direct ? data.charCodeAt(i) : data[i].charCodeAt(0)) - 0xDC00 + (w << 10);\\n mdb[j++] = 240 + ((ww>>>18) & 0x07);\\n mdb[j++] = 144 + ((ww>>>12) & 0x3F);\\n mdb[j++] = 128 + ((ww>>>6) & 0x3F);\\n mdb[j++] = 128 + (ww & 0x3F);\\n } else {\\n mdb[j++] = 224 + (w >> 12);\\n mdb[j++] = 128 + ((w >> 6)&63);\\n mdb[j++] = 128 + (w&63);\\n }\\n }\\n mdb.length = j;\\n if(ofmt === undefined || ofmt === 'buf') return mdb;\\n if(ofmt !== 'arr') return mdb.toString('binary');\\n return [].slice.call(mdb);\\n };\\n }\\n\\n var encache = function encache() {\\n if(has_buf) {\\n if(cpdcache[sbcs_cache[0]]) return;\\n var i, s;\\n for(i = 0; i < sbcs_cache.length; ++i) {\\n s = sbcs_cache[i];\\n if(cpt[s]) {\\n cpdcache[s] = sbcs_decode(s);\\n cpecache[s] = sbcs_encode(s);\\n }\\n }\\n for(i = 0; i < dbcs_cache.length; ++i) {\\n s = dbcs_cache[i];\\n if(cpt[s]) {\\n cpdcache[s] = dbcs_decode(s);\\n cpecache[s] = dbcs_encode(s);\\n }\\n }\\n for(i = 0; i < magic_cache.length; ++i) {\\n s = magic_cache[i];\\n if(magic_decode[s]) cpdcache[s] = magic_decode[s];\\n if(magic_encode[s]) cpecache[s] = magic_encode[s];\\n }\\n }\\n };\\n var cp_decache = function cp_decache(cp) { cpdcache[cp] = cpecache[cp] = undefined; };\\n var decache = function decache() {\\n if(has_buf) {\\n if(!cpdcache[sbcs_cache[0]]) return;\\n sbcs_cache.forEach(cp_decache);\\n dbcs_cache.forEach(cp_decache);\\n magic_cache.forEach(cp_decache);\\n }\\n last_enc = last_cp = undefined;\\n };\\n var cache = {\\n encache: encache,\\n decache: decache,\\n sbcs: sbcs_cache,\\n dbcs: dbcs_cache\\n };\\n\\n encache();\\n\\n var BM = \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\";\\n var SetD = \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?\\\";\\n var last_enc, last_cp;\\n var encode = function encode(cp, data, ofmt) {\\n if(cp === last_cp) { return last_enc(data, ofmt); }\\n if(cpecache[cp] !== undefined) { last_enc = cpecache[last_cp=cp]; return last_enc(data, ofmt); }\\n if(has_buf && Buffer.isBuffer(data)) data = data.toString('utf8');\\n var len = data.length;\\n var out = has_buf ? new Buffer(4*len) : [], w, i, j = 0, c, tt, ww;\\n var C = cpt[cp], E, M;\\n if(C && (E=C.enc)) for(i = 0; i < len; ++i, ++j) {\\n w = E[data[i]];\\n out[j] = w&255;\\n if(w > 255) {\\n out[j] = w>>8;\\n out[++j] = w&255;\\n }\\n }\\n else if((M=magic[cp])) switch(M) {\\n case \\\"utf8\\\":\\n if(has_buf && typeof data === \\\"string\\\") { out = new Buffer(data, M); j = out.length; break; }\\n for(i = 0; i < len; ++i, ++j) {\\n w = data[i].charCodeAt(0);\\n if(w <= 0x007F) out[j] = w;\\n else if(w <= 0x07FF) {\\n out[j] = 192 + (w >> 6);\\n out[++j] = 128 + (w&63);\\n } else if(w >= 0xD800 && w <= 0xDFFF) {\\n w -= 0xD800;\\n ww = data[++i].charCodeAt(0) - 0xDC00 + (w << 10);\\n out[j] = 240 + ((ww>>>18) & 0x07);\\n out[++j] = 144 + ((ww>>>12) & 0x3F);\\n out[++j] = 128 + ((ww>>>6) & 0x3F);\\n out[++j] = 128 + (ww & 0x3F);\\n } else {\\n out[j] = 224 + (w >> 12);\\n out[++j] = 128 + ((w >> 6)&63);\\n out[++j] = 128 + (w&63);\\n }\\n }\\n break;\\n case \\\"ascii\\\":\\n if(has_buf && typeof data === \\\"string\\\") { out = new Buffer(data, M); j = out.length; break; }\\n for(i = 0; i < len; ++i, ++j) {\\n w = data[i].charCodeAt(0);\\n if(w <= 0x007F) out[j] = w;\\n else throw new Error(\\\"bad ascii \\\" + w);\\n }\\n break;\\n case \\\"utf16le\\\":\\n if(has_buf && typeof data === \\\"string\\\") { out = new Buffer(data, M); j = out.length; break; }\\n for(i = 0; i < len; ++i) {\\n w = data[i].charCodeAt(0);\\n out[j++] = w&255;\\n out[j++] = w>>8;\\n }\\n break;\\n case \\\"utf16be\\\":\\n for(i = 0; i < len; ++i) {\\n w = data[i].charCodeAt(0);\\n out[j++] = w>>8;\\n out[j++] = w&255;\\n }\\n break;\\n case \\\"utf32le\\\":\\n for(i = 0; i < len; ++i) {\\n w = data[i].charCodeAt(0);\\n if(w >= 0xD800 && w <= 0xDFFF) w = 0x10000 + ((w - 0xD800) << 10) + (data[++i].charCodeAt(0) - 0xDC00);\\n out[j++] = w&255; w >>= 8;\\n out[j++] = w&255; w >>= 8;\\n out[j++] = w&255; w >>= 8;\\n out[j++] = w&255;\\n }\\n break;\\n case \\\"utf32be\\\":\\n for(i = 0; i < len; ++i) {\\n w = data[i].charCodeAt(0);\\n if(w >= 0xD800 && w <= 0xDFFF) w = 0x10000 + ((w - 0xD800) << 10) + (data[++i].charCodeAt(0) - 0xDC00);\\n out[j+3] = w&255; w >>= 8;\\n out[j+2] = w&255; w >>= 8;\\n out[j+1] = w&255; w >>= 8;\\n out[j] = w&255; w >>= 8;\\n j+=4;\\n }\\n break;\\n case \\\"utf7\\\":\\n for(i = 0; i < len; i++) {\\n c = data[i];\\n if(c === \\\"+\\\") { out[j++] = 0x2b; out[j++] = 0x2d; continue; }\\n if(SetD.indexOf(c) > -1) { out[j++] = c.charCodeAt(0); continue; }\\n tt = encode(1201, c);\\n out[j++] = 0x2b;\\n out[j++] = BM.charCodeAt(tt[0]>>2);\\n out[j++] = BM.charCodeAt(((tt[0]&0x03)<<4) + ((tt[1]||0)>>4));\\n out[j++] = BM.charCodeAt(((tt[1]&0x0F)<<2) + ((tt[2]||0)>>6));\\n out[j++] = 0x2d;\\n }\\n break;\\n default: throw new Error(\\\"Unsupported magic: \\\" + cp + \\\" \\\" + magic[cp]);\\n }\\n else throw new Error(\\\"Unrecognized CP: \\\" + cp);\\n out.length = j;\\n out = out.slice(0,j);\\n if(typeof Buffer === 'undefined') return (ofmt == 'str') ? out.map(sfcc).join(\\\"\\\") : out;\\n if(ofmt === undefined || ofmt === 'buf') return out;\\n if(ofmt !== 'arr') return out.toString('binary');\\n return [].slice.call(out);\\n };\\n var decode = function decode(cp, data) {\\n var F; if((F=cpdcache[cp])) return F(data);\\n var len = data.length, out = new Array(len), w, i, j = 1, k = 0, ww;\\n var C = cpt[cp], D, M;\\n if(C && (D=C.dec)) {\\n if(typeof data === \\\"string\\\") data = data.split(\\\"\\\").map(cca);\\n for(i = 0; i < len; i+=j) {\\n j = 2;\\n w = D[(data[i]<<8)+ data[i+1]];\\n if(!w) {\\n j = 1;\\n w = D[data[i]];\\n }\\n if(!w) throw new Error('Unrecognized code: ' + data[i] + ' ' + data[i+j-1] + ' ' + i + ' ' + j + ' ' + D[data[i]]);\\n out[k++] = w;\\n }\\n }\\n else if((M=magic[cp])) switch(M) {\\n case \\\"utf8\\\":\\n i = 0;\\n if(len >= 3 && data[0] == 0xEF) if(data[1] == 0xBB && data[2] == 0xBF) i = 3;\\n for(; i < len; i+=j) {\\n j = 1;\\n if(data[i] < 128) w = data[i];\\n else if(data[i] < 224) { w=(data[i]&31)*64+(data[i+1]&63); j=2; }\\n else if(data[i] < 240) { w=((data[i]&15)<<12)+(data[i+1]&63)*64+(data[i+2]&63); j=3; }\\n else { w=(data[i]&7)*262144+((data[i+1]&63)<<12)+(data[i+2]&63)*64+(data[i+3]&63); j=4; }\\n if(w < 65536) { out[k++] = String.fromCharCode(w); }\\n else {\\n w -= 65536; ww = 0xD800 + ((w>>10)&1023); w = 0xDC00 + (w&1023);\\n out[k++] = String.fromCharCode(ww); out[k++] = String.fromCharCode(w);\\n }\\n }\\n break;\\n case \\\"ascii\\\":\\n if(has_buf && Buffer.isBuffer(data)) return data.toString(M);\\n for(i = 0; i < len; i++) out[i] = String.fromCharCode(data[i]);\\n k = len; break;\\n case \\\"utf16le\\\":\\n i = 0;\\n if(len >= 2 && data[0] == 0xFF) if(data[1] == 0xFE) i = 2;\\n if(has_buf && Buffer.isBuffer(data)) return data.toString(M);\\n j = 2;\\n for(; i < len; i+=j) {\\n out[k++] = String.fromCharCode((data[i+1]<<8) + data[i]);\\n }\\n break;\\n case \\\"utf16be\\\":\\n i = 0;\\n if(len >= 2 && data[0] == 0xFE) if(data[1] == 0xFF) i = 2;\\n j = 2;\\n for(; i < len; i+=j) {\\n out[k++] = String.fromCharCode((data[i]<<8) + data[i+1]);\\n }\\n break;\\n case \\\"utf32le\\\":\\n i = 0;\\n if(len >= 4 && data[0] == 0xFF) if(data[1] == 0xFE && data[2] == 0 && data[3] == 0) i = 4;\\n j = 4;\\n for(; i < len; i+=j) {\\n w = (data[i+3]<<24) + (data[i+2]<<16) + (data[i+1]<<8) + (data[i]);\\n if(w > 0xFFFF) {\\n w -= 0x10000;\\n out[k++] = String.fromCharCode(0xD800 + ((w >> 10) & 0x3FF));\\n out[k++] = String.fromCharCode(0xDC00 + (w & 0x3FF));\\n }\\n else out[k++] = String.fromCharCode(w);\\n }\\n break;\\n case \\\"utf32be\\\":\\n i = 0;\\n if(len >= 4 && data[3] == 0xFF) if(data[2] == 0xFE && data[1] == 0 && data[0] == 0) i = 4;\\n j = 4;\\n for(; i < len; i+=j) {\\n w = (data[i]<<24) + (data[i+1]<<16) + (data[i+2]<<8) + (data[i+3]);\\n if(w > 0xFFFF) {\\n w -= 0x10000;\\n out[k++] = String.fromCharCode(0xD800 + ((w >> 10) & 0x3FF));\\n out[k++] = String.fromCharCode(0xDC00 + (w & 0x3FF));\\n }\\n else out[k++] = String.fromCharCode(w);\\n }\\n break;\\n case \\\"utf7\\\":\\n i = 0;\\n if(len >= 4 && data[0] == 0x2B && data[1] == 0x2F && data[2] == 0x76) {\\n if(len >= 5 && data[3] == 0x38 && data[4] == 0x2D) i = 5;\\n else if(data[3] == 0x38 || data[3] == 0x39 || data[3] == 0x2B || data[3] == 0x2F) i = 4;\\n }\\n for(; i < len; i+=j) {\\n if(data[i] !== 0x2b) { j=1; out[k++] = String.fromCharCode(data[i]); continue; }\\n j=1;\\n if(data[i+1] === 0x2d) { j = 2; out[k++] = \\\"+\\\"; continue; }\\n while(String.fromCharCode(data[i+j]).match(/[A-Za-z0-9+\\\\/]/)) j++;\\n var dash = 0;\\n if(data[i+j] === 0x2d) { ++j; dash=1; }\\n var tt = [];\\n var o64;\\n var c1, c2, c3;\\n var e1, e2, e3, e4;\\n for(var l = 1; l < j - dash;) {\\n e1 = BM.indexOf(String.fromCharCode(data[i+l++]));\\n e2 = BM.indexOf(String.fromCharCode(data[i+l++]));\\n c1 = e1 << 2 | e2 >> 4;\\n tt.push(c1);\\n e3 = BM.indexOf(String.fromCharCode(data[i+l++]));\\n if(e3 === -1) break;\\n c2 = (e2 & 15) << 4 | e3 >> 2;\\n tt.push(c2);\\n e4 = BM.indexOf(String.fromCharCode(data[i+l++]));\\n if(e4 === -1) break;\\n c3 = (e3 & 3) << 6 | e4;\\n if(e4 < 64) tt.push(c3);\\n }\\n if((tt.length & 1) === 1) tt.length--;\\n o64 = decode(1201, tt);\\n for(l = 0; l < o64.length; ++l) out[k++] = o64[l];\\n }\\n break;\\n default: throw new Error(\\\"Unsupported magic: \\\" + cp + \\\" \\\" + magic[cp]);\\n }\\n else throw new Error(\\\"Unrecognized CP: \\\" + cp);\\n out.length = k;\\n return out.join(\\\"\\\");\\n };\\n var hascp = function hascp(cp) { return cpt[cp] || magic[cp]; };\\n cpt.utils = { decode: decode, encode: encode, hascp: hascp, magic: magic, cache:cache };\\n return cpt;\\n}));\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/dist/cpexcel.js\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/license\": {\n \"text\": \"Copyright (C) 2012-2015 SheetJS\\n\\n Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n you may not use this file except in compliance with the License.\\n You may obtain a copy of the License at\\n\\n http://www.apache.org/licenses/LICENSE-2.0\\n\\n Unless required by applicable law or agreed to in writing, software\\n distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n See the License for the specific language governing permissions and\\n limitations under the License.\\n\\nExcept where noted, this license applies to any and all software programs and associated documentation files created by the Original Author and distributed with the Software:\\n\\n'jszip.js' is a modified version of JSZip, Copyright (c) Stuart Knightley, David Duponchel, Franz Buchinger, Ant'onio Afonso. JSZip is dual licensed and is used according to the terms of the MIT License.\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/license\"\n },\n \"$:/language/Help/xlsx-import\": {\n \"title\": \"$:/language/Help/xlsx-import\",\n \"description\": \"Import tiddlers from an XLSX spreadsheet file\",\n \"text\": \"Imports tiddlers from an XLSX spreadsheet file\\n\\n```\\n--xlsx-import <filename> <importSpec>\\n```\\n\\n* ''filename'': filename of the `.xlsx` file\\n* ''title'': title of the import specification tiddler to be used for the import\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/importer.js\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/importer.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/xlsx-utils/importer.js\\ntype: application/javascript\\nmodule-type: library\\n\\nClass to import an Excel file\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nvar DEFAULT_IMPORT_SPEC_TITLE = \\\"$:/config/plugins/tiddlywiki/xlsx-utils/default-import-spec\\\";\\n\\nvar XLSX = require(\\\"$:/plugins/tiddlywiki/xlsx-utils/xlsx.js\\\"),\\n\\tJSZip = require(\\\"$:/plugins/tiddlywiki/jszip/jszip.js\\\");\\n\\nvar XLSXImporter = function(options) {\\n\\tthis.wiki = options.wiki;\\n\\tthis.filename = options.filename;\\n\\tthis.text = options.text;\\n\\tthis.importSpec = options.importSpec || this.wiki.getTiddlerText(DEFAULT_IMPORT_SPEC_TITLE);\\n\\tthis.logger = new $tw.utils.Logger(\\\"xlsx-utils\\\");\\n\\tthis.results = [];\\n\\tif(JSZip) {\\n\\t\\tthis.processWorkbook();\\t\\t\\n\\t}\\n};\\n\\nXLSXImporter.prototype.getResults = function() {\\n\\treturn this.results;\\n};\\n\\nXLSXImporter.prototype.processWorkbook = function() {\\n\\t// Read the workbook\\n\\tif(this.filename) {\\n\\t\\tthis.workbook = XLSX.readFile(this.filename);\\t\\n\\t} else if(this.text) {\\n\\t\\tthis.workbook = XLSX.read(this.text,{type:\\\"base64\\\"});\\n\\t}\\n\\t// Read the root import specification\\n\\tthis.rootImportSpec = this.wiki.getTiddler(this.importSpec);\\n\\tif(this.rootImportSpec) {\\n\\t\\t// Iterate through the sheets specified in the list field\\n\\t\\t$tw.utils.each(this.rootImportSpec.fields.list || [],this.processSheet.bind(this));\\n\\t}\\n};\\n\\nXLSXImporter.prototype.processSheet = function(sheetImportSpecTitle) {\\n\\t// Get the sheet import specifier\\n\\tthis.sheetImportSpec = this.wiki.getTiddler(sheetImportSpecTitle);\\n\\tif(this.sheetImportSpec) {\\n\\t\\tthis.sheetName = this.sheetImportSpec.fields[\\\"import-sheet-name\\\"];\\n\\t\\tthis.sheet = this.workbook.Sheets[this.sheetName];\\n\\t\\tif(!this.sheet) {\\n\\t\\t\\tthis.logger.alert(\\\"Missing sheet '\\\" + this.sheetName + \\\"'\\\");\\n\\t\\t} else {\\n\\t\\t\\t// Get the size of the sheet\\n\\t\\t\\tthis.sheetSize = this.measureSheet(this.sheet);\\n\\t\\t\\t// Read the column names from the first row\\n\\t\\t\\tthis.columnsByName = this.findColumns(this.sheet,this.sheetSize);\\n\\t\\t\\t// Iterate through the rows\\n\\t\\t\\tfor(this.row=this.sheetSize.startRow+1; this.row<=this.sheetSize.endRow; this.row++) {\\n\\t\\t\\t\\t// Iterate through the row import specifiers\\n\\t\\t\\t\\t$tw.utils.each(this.sheetImportSpec.fields.list || [],this.processRow.bind(this));\\t\\t\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\nXLSXImporter.prototype.processRow = function(rowImportSpecTitle) {\\n\\tthis.rowImportSpec = this.wiki.getTiddler(rowImportSpecTitle);\\n\\tif(this.rowImportSpec) {\\n\\t\\tthis.tiddlerFields = {};\\n\\t\\tthis.skipTiddler = false;\\n\\t\\t// Determine the type of row\\n\\t\\tthis.rowType = this.rowImportSpec.fields[\\\"import-row-type\\\"] || \\\"by-field\\\";\\n\\t\\tswitch(this.rowType) {\\n\\t\\t\\tcase \\\"by-column\\\":\\n\\t\\t\\t\\tthis.processRowByColumn();\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\"by-field\\\":\\n\\t\\t\\t\\tthis.processRowByField();\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Save the tiddler if not skipped\\n\\t\\tif(!this.skipTiddler) {\\n\\t\\t\\tif(!this.tiddlerFields.title) {\\n\\t\\t\\t\\tthis.logger.alert(\\\"Missing title field for \\\" + JSON.stringify(this.tiddlerFields));\\n\\t\\t\\t}\\n\\t\\t\\tthis.results.push(this.tiddlerFields);\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t}\\n\\t}\\n};\\n\\nXLSXImporter.prototype.processRowByColumn = function() {\\n\\tvar self = this;\\n\\t// Iterate through the columns for the row\\n\\t$tw.utils.each(this.columnsByName,function(index,name) {\\n\\t\\tvar cell = self.sheet[XLSX.utils.encode_cell({c: self.columnsByName[name], r: self.row})];\\n\\t\\tname = name.toLowerCase();\\n\\t\\tif(cell && cell.w && $tw.utils.isValidFieldName(name)) {\\n\\t\\t\\tself.tiddlerFields[name] = cell.w;\\t\\t\\n\\t\\t}\\n\\t});\\n\\t// Skip the tiddler entirely if it doesn't have a title\\n\\tif(!this.tiddlerFields.title) {\\n\\t\\tthis.skipTiddler = true;\\n\\t}\\n};\\n\\nXLSXImporter.prototype.processRowByField = function() {\\n\\t// Iterate through the fields for the row\\n\\t$tw.utils.each(this.rowImportSpec.fields.list || [],this.processField.bind(this));\\n};\\n\\nXLSXImporter.prototype.processField = function(fieldImportSpecTitle) {\\n\\tvar fieldImportSpec = this.wiki.getTiddler(fieldImportSpecTitle);\\n\\tif(fieldImportSpec) {\\n\\t\\tvar fieldName = fieldImportSpec.fields[\\\"import-field-name\\\"],\\n\\t\\t\\tvalue;\\n\\t\\tswitch(fieldImportSpec.fields[\\\"import-field-source\\\"]) {\\n\\t\\t\\tcase \\\"column\\\":\\n\\t\\t\\t\\tvar columnName = fieldImportSpec.fields[\\\"import-field-column\\\"],\\n\\t\\t\\t\\t\\tcell = this.sheet[XLSX.utils.encode_cell({c: this.columnsByName[columnName], r: this.row})];\\n\\t\\t\\t\\tif(cell) {\\n\\t\\t\\t\\t\\tswitch(fieldImportSpec.fields[\\\"import-field-type\\\"] || \\\"string\\\") {\\n\\t\\t\\t\\t\\t\\tcase \\\"date\\\":\\n\\t\\t\\t\\t\\t\\t\\tif(cell.t === \\\"n\\\") {\\n\\t\\t\\t\\t\\t\\t\\t\\tvalue = $tw.utils.stringifyDate(new Date((cell.v - (25567 + 2)) * 86400 * 1000));\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t\\tcase \\\"string\\\":\\n\\t\\t\\t\\t\\t\\t\\t// Intentional fall-through\\n\\t\\t\\t\\t\\t\\tdefault:\\n\\t\\t\\t\\t\\t\\t\\tvalue = cell.w;\\n\\t\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\"constant\\\":\\n\\t\\t\\t\\tvalue = fieldImportSpec.fields[\\\"import-field-value\\\"]\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\tvalue = (value || \\\"\\\").trim();\\n\\t\\tif(value === \\\"\\\") {\\n\\t\\t\\tif((fieldImportSpec.fields[\\\"import-field-skip-tiddler-if-blank\\\"] || \\\"\\\").trim().toLowerCase() === \\\"yes\\\") {\\n\\t\\t\\t\\tthis.skipTiddler = true;\\n\\t\\t\\t}\\n\\t\\t\\tif(fieldImportSpec.fields[\\\"import-field-replace-blank\\\"]) {\\n\\t\\t\\t\\tvalue = fieldImportSpec.fields[\\\"import-field-replace-blank\\\"];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(fieldImportSpec.fields[\\\"import-field-prefix\\\"]) {\\n\\t\\t\\tvalue = fieldImportSpec.fields[\\\"import-field-prefix\\\"] + value;\\n\\t\\t}\\n\\t\\tif(fieldImportSpec.fields[\\\"import-field-suffix\\\"]) {\\n\\t\\t\\tvalue = value + fieldImportSpec.fields[\\\"import-field-suffix\\\"];\\n\\t\\t}\\n\\t\\tswitch(fieldImportSpec.fields[\\\"import-field-list-op\\\"] || \\\"none\\\") {\\n\\t\\t\\tcase \\\"none\\\":\\n\\t\\t\\t\\tthis.tiddlerFields[fieldName] = value;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\"append\\\":\\n\\t\\t\\t\\tvar list = $tw.utils.parseStringArray(this.tiddlerFields[fieldName] || \\\"\\\");\\n\\t\\t\\t\\t$tw.utils.pushTop(list,value)\\n\\t\\t\\t\\tthis.tiddlerFields[fieldName] = list;\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n}\\n\\nXLSXImporter.prototype.measureSheet = function(sheet) {\\n\\tvar sheetRange = XLSX.utils.decode_range(sheet[\\\"!ref\\\"]);\\n\\treturn {\\n\\t\\tstartRow: Math.min(sheetRange.s.r,sheetRange.e.r),\\n\\t\\tendRow: Math.max(sheetRange.s.r,sheetRange.e.r),\\n\\t\\tstartCol: Math.min(sheetRange.s.c,sheetRange.e.c),\\n\\t\\tendCol: Math.max(sheetRange.s.c,sheetRange.e.c)\\n\\t}\\n};\\n\\nXLSXImporter.prototype.findColumns = function(sheet,sheetSize) {\\n\\tvar columnsByName = {};\\n\\tfor(var col=sheetSize.startCol; col<=sheetSize.endCol; col++) {\\n\\t\\tvar cell = sheet[XLSX.utils.encode_cell({c: col, r: sheetSize.startRow})],\\n\\t\\t\\tcolumnName;\\n\\t\\tif(cell) {\\n\\t\\t\\tcolumnName = cell.w;\\n\\t\\t\\tif(columnName) {\\n\\t\\t\\t\\tcolumnsByName[columnName] = col;\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn columnsByName;\\n};\\n\\nexports.XLSXImporter = XLSXImporter;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/readme\",\n \"text\": \"This plugin provides a flexible way to import tiddlers from Excel files. It is based on the library [[js-xlsx|https://github.com/SheetJS/js-xlsx]].\\n\\nThe plugin uses //import specifications// to determine how incoming spreadsheets are processed. You can view, create and edit import specifications in the control panel \\\"XLSX Utilities\\\" tab, or directly in the [[plugin controls|$:/plugins/tiddlywiki/xlsx-utils]]. This is also where you select which import specification is selected for use during the next import operation.\\n\\nEach sheet is expected to consist of a single header row followed by multiple content rows, each consisting of an independent record. The plugin automatically detects the extent of each sheet by looking for the bottom right cell that contains a value. This can lead to unexpected results if a cell is accidentally created with an invisible, blank value.\\n\\nImport specifications describe how tiddlers are created from a particular row of a sheet; multiple tiddlers can be generated from a single row. (Conversely, if different rows yield tiddlers with the same title then they will overwrite one another).\\n\\nEach field of each tiddler can be assigned a constant value, or a value taken from a named column of the sheet, optionally with a prefix and/or suffix added. There is special support for handling list fields (like the tags field), with the ability to append new items to the list.\\n\\nInternally, each import specifier is actually modelled as a hierarchy of connected tiddlers with the field ''import-spec-role'' indicating the following roles:\\n\\n* ''workbook'': describes the sheets to be imported from the workbook\\n* ''sheet'': describes each sheet to be processed\\n* ''row'': describes the tiddlers to be imported from each row of each sheet\\n* ''field'': describes the fields to be assigned to each tiddler from each row of each sheet\\n\\nThe easiest way to understand the structure is to explore the example import specifications, and the corresponding spreadsheets they are designed to handle.\\n\\nNote that there are many possible different ways of importing a particular spreadsheet, depending on whether the structures are modelled with fields, tags, prefixes or other mechanisms. The plugin is designed to support a wide range of applications.\\n\\nThis plugin also requires the JSZip plugin ([[$:/plugins/tiddlywiki/jszip]]) to be installed.\\n\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/startup.js\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/startup.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/xlsx-utils/startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nInitialisation\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\n// Export name and synchronous status\\nexports.name = \\\"xlsx-startup\\\";\\nexports.after = [\\\"load-modules\\\"];\\nexports.synchronous = true;\\n\\nexports.startup = function() {\\n\\t// Check JSZip is installed\\n\\tif(!$tw.utils.hop($tw.modules.titles,\\\"$:/plugins/tiddlywiki/jszip/jszip.js\\\")) {\\n\\t\\t// Make a logger\\n\\t\\tvar logger = new $tw.utils.Logger(\\\"xlsx-utils\\\");\\n\\t\\tlogger.alert(\\\"The plugin 'xlsx-utils' requires the 'jszip' plugin to be installed\\\");\\n\\t}\\n};\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"startup\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/styles\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/styles\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\define quick-colour-selector-background() #bac0f1\\n\\\\define quick-colour-selector-border() #9196c1\\n\\n\\\\define quick-colour-editor-background() #bae3f1\\n\\\\define quick-colour-editor-controls() #d2ffff\\n\\\\define quick-colour-editor-border() #97b8c3\\n\\n\\\\define quick-colour-workbook-background() #baf1db\\n\\\\define quick-colour-workbook-controls() #d3fff6\\n\\\\define quick-colour-workbook-border() #98c3b2\\n\\n\\\\define quick-colour-sheet-background() #f1ebba\\n\\\\define quick-colour-sheet-controls() #fffed3\\n\\\\define quick-colour-sheet-border() #c4be98\\n\\n\\\\define quick-colour-row-background() #f1baba\\n\\\\define quick-colour-row-controls() #fed1d2\\n\\\\define quick-colour-row-border() #c39697\\n\\n\\\\define quick-colour-field-background() #e0d4fb\\n\\\\define quick-colour-field-controls() #fcefff\\n\\\\define quick-colour-field-border() #b6adcb\\n\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-import-spec-selector {\\n\\tborder: 1px solid <<quick-colour-selector-border>>;\\n\\tbackground-color: <<quick-colour-selector-background>>;\\n\\tpadding: 0.25em;\\n}\\n\\n.tc-import-spec-editor-wrapper {\\n\\tborder: 1px solid <<quick-colour-editor-border>>;\\n\\tbackground-color: <<quick-colour-editor-background>>;\\n\\tpadding: 0.25em;\\n}\\n\\n.tc-import-spec-editor {\\n\\tborder: 1px solid <<quick-colour-editor-border>>;\\n\\tbackground-color: <<colour background>>;\\n\\tmargin: 0.25em;\\n}\\n\\n.tc-import-spec-editor-controls {\\n\\tdisplay: block;\\n\\tbackground-color: <<quick-colour-editor-controls>>;\\n\\tborder-bottom: 1px solid <<quick-colour-editor-background>>;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tlist-style: none;\\n}\\n\\n.tc-import-spec-editor-controls li {\\n\\tpadding: 0.25em 0.5em;\\n}\\n\\n.tc-import-spec-editor-controls li:not(:last-child) {\\n\\tborder-bottom: 1px solid <<quick-colour-editor-background>>;\\n}\\n\\n.tc-import-spec-editor-list {\\n}\\n\\n.tc-import-spec-workbook-wrapper {\\n\\tborder: 1px solid <<quick-colour-workbook-border>>;\\n\\tbackground-color: <<quick-colour-workbook-background>>;\\n\\tpadding: 0.25em;\\n\\tmargin: 0.5em;\\n}\\n\\n.tc-import-spec-workbook {\\n\\tborder: 1px solid <<quick-colour-workbook-border>>;\\n\\tbackground-color: <<colour background>>;\\n\\tmargin: 0.25em;\\n}\\n\\n.tc-import-spec-workbook-controls {\\n\\tdisplay: block;\\n\\tbackground-color: <<quick-colour-workbook-controls>>;\\n\\tborder-bottom: 1px solid <<quick-colour-workbook-background>>;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tlist-style: none;\\n}\\n\\n.tc-import-spec-workbook-controls li {\\n\\tpadding: 0.25em 0.5em;\\n}\\n\\n.tc-import-spec-workbook-controls li:not(:last-child) {\\n\\tborder-bottom: 1px solid <<quick-colour-workbook-background>>;\\n}\\n\\n.tc-import-spec-workbook-list {\\n}\\n\\n.tc-import-spec-sheet-wrapper {\\n\\tborder: 1px solid <<quick-colour-sheet-border>>;\\n\\tbackground-color: <<quick-colour-sheet-background>>;\\n\\tpadding: 0.25em;\\n\\tmargin: 0.5em;\\n}\\n\\n.tc-import-spec-sheet {\\n\\tborder: 1px solid <<quick-colour-sheet-border>>;\\n\\tbackground-color: <<colour background>>;\\n\\tmargin: 0.25em;\\n}\\n\\n.tc-import-spec-sheet-controls {\\n\\tdisplay: block;\\n\\tbackground-color: <<quick-colour-sheet-controls>>;\\n\\tborder-bottom: 1px solid <<quick-colour-sheet-background>>;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tlist-style: none;\\n}\\n\\n.tc-import-spec-sheet-controls li {\\n\\tpadding: 0.25em 0.5em;\\n}\\n\\n.tc-import-spec-sheet-controls li:not(:last-child) {\\n\\tborder-bottom: 1px solid <<quick-colour-sheet-background>>;\\n}\\n\\n.tc-import-spec-sheet-list {\\n}\\n\\n.tc-import-spec-row-wrapper {\\n\\tborder: 1px solid <<quick-colour-row-border>>;\\n\\tbackground-color: <<quick-colour-row-background>>;\\n\\tpadding: 0.25em;\\n\\tmargin: 0.5em;\\n}\\n\\n.tc-import-spec-row {\\n\\tborder: 1px solid <<quick-colour-row-border>>;\\n\\tbackground-color: <<colour background>>;\\n\\tmargin: 0.25em;\\n}\\n\\n.tc-import-spec-row-controls {\\n\\tdisplay: block;\\n\\tbackground-color: <<quick-colour-row-controls>>;\\n\\tborder-bottom: 1px solid <<quick-colour-row-background>>;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tlist-style: none;\\n}\\n\\n.tc-import-spec-row-controls li {\\n\\tpadding: 0.25em 0.5em;\\n}\\n\\n.tc-import-spec-row-controls li:not(:last-child) {\\n\\tborder-bottom: 1px solid <<quick-colour-row-background>>;\\n}\\n\\n.tc-import-spec-row-list {\\n\\tlist-style: none;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n}\\n\\n.tc-import-spec-field-wrapper {\\n\\tfont-size: 0.9em;\\n\\tborder: 1px solid <<quick-colour-field-border>>;\\n\\tbackground-color: <<quick-colour-field-background>>;\\n\\tpadding: 0.25em;\\n\\tmargin: 0.5em;\\n}\\n\"\n },\n \"$:/plugins/tiddlywiki/xlsx-utils/xlsx-import-command.js\": {\n \"title\": \"$:/plugins/tiddlywiki/xlsx-utils/xlsx-import-command.js\",\n \"text\": \"/*\\\\\\ntitle: $:/plugins/tiddlywiki/xlsx-utils/xlsx-import-command.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to import an xlsx file\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nexports.info = {\\n\\tname: \\\"xlsx-import\\\",\\n\\tsynchronous: true\\n};\\n\\nvar Command = function(params,commander,callback) {\\n\\tthis.params = params;\\n\\tthis.commander = commander;\\n\\tthis.callback = callback;\\n};\\n\\nCommand.prototype.execute = function() {\\n\\tif(this.params.length < 1) {\\n\\t\\treturn \\\"Missing parameters\\\";\\n\\t}\\n\\tvar self = this,\\n\\t\\twiki = this.commander.wiki,\\n\\t\\tfilename = this.params[0],\\n\\t\\timportSpec = this.params[1],\\n\\t\\tXLSXImporter = require(\\\"$:/plugins/tiddlywiki/xlsx-utils/importer.js\\\").XLSXImporter,\\n\\t\\timporter = new XLSXImporter({\\n\\t\\t\\tfilename: filename,\\n\\t\\t\\timportSpec: importSpec,\\n\\t\\t\\twiki: wiki\\n\\t\\t});\\n\\twiki.addTiddlers(importer.getResults());\\n\\treturn null;\\n};\\n\\nexports.Command = Command;\\n\\n})();\\n\",\n \"type\": \"application/javascript\",\n \"module-type\": \"command\"\n }\n }\n}"},"$:/plugins/tiddlywiki/xmldom":{"title":"$:/plugins/tiddlywiki/xmldom","name":"xmldom","description":"xmldom library","list":"readme license","version":"5.1.23-prerelease","plugin-type":"plugin","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/plugins/tiddlywiki/xmldom/dom\": {\n \"text\": \"/*\\n * DOM Level 2\\n * Object DOMException\\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\\n */\\n\\nfunction copy(src,dest){\\n\\tfor(var p in src){\\n\\t\\tdest[p] = src[p];\\n\\t}\\n}\\n/**\\n^\\\\w+\\\\.prototype\\\\.([_\\\\w]+)\\\\s*=\\\\s*((?:.*\\\\{\\\\s*?[\\\\r\\\\n][\\\\s\\\\S]*?^})|\\\\S.*?(?=[;\\\\r\\\\n]));?\\n^\\\\w+\\\\.prototype\\\\.([_\\\\w]+)\\\\s*=\\\\s*(\\\\S.*?(?=[;\\\\r\\\\n]));?\\n */\\nfunction _extends(Class,Super){\\n\\tvar pt = Class.prototype;\\n\\tif(Object.create){\\n\\t\\tvar ppt = Object.create(Super.prototype)\\n\\t\\tpt.__proto__ = ppt;\\n\\t}\\n\\tif(!(pt instanceof Super)){\\n\\t\\tfunction t(){};\\n\\t\\tt.prototype = Super.prototype;\\n\\t\\tt = new t();\\n\\t\\tcopy(pt,t);\\n\\t\\tClass.prototype = pt = t;\\n\\t}\\n\\tif(pt.constructor != Class){\\n\\t\\tif(typeof Class != 'function'){\\n\\t\\t\\tconsole.error(\\\"unknow Class:\\\"+Class)\\n\\t\\t}\\n\\t\\tpt.constructor = Class\\n\\t}\\n}\\nvar htmlns = 'http://www.w3.org/1999/xhtml' ;\\n// Node Types\\nvar NodeType = {}\\nvar ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;\\nvar ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;\\nvar TEXT_NODE = NodeType.TEXT_NODE = 3;\\nvar CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;\\nvar ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;\\nvar ENTITY_NODE = NodeType.ENTITY_NODE = 6;\\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\\nvar COMMENT_NODE = NodeType.COMMENT_NODE = 8;\\nvar DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;\\nvar DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;\\nvar DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;\\nvar NOTATION_NODE = NodeType.NOTATION_NODE = 12;\\n\\n// ExceptionCode\\nvar ExceptionCode = {}\\nvar ExceptionMessage = {};\\nvar INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]=\\\"Index size error\\\"),1);\\nvar DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]=\\\"DOMString size error\\\"),2);\\nvar HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]=\\\"Hierarchy request error\\\"),3);\\nvar WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]=\\\"Wrong document\\\"),4);\\nvar INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]=\\\"Invalid character\\\"),5);\\nvar NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]=\\\"No data allowed\\\"),6);\\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\\\"No modification allowed\\\"),7);\\nvar NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]=\\\"Not found\\\"),8);\\nvar NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]=\\\"Not supported\\\"),9);\\nvar INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]=\\\"Attribute in use\\\"),10);\\n//level2\\nvar INVALID_STATE_ERR \\t= ExceptionCode.INVALID_STATE_ERR \\t= ((ExceptionMessage[11]=\\\"Invalid state\\\"),11);\\nvar SYNTAX_ERR \\t= ExceptionCode.SYNTAX_ERR \\t= ((ExceptionMessage[12]=\\\"Syntax error\\\"),12);\\nvar INVALID_MODIFICATION_ERR \\t= ExceptionCode.INVALID_MODIFICATION_ERR \\t= ((ExceptionMessage[13]=\\\"Invalid modification\\\"),13);\\nvar NAMESPACE_ERR \\t= ExceptionCode.NAMESPACE_ERR \\t= ((ExceptionMessage[14]=\\\"Invalid namespace\\\"),14);\\nvar INVALID_ACCESS_ERR \\t= ExceptionCode.INVALID_ACCESS_ERR \\t= ((ExceptionMessage[15]=\\\"Invalid access\\\"),15);\\n\\n\\nfunction DOMException(code, message) {\\n\\tif(message instanceof Error){\\n\\t\\tvar error = message;\\n\\t}else{\\n\\t\\terror = this;\\n\\t\\tError.call(this, ExceptionMessage[code]);\\n\\t\\tthis.message = ExceptionMessage[code];\\n\\t\\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\\n\\t}\\n\\terror.code = code;\\n\\tif(message) this.message = this.message + \\\": \\\" + message;\\n\\treturn error;\\n};\\nDOMException.prototype = Error.prototype;\\ncopy(ExceptionCode,DOMException)\\n/**\\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\\n * The items in the NodeList are accessible via an integral index, starting from 0.\\n */\\nfunction NodeList() {\\n};\\nNodeList.prototype = {\\n\\t/**\\n\\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\\n\\t * @standard level1\\n\\t */\\n\\tlength:0, \\n\\t/**\\n\\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\\n\\t * @standard level1\\n\\t * @param index unsigned long \\n\\t * Index into the collection.\\n\\t * @return Node\\n\\t * \\tThe node at the indexth position in the NodeList, or null if that is not a valid index. \\n\\t */\\n\\titem: function(index) {\\n\\t\\treturn this[index] || null;\\n\\t},\\n\\ttoString:function(isHTML,nodeFilter){\\n\\t\\tfor(var buf = [], i = 0;i<this.length;i++){\\n\\t\\t\\tserializeToString(this[i],buf,isHTML,nodeFilter);\\n\\t\\t}\\n\\t\\treturn buf.join('');\\n\\t}\\n};\\nfunction LiveNodeList(node,refresh){\\n\\tthis._node = node;\\n\\tthis._refresh = refresh\\n\\t_updateLiveList(this);\\n}\\nfunction _updateLiveList(list){\\n\\tvar inc = list._node._inc || list._node.ownerDocument._inc;\\n\\tif(list._inc != inc){\\n\\t\\tvar ls = list._refresh(list._node);\\n\\t\\t//console.log(ls.length)\\n\\t\\t__set__(list,'length',ls.length);\\n\\t\\tcopy(ls,list);\\n\\t\\tlist._inc = inc;\\n\\t}\\n}\\nLiveNodeList.prototype.item = function(i){\\n\\t_updateLiveList(this);\\n\\treturn this[i];\\n}\\n\\n_extends(LiveNodeList,NodeList);\\n/**\\n * \\n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.\\n * NamedNodeMap objects in the DOM are live.\\n * used for attributes or DocumentType entities \\n */\\nfunction NamedNodeMap() {\\n};\\n\\nfunction _findNodeIndex(list,node){\\n\\tvar i = list.length;\\n\\twhile(i--){\\n\\t\\tif(list[i] === node){return i}\\n\\t}\\n}\\n\\nfunction _addNamedNode(el,list,newAttr,oldAttr){\\n\\tif(oldAttr){\\n\\t\\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\\n\\t}else{\\n\\t\\tlist[list.length++] = newAttr;\\n\\t}\\n\\tif(el){\\n\\t\\tnewAttr.ownerElement = el;\\n\\t\\tvar doc = el.ownerDocument;\\n\\t\\tif(doc){\\n\\t\\t\\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\\n\\t\\t\\t_onAddAttribute(doc,el,newAttr);\\n\\t\\t}\\n\\t}\\n}\\nfunction _removeNamedNode(el,list,attr){\\n\\t//console.log('remove attr:'+attr)\\n\\tvar i = _findNodeIndex(list,attr);\\n\\tif(i>=0){\\n\\t\\tvar lastIndex = list.length-1\\n\\t\\twhile(i<lastIndex){\\n\\t\\t\\tlist[i] = list[++i]\\n\\t\\t}\\n\\t\\tlist.length = lastIndex;\\n\\t\\tif(el){\\n\\t\\t\\tvar doc = el.ownerDocument;\\n\\t\\t\\tif(doc){\\n\\t\\t\\t\\t_onRemoveAttribute(doc,el,attr);\\n\\t\\t\\t\\tattr.ownerElement = null;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}else{\\n\\t\\tthrow DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))\\n\\t}\\n}\\nNamedNodeMap.prototype = {\\n\\tlength:0,\\n\\titem:NodeList.prototype.item,\\n\\tgetNamedItem: function(key) {\\n//\\t\\tif(key.indexOf(':')>0 || key == 'xmlns'){\\n//\\t\\t\\treturn null;\\n//\\t\\t}\\n\\t\\t//console.log()\\n\\t\\tvar i = this.length;\\n\\t\\twhile(i--){\\n\\t\\t\\tvar attr = this[i];\\n\\t\\t\\t//console.log(attr.nodeName,key)\\n\\t\\t\\tif(attr.nodeName == key){\\n\\t\\t\\t\\treturn attr;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\tsetNamedItem: function(attr) {\\n\\t\\tvar el = attr.ownerElement;\\n\\t\\tif(el && el!=this._ownerElement){\\n\\t\\t\\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\\n\\t\\t}\\n\\t\\tvar oldAttr = this.getNamedItem(attr.nodeName);\\n\\t\\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\\n\\t\\treturn oldAttr;\\n\\t},\\n\\t/* returns Node */\\n\\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\\n\\t\\tvar el = attr.ownerElement, oldAttr;\\n\\t\\tif(el && el!=this._ownerElement){\\n\\t\\t\\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\\n\\t\\t}\\n\\t\\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\\n\\t\\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\\n\\t\\treturn oldAttr;\\n\\t},\\n\\n\\t/* returns Node */\\n\\tremoveNamedItem: function(key) {\\n\\t\\tvar attr = this.getNamedItem(key);\\n\\t\\t_removeNamedNode(this._ownerElement,this,attr);\\n\\t\\treturn attr;\\n\\t\\t\\n\\t\\t\\n\\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\\n\\t\\n\\t//for level2\\n\\tremoveNamedItemNS:function(namespaceURI,localName){\\n\\t\\tvar attr = this.getNamedItemNS(namespaceURI,localName);\\n\\t\\t_removeNamedNode(this._ownerElement,this,attr);\\n\\t\\treturn attr;\\n\\t},\\n\\tgetNamedItemNS: function(namespaceURI, localName) {\\n\\t\\tvar i = this.length;\\n\\t\\twhile(i--){\\n\\t\\t\\tvar node = this[i];\\n\\t\\t\\tif(node.localName == localName && node.namespaceURI == namespaceURI){\\n\\t\\t\\t\\treturn node;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn null;\\n\\t}\\n};\\n/**\\n * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490\\n */\\nfunction DOMImplementation(/* Object */ features) {\\n\\tthis._features = {};\\n\\tif (features) {\\n\\t\\tfor (var feature in features) {\\n\\t\\t\\t this._features = features[feature];\\n\\t\\t}\\n\\t}\\n};\\n\\nDOMImplementation.prototype = {\\n\\thasFeature: function(/* string */ feature, /* string */ version) {\\n\\t\\tvar versions = this._features[feature.toLowerCase()];\\n\\t\\tif (versions && (!version || version in versions)) {\\n\\t\\t\\treturn true;\\n\\t\\t} else {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t},\\n\\t// Introduced in DOM Level 2:\\n\\tcreateDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR\\n\\t\\tvar doc = new Document();\\n\\t\\tdoc.implementation = this;\\n\\t\\tdoc.childNodes = new NodeList();\\n\\t\\tdoc.doctype = doctype;\\n\\t\\tif(doctype){\\n\\t\\t\\tdoc.appendChild(doctype);\\n\\t\\t}\\n\\t\\tif(qualifiedName){\\n\\t\\t\\tvar root = doc.createElementNS(namespaceURI,qualifiedName);\\n\\t\\t\\tdoc.appendChild(root);\\n\\t\\t}\\n\\t\\treturn doc;\\n\\t},\\n\\t// Introduced in DOM Level 2:\\n\\tcreateDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR\\n\\t\\tvar node = new DocumentType();\\n\\t\\tnode.name = qualifiedName;\\n\\t\\tnode.nodeName = qualifiedName;\\n\\t\\tnode.publicId = publicId;\\n\\t\\tnode.systemId = systemId;\\n\\t\\t// Introduced in DOM Level 2:\\n\\t\\t//readonly attribute DOMString internalSubset;\\n\\t\\t\\n\\t\\t//TODO:..\\n\\t\\t// readonly attribute NamedNodeMap entities;\\n\\t\\t// readonly attribute NamedNodeMap notations;\\n\\t\\treturn node;\\n\\t}\\n};\\n\\n\\n/**\\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\\n */\\n\\nfunction Node() {\\n};\\n\\nNode.prototype = {\\n\\tfirstChild : null,\\n\\tlastChild : null,\\n\\tpreviousSibling : null,\\n\\tnextSibling : null,\\n\\tattributes : null,\\n\\tparentNode : null,\\n\\tchildNodes : null,\\n\\townerDocument : null,\\n\\tnodeValue : null,\\n\\tnamespaceURI : null,\\n\\tprefix : null,\\n\\tlocalName : null,\\n\\t// Modified in DOM Level 2:\\n\\tinsertBefore:function(newChild, refChild){//raises \\n\\t\\treturn _insertBefore(this,newChild,refChild);\\n\\t},\\n\\treplaceChild:function(newChild, oldChild){//raises \\n\\t\\tthis.insertBefore(newChild,oldChild);\\n\\t\\tif(oldChild){\\n\\t\\t\\tthis.removeChild(oldChild);\\n\\t\\t}\\n\\t},\\n\\tremoveChild:function(oldChild){\\n\\t\\treturn _removeChild(this,oldChild);\\n\\t},\\n\\tappendChild:function(newChild){\\n\\t\\treturn this.insertBefore(newChild,null);\\n\\t},\\n\\thasChildNodes:function(){\\n\\t\\treturn this.firstChild != null;\\n\\t},\\n\\tcloneNode:function(deep){\\n\\t\\treturn cloneNode(this.ownerDocument||this,this,deep);\\n\\t},\\n\\t// Modified in DOM Level 2:\\n\\tnormalize:function(){\\n\\t\\tvar child = this.firstChild;\\n\\t\\twhile(child){\\n\\t\\t\\tvar next = child.nextSibling;\\n\\t\\t\\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\\n\\t\\t\\t\\tthis.removeChild(next);\\n\\t\\t\\t\\tchild.appendData(next.data);\\n\\t\\t\\t}else{\\n\\t\\t\\t\\tchild.normalize();\\n\\t\\t\\t\\tchild = next;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n \\t// Introduced in DOM Level 2:\\n\\tisSupported:function(feature, version){\\n\\t\\treturn this.ownerDocument.implementation.hasFeature(feature,version);\\n\\t},\\n // Introduced in DOM Level 2:\\n hasAttributes:function(){\\n \\treturn this.attributes.length>0;\\n },\\n lookupPrefix:function(namespaceURI){\\n \\tvar el = this;\\n \\twhile(el){\\n \\t\\tvar map = el._nsMap;\\n \\t\\t//console.dir(map)\\n \\t\\tif(map){\\n \\t\\t\\tfor(var n in map){\\n \\t\\t\\t\\tif(map[n] == namespaceURI){\\n \\t\\t\\t\\t\\treturn n;\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n \\t\\t}\\n \\t\\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\\n \\t}\\n \\treturn null;\\n },\\n // Introduced in DOM Level 3:\\n lookupNamespaceURI:function(prefix){\\n \\tvar el = this;\\n \\twhile(el){\\n \\t\\tvar map = el._nsMap;\\n \\t\\t//console.dir(map)\\n \\t\\tif(map){\\n \\t\\t\\tif(prefix in map){\\n \\t\\t\\t\\treturn map[prefix] ;\\n \\t\\t\\t}\\n \\t\\t}\\n \\t\\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\\n \\t}\\n \\treturn null;\\n },\\n // Introduced in DOM Level 3:\\n isDefaultNamespace:function(namespaceURI){\\n \\tvar prefix = this.lookupPrefix(namespaceURI);\\n \\treturn prefix == null;\\n }\\n};\\n\\n\\nfunction _xmlEncoder(c){\\n\\treturn c == '<' && '<' ||\\n c == '>' && '>' ||\\n c == '&' && '&' ||\\n c == '\\\"' && '"' ||\\n '&#'+c.charCodeAt()+';'\\n}\\n\\n\\ncopy(NodeType,Node);\\ncopy(NodeType,Node.prototype);\\n\\n/**\\n * @param callback return true for continue,false for break\\n * @return boolean true: break visit;\\n */\\nfunction _visitNode(node,callback){\\n\\tif(callback(node)){\\n\\t\\treturn true;\\n\\t}\\n\\tif(node = node.firstChild){\\n\\t\\tdo{\\n\\t\\t\\tif(_visitNode(node,callback)){return true}\\n }while(node=node.nextSibling)\\n }\\n}\\n\\n\\n\\nfunction Document(){\\n}\\nfunction _onAddAttribute(doc,el,newAttr){\\n\\tdoc && doc._inc++;\\n\\tvar ns = newAttr.namespaceURI ;\\n\\tif(ns == 'http://www.w3.org/2000/xmlns/'){\\n\\t\\t//update namespace\\n\\t\\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\\n\\t}\\n}\\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\\n\\tdoc && doc._inc++;\\n\\tvar ns = newAttr.namespaceURI ;\\n\\tif(ns == 'http://www.w3.org/2000/xmlns/'){\\n\\t\\t//update namespace\\n\\t\\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\\n\\t}\\n}\\nfunction _onUpdateChild(doc,el,newChild){\\n\\tif(doc && doc._inc){\\n\\t\\tdoc._inc++;\\n\\t\\t//update childNodes\\n\\t\\tvar cs = el.childNodes;\\n\\t\\tif(newChild){\\n\\t\\t\\tcs[cs.length++] = newChild;\\n\\t\\t}else{\\n\\t\\t\\t//console.log(1)\\n\\t\\t\\tvar child = el.firstChild;\\n\\t\\t\\tvar i = 0;\\n\\t\\t\\twhile(child){\\n\\t\\t\\t\\tcs[i++] = child;\\n\\t\\t\\t\\tchild =child.nextSibling;\\n\\t\\t\\t}\\n\\t\\t\\tcs.length = i;\\n\\t\\t}\\n\\t}\\n}\\n\\n/**\\n * attributes;\\n * children;\\n * \\n * writeable properties:\\n * nodeValue,Attr:value,CharacterData:data\\n * prefix\\n */\\nfunction _removeChild(parentNode,child){\\n\\tvar previous = child.previousSibling;\\n\\tvar next = child.nextSibling;\\n\\tif(previous){\\n\\t\\tprevious.nextSibling = next;\\n\\t}else{\\n\\t\\tparentNode.firstChild = next\\n\\t}\\n\\tif(next){\\n\\t\\tnext.previousSibling = previous;\\n\\t}else{\\n\\t\\tparentNode.lastChild = previous;\\n\\t}\\n\\t_onUpdateChild(parentNode.ownerDocument,parentNode);\\n\\treturn child;\\n}\\n/**\\n * preformance key(refChild == null)\\n */\\nfunction _insertBefore(parentNode,newChild,nextChild){\\n\\tvar cp = newChild.parentNode;\\n\\tif(cp){\\n\\t\\tcp.removeChild(newChild);//remove and update\\n\\t}\\n\\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\\n\\t\\tvar newFirst = newChild.firstChild;\\n\\t\\tif (newFirst == null) {\\n\\t\\t\\treturn newChild;\\n\\t\\t}\\n\\t\\tvar newLast = newChild.lastChild;\\n\\t}else{\\n\\t\\tnewFirst = newLast = newChild;\\n\\t}\\n\\tvar pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;\\n\\n\\tnewFirst.previousSibling = pre;\\n\\tnewLast.nextSibling = nextChild;\\n\\t\\n\\t\\n\\tif(pre){\\n\\t\\tpre.nextSibling = newFirst;\\n\\t}else{\\n\\t\\tparentNode.firstChild = newFirst;\\n\\t}\\n\\tif(nextChild == null){\\n\\t\\tparentNode.lastChild = newLast;\\n\\t}else{\\n\\t\\tnextChild.previousSibling = newLast;\\n\\t}\\n\\tdo{\\n\\t\\tnewFirst.parentNode = parentNode;\\n\\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\\n\\t_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);\\n\\t//console.log(parentNode.lastChild.nextSibling == null)\\n\\tif (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {\\n\\t\\tnewChild.firstChild = newChild.lastChild = null;\\n\\t}\\n\\treturn newChild;\\n}\\nfunction _appendSingleChild(parentNode,newChild){\\n\\tvar cp = newChild.parentNode;\\n\\tif(cp){\\n\\t\\tvar pre = parentNode.lastChild;\\n\\t\\tcp.removeChild(newChild);//remove and update\\n\\t\\tvar pre = parentNode.lastChild;\\n\\t}\\n\\tvar pre = parentNode.lastChild;\\n\\tnewChild.parentNode = parentNode;\\n\\tnewChild.previousSibling = pre;\\n\\tnewChild.nextSibling = null;\\n\\tif(pre){\\n\\t\\tpre.nextSibling = newChild;\\n\\t}else{\\n\\t\\tparentNode.firstChild = newChild;\\n\\t}\\n\\tparentNode.lastChild = newChild;\\n\\t_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);\\n\\treturn newChild;\\n\\t//console.log(\\\"__aa\\\",parentNode.lastChild.nextSibling == null)\\n}\\nDocument.prototype = {\\n\\t//implementation : null,\\n\\tnodeName : '#document',\\n\\tnodeType : DOCUMENT_NODE,\\n\\tdoctype : null,\\n\\tdocumentElement : null,\\n\\t_inc : 1,\\n\\t\\n\\tinsertBefore : function(newChild, refChild){//raises \\n\\t\\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\\n\\t\\t\\tvar child = newChild.firstChild;\\n\\t\\t\\twhile(child){\\n\\t\\t\\t\\tvar next = child.nextSibling;\\n\\t\\t\\t\\tthis.insertBefore(child,refChild);\\n\\t\\t\\t\\tchild = next;\\n\\t\\t\\t}\\n\\t\\t\\treturn newChild;\\n\\t\\t}\\n\\t\\tif(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){\\n\\t\\t\\tthis.documentElement = newChild;\\n\\t\\t}\\n\\t\\t\\n\\t\\treturn _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;\\n\\t},\\n\\tremoveChild : function(oldChild){\\n\\t\\tif(this.documentElement == oldChild){\\n\\t\\t\\tthis.documentElement = null;\\n\\t\\t}\\n\\t\\treturn _removeChild(this,oldChild);\\n\\t},\\n\\t// Introduced in DOM Level 2:\\n\\timportNode : function(importedNode,deep){\\n\\t\\treturn importNode(this,importedNode,deep);\\n\\t},\\n\\t// Introduced in DOM Level 2:\\n\\tgetElementById :\\tfunction(id){\\n\\t\\tvar rtv = null;\\n\\t\\t_visitNode(this.documentElement,function(node){\\n\\t\\t\\tif(node.nodeType == ELEMENT_NODE){\\n\\t\\t\\t\\tif(node.getAttribute('id') == id){\\n\\t\\t\\t\\t\\trtv = node;\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t})\\n\\t\\treturn rtv;\\n\\t},\\n\\t\\n\\t//document factory method:\\n\\tcreateElement :\\tfunction(tagName){\\n\\t\\tvar node = new Element();\\n\\t\\tnode.ownerDocument = this;\\n\\t\\tnode.nodeName = tagName;\\n\\t\\tnode.tagName = tagName;\\n\\t\\tnode.childNodes = new NodeList();\\n\\t\\tvar attrs\\t= node.attributes = new NamedNodeMap();\\n\\t\\tattrs._ownerElement = node;\\n\\t\\treturn node;\\n\\t},\\n\\tcreateDocumentFragment :\\tfunction(){\\n\\t\\tvar node = new DocumentFragment();\\n\\t\\tnode.ownerDocument = this;\\n\\t\\tnode.childNodes = new NodeList();\\n\\t\\treturn node;\\n\\t},\\n\\tcreateTextNode :\\tfunction(data){\\n\\t\\tvar node = new Text();\\n\\t\\tnode.ownerDocument = this;\\n\\t\\tnode.appendData(data)\\n\\t\\treturn node;\\n\\t},\\n\\tcreateComment :\\tfunction(data){\\n\\t\\tvar node = new Comment();\\n\\t\\tnode.ownerDocument = this;\\n\\t\\tnode.appendData(data)\\n\\t\\treturn node;\\n\\t},\\n\\tcreateCDATASection :\\tfunction(data){\\n\\t\\tvar node = new CDATASection();\\n\\t\\tnode.ownerDocument = this;\\n\\t\\tnode.appendData(data)\\n\\t\\treturn node;\\n\\t},\\n\\tcreateProcessingInstruction :\\tfunction(target,data){\\n\\t\\tvar node = new ProcessingInstruction();\\n\\t\\tnode.ownerDocument = this;\\n\\t\\tnode.tagName = node.target = target;\\n\\t\\tnode.nodeValue= node.data = data;\\n\\t\\treturn node;\\n\\t},\\n\\tcreateAttribute :\\tfunction(name){\\n\\t\\tvar node = new Attr();\\n\\t\\tnode.ownerDocument\\t= this;\\n\\t\\tnode.name = name;\\n\\t\\tnode.nodeName\\t= name;\\n\\t\\tnode.localName = name;\\n\\t\\tnode.specified = true;\\n\\t\\treturn node;\\n\\t},\\n\\tcreateEntityReference :\\tfunction(name){\\n\\t\\tvar node = new EntityReference();\\n\\t\\tnode.ownerDocument\\t= this;\\n\\t\\tnode.nodeName\\t= name;\\n\\t\\treturn node;\\n\\t},\\n\\t// Introduced in DOM Level 2:\\n\\tcreateElementNS :\\tfunction(namespaceURI,qualifiedName){\\n\\t\\tvar node = new Element();\\n\\t\\tvar pl = qualifiedName.split(':');\\n\\t\\tvar attrs\\t= node.attributes = new NamedNodeMap();\\n\\t\\tnode.childNodes = new NodeList();\\n\\t\\tnode.ownerDocument = this;\\n\\t\\tnode.nodeName = qualifiedName;\\n\\t\\tnode.tagName = qualifiedName;\\n\\t\\tnode.namespaceURI = namespaceURI;\\n\\t\\tif(pl.length == 2){\\n\\t\\t\\tnode.prefix = pl[0];\\n\\t\\t\\tnode.localName = pl[1];\\n\\t\\t}else{\\n\\t\\t\\t//el.prefix = null;\\n\\t\\t\\tnode.localName = qualifiedName;\\n\\t\\t}\\n\\t\\tattrs._ownerElement = node;\\n\\t\\treturn node;\\n\\t},\\n\\t// Introduced in DOM Level 2:\\n\\tcreateAttributeNS :\\tfunction(namespaceURI,qualifiedName){\\n\\t\\tvar node = new Attr();\\n\\t\\tvar pl = qualifiedName.split(':');\\n\\t\\tnode.ownerDocument = this;\\n\\t\\tnode.nodeName = qualifiedName;\\n\\t\\tnode.name = qualifiedName;\\n\\t\\tnode.namespaceURI = namespaceURI;\\n\\t\\tnode.specified = true;\\n\\t\\tif(pl.length == 2){\\n\\t\\t\\tnode.prefix = pl[0];\\n\\t\\t\\tnode.localName = pl[1];\\n\\t\\t}else{\\n\\t\\t\\t//el.prefix = null;\\n\\t\\t\\tnode.localName = qualifiedName;\\n\\t\\t}\\n\\t\\treturn node;\\n\\t}\\n};\\n_extends(Document,Node);\\n\\n\\nfunction Element() {\\n\\tthis._nsMap = {};\\n};\\nElement.prototype = {\\n\\tnodeType : ELEMENT_NODE,\\n\\thasAttribute : function(name){\\n\\t\\treturn this.getAttributeNode(name)!=null;\\n\\t},\\n\\tgetAttribute : function(name){\\n\\t\\tvar attr = this.getAttributeNode(name);\\n\\t\\treturn attr && attr.value || '';\\n\\t},\\n\\tgetAttributeNode : function(name){\\n\\t\\treturn this.attributes.getNamedItem(name);\\n\\t},\\n\\tsetAttribute : function(name, value){\\n\\t\\tvar attr = this.ownerDocument.createAttribute(name);\\n\\t\\tattr.value = attr.nodeValue = \\\"\\\" + value;\\n\\t\\tthis.setAttributeNode(attr)\\n\\t},\\n\\tremoveAttribute : function(name){\\n\\t\\tvar attr = this.getAttributeNode(name)\\n\\t\\tattr && this.removeAttributeNode(attr);\\n\\t},\\n\\t\\n\\t//four real opeartion method\\n\\tappendChild:function(newChild){\\n\\t\\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\\n\\t\\t\\treturn this.insertBefore(newChild,null);\\n\\t\\t}else{\\n\\t\\t\\treturn _appendSingleChild(this,newChild);\\n\\t\\t}\\n\\t},\\n\\tsetAttributeNode : function(newAttr){\\n\\t\\treturn this.attributes.setNamedItem(newAttr);\\n\\t},\\n\\tsetAttributeNodeNS : function(newAttr){\\n\\t\\treturn this.attributes.setNamedItemNS(newAttr);\\n\\t},\\n\\tremoveAttributeNode : function(oldAttr){\\n\\t\\t//console.log(this == oldAttr.ownerElement)\\n\\t\\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\\n\\t},\\n\\t//get real attribute name,and remove it by removeAttributeNode\\n\\tremoveAttributeNS : function(namespaceURI, localName){\\n\\t\\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\\n\\t\\told && this.removeAttributeNode(old);\\n\\t},\\n\\t\\n\\thasAttributeNS : function(namespaceURI, localName){\\n\\t\\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\\n\\t},\\n\\tgetAttributeNS : function(namespaceURI, localName){\\n\\t\\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\\n\\t\\treturn attr && attr.value || '';\\n\\t},\\n\\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\\n\\t\\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\\n\\t\\tattr.value = attr.nodeValue = \\\"\\\" + value;\\n\\t\\tthis.setAttributeNode(attr)\\n\\t},\\n\\tgetAttributeNodeNS : function(namespaceURI, localName){\\n\\t\\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\\n\\t},\\n\\t\\n\\tgetElementsByTagName : function(tagName){\\n\\t\\treturn new LiveNodeList(this,function(base){\\n\\t\\t\\tvar ls = [];\\n\\t\\t\\t_visitNode(base,function(node){\\n\\t\\t\\t\\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\\n\\t\\t\\t\\t\\tls.push(node);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\treturn ls;\\n\\t\\t});\\n\\t},\\n\\tgetElementsByTagNameNS : function(namespaceURI, localName){\\n\\t\\treturn new LiveNodeList(this,function(base){\\n\\t\\t\\tvar ls = [];\\n\\t\\t\\t_visitNode(base,function(node){\\n\\t\\t\\t\\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\\n\\t\\t\\t\\t\\tls.push(node);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\treturn ls;\\n\\t\\t\\t\\n\\t\\t});\\n\\t}\\n};\\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\\n\\n\\n_extends(Element,Node);\\nfunction Attr() {\\n};\\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\\n_extends(Attr,Node);\\n\\n\\nfunction CharacterData() {\\n};\\nCharacterData.prototype = {\\n\\tdata : '',\\n\\tsubstringData : function(offset, count) {\\n\\t\\treturn this.data.substring(offset, offset+count);\\n\\t},\\n\\tappendData: function(text) {\\n\\t\\ttext = this.data+text;\\n\\t\\tthis.nodeValue = this.data = text;\\n\\t\\tthis.length = text.length;\\n\\t},\\n\\tinsertData: function(offset,text) {\\n\\t\\tthis.replaceData(offset,0,text);\\n\\t\\n\\t},\\n\\tappendChild:function(newChild){\\n\\t\\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\\n\\t},\\n\\tdeleteData: function(offset, count) {\\n\\t\\tthis.replaceData(offset,count,\\\"\\\");\\n\\t},\\n\\treplaceData: function(offset, count, text) {\\n\\t\\tvar start = this.data.substring(0,offset);\\n\\t\\tvar end = this.data.substring(offset+count);\\n\\t\\ttext = start + text + end;\\n\\t\\tthis.nodeValue = this.data = text;\\n\\t\\tthis.length = text.length;\\n\\t}\\n}\\n_extends(CharacterData,Node);\\nfunction Text() {\\n};\\nText.prototype = {\\n\\tnodeName : \\\"#text\\\",\\n\\tnodeType : TEXT_NODE,\\n\\tsplitText : function(offset) {\\n\\t\\tvar text = this.data;\\n\\t\\tvar newText = text.substring(offset);\\n\\t\\ttext = text.substring(0, offset);\\n\\t\\tthis.data = this.nodeValue = text;\\n\\t\\tthis.length = text.length;\\n\\t\\tvar newNode = this.ownerDocument.createTextNode(newText);\\n\\t\\tif(this.parentNode){\\n\\t\\t\\tthis.parentNode.insertBefore(newNode, this.nextSibling);\\n\\t\\t}\\n\\t\\treturn newNode;\\n\\t}\\n}\\n_extends(Text,CharacterData);\\nfunction Comment() {\\n};\\nComment.prototype = {\\n\\tnodeName : \\\"#comment\\\",\\n\\tnodeType : COMMENT_NODE\\n}\\n_extends(Comment,CharacterData);\\n\\nfunction CDATASection() {\\n};\\nCDATASection.prototype = {\\n\\tnodeName : \\\"#cdata-section\\\",\\n\\tnodeType : CDATA_SECTION_NODE\\n}\\n_extends(CDATASection,CharacterData);\\n\\n\\nfunction DocumentType() {\\n};\\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\\n_extends(DocumentType,Node);\\n\\nfunction Notation() {\\n};\\nNotation.prototype.nodeType = NOTATION_NODE;\\n_extends(Notation,Node);\\n\\nfunction Entity() {\\n};\\nEntity.prototype.nodeType = ENTITY_NODE;\\n_extends(Entity,Node);\\n\\nfunction EntityReference() {\\n};\\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\\n_extends(EntityReference,Node);\\n\\nfunction DocumentFragment() {\\n};\\nDocumentFragment.prototype.nodeName =\\t\\\"#document-fragment\\\";\\nDocumentFragment.prototype.nodeType =\\tDOCUMENT_FRAGMENT_NODE;\\n_extends(DocumentFragment,Node);\\n\\n\\nfunction ProcessingInstruction() {\\n}\\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\\n_extends(ProcessingInstruction,Node);\\nfunction XMLSerializer(){}\\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\\n\\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\\n}\\nNode.prototype.toString = nodeSerializeToString;\\nfunction nodeSerializeToString(isHtml,nodeFilter){\\n\\tvar buf = [];\\n\\tvar refNode = this.nodeType == 9 && this.documentElement || this;\\n\\tvar prefix = refNode.prefix;\\n\\tvar uri = refNode.namespaceURI;\\n\\t\\n\\tif(uri && prefix == null){\\n\\t\\t//console.log(prefix)\\n\\t\\tvar prefix = refNode.lookupPrefix(uri);\\n\\t\\tif(prefix == null){\\n\\t\\t\\t//isHTML = true;\\n\\t\\t\\tvar visibleNamespaces=[\\n\\t\\t\\t{namespace:uri,prefix:null}\\n\\t\\t\\t//{namespace:uri,prefix:''}\\n\\t\\t\\t]\\n\\t\\t}\\n\\t}\\n\\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\\n\\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\\n\\treturn buf.join('');\\n}\\nfunction needNamespaceDefine(node,isHTML, visibleNamespaces) {\\n\\tvar prefix = node.prefix||'';\\n\\tvar uri = node.namespaceURI;\\n\\tif (!prefix && !uri){\\n\\t\\treturn false;\\n\\t}\\n\\tif (prefix === \\\"xml\\\" && uri === \\\"http://www.w3.org/XML/1998/namespace\\\" \\n\\t\\t|| uri == 'http://www.w3.org/2000/xmlns/'){\\n\\t\\treturn false;\\n\\t}\\n\\t\\n\\tvar i = visibleNamespaces.length \\n\\t//console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)\\n\\twhile (i--) {\\n\\t\\tvar ns = visibleNamespaces[i];\\n\\t\\t// get namespace prefix\\n\\t\\t//console.log(node.nodeType,node.tagName,ns.prefix,prefix)\\n\\t\\tif (ns.prefix == prefix){\\n\\t\\t\\treturn ns.namespace != uri;\\n\\t\\t}\\n\\t}\\n\\t//console.log(isHTML,uri,prefix=='')\\n\\t//if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){\\n\\t//\\treturn false;\\n\\t//}\\n\\t//node.flag = '11111'\\n\\t//console.error(3,true,node.flag,node.prefix,node.namespaceURI)\\n\\treturn true;\\n}\\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\\n\\tif(nodeFilter){\\n\\t\\tnode = nodeFilter(node);\\n\\t\\tif(node){\\n\\t\\t\\tif(typeof node == 'string'){\\n\\t\\t\\t\\tbuf.push(node);\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}else{\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t//buf.sort.apply(attrs, attributeSorter);\\n\\t}\\n\\tswitch(node.nodeType){\\n\\tcase ELEMENT_NODE:\\n\\t\\tif (!visibleNamespaces) visibleNamespaces = [];\\n\\t\\tvar startVisibleNamespaces = visibleNamespaces.length;\\n\\t\\tvar attrs = node.attributes;\\n\\t\\tvar len = attrs.length;\\n\\t\\tvar child = node.firstChild;\\n\\t\\tvar nodeName = node.tagName;\\n\\t\\t\\n\\t\\tisHTML = (htmlns === node.namespaceURI) ||isHTML \\n\\t\\tbuf.push('<',nodeName);\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\tfor(var i=0;i<len;i++){\\n\\t\\t\\t// add namespaces for attributes\\n\\t\\t\\tvar attr = attrs.item(i);\\n\\t\\t\\tif (attr.prefix == 'xmlns') {\\n\\t\\t\\t\\tvisibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });\\n\\t\\t\\t}else if(attr.nodeName == 'xmlns'){\\n\\t\\t\\t\\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfor(var i=0;i<len;i++){\\n\\t\\t\\tvar attr = attrs.item(i);\\n\\t\\t\\tif (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {\\n\\t\\t\\t\\tvar prefix = attr.prefix||'';\\n\\t\\t\\t\\tvar uri = attr.namespaceURI;\\n\\t\\t\\t\\tvar ns = prefix ? ' xmlns:' + prefix : \\\" xmlns\\\";\\n\\t\\t\\t\\tbuf.push(ns, '=\\\"' , uri , '\\\"');\\n\\t\\t\\t\\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\\n\\t\\t\\t}\\n\\t\\t\\tserializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);\\n\\t\\t}\\n\\t\\t// add namespace for current node\\t\\t\\n\\t\\tif (needNamespaceDefine(node,isHTML, visibleNamespaces)) {\\n\\t\\t\\tvar prefix = node.prefix||'';\\n\\t\\t\\tvar uri = node.namespaceURI;\\n\\t\\t\\tvar ns = prefix ? ' xmlns:' + prefix : \\\" xmlns\\\";\\n\\t\\t\\tbuf.push(ns, '=\\\"' , uri , '\\\"');\\n\\t\\t\\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\\n\\t\\t}\\n\\t\\t\\n\\t\\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){\\n\\t\\t\\tbuf.push('>');\\n\\t\\t\\t//if is cdata child node\\n\\t\\t\\tif(isHTML && /^script$/i.test(nodeName)){\\n\\t\\t\\t\\twhile(child){\\n\\t\\t\\t\\t\\tif(child.data){\\n\\t\\t\\t\\t\\t\\tbuf.push(child.data);\\n\\t\\t\\t\\t\\t}else{\\n\\t\\t\\t\\t\\t\\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tchild = child.nextSibling;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}else\\n\\t\\t\\t{\\n\\t\\t\\t\\twhile(child){\\n\\t\\t\\t\\t\\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\\n\\t\\t\\t\\t\\tchild = child.nextSibling;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tbuf.push('</',nodeName,'>');\\n\\t\\t}else{\\n\\t\\t\\tbuf.push('/>');\\n\\t\\t}\\n\\t\\t// remove added visible namespaces\\n\\t\\t//visibleNamespaces.length = startVisibleNamespaces;\\n\\t\\treturn;\\n\\tcase DOCUMENT_NODE:\\n\\tcase DOCUMENT_FRAGMENT_NODE:\\n\\t\\tvar child = node.firstChild;\\n\\t\\twhile(child){\\n\\t\\t\\tserializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);\\n\\t\\t\\tchild = child.nextSibling;\\n\\t\\t}\\n\\t\\treturn;\\n\\tcase ATTRIBUTE_NODE:\\n\\t\\treturn buf.push(' ',node.name,'=\\\"',node.value.replace(/[<&\\\"]/g,_xmlEncoder),'\\\"');\\n\\tcase TEXT_NODE:\\n\\t\\treturn buf.push(node.data.replace(/[<&]/g,_xmlEncoder));\\n\\tcase CDATA_SECTION_NODE:\\n\\t\\treturn buf.push( '<![CDATA[',node.data,']]>');\\n\\tcase COMMENT_NODE:\\n\\t\\treturn buf.push( \\\"<!--\\\",node.data,\\\"-->\\\");\\n\\tcase DOCUMENT_TYPE_NODE:\\n\\t\\tvar pubid = node.publicId;\\n\\t\\tvar sysid = node.systemId;\\n\\t\\tbuf.push('<!DOCTYPE ',node.name);\\n\\t\\tif(pubid){\\n\\t\\t\\tbuf.push(' PUBLIC \\\"',pubid);\\n\\t\\t\\tif (sysid && sysid!='.') {\\n\\t\\t\\t\\tbuf.push( '\\\" \\\"',sysid);\\n\\t\\t\\t}\\n\\t\\t\\tbuf.push('\\\">');\\n\\t\\t}else if(sysid && sysid!='.'){\\n\\t\\t\\tbuf.push(' SYSTEM \\\"',sysid,'\\\">');\\n\\t\\t}else{\\n\\t\\t\\tvar sub = node.internalSubset;\\n\\t\\t\\tif(sub){\\n\\t\\t\\t\\tbuf.push(\\\" [\\\",sub,\\\"]\\\");\\n\\t\\t\\t}\\n\\t\\t\\tbuf.push(\\\">\\\");\\n\\t\\t}\\n\\t\\treturn;\\n\\tcase PROCESSING_INSTRUCTION_NODE:\\n\\t\\treturn buf.push( \\\"<?\\\",node.target,\\\" \\\",node.data,\\\"?>\\\");\\n\\tcase ENTITY_REFERENCE_NODE:\\n\\t\\treturn buf.push( '&',node.nodeName,';');\\n\\t//case ENTITY_NODE:\\n\\t//case NOTATION_NODE:\\n\\tdefault:\\n\\t\\tbuf.push('??',node.nodeName);\\n\\t}\\n}\\nfunction importNode(doc,node,deep){\\n\\tvar node2;\\n\\tswitch (node.nodeType) {\\n\\tcase ELEMENT_NODE:\\n\\t\\tnode2 = node.cloneNode(false);\\n\\t\\tnode2.ownerDocument = doc;\\n\\t\\t//var attrs = node2.attributes;\\n\\t\\t//var len = attrs.length;\\n\\t\\t//for(var i=0;i<len;i++){\\n\\t\\t\\t//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));\\n\\t\\t//}\\n\\tcase DOCUMENT_FRAGMENT_NODE:\\n\\t\\tbreak;\\n\\tcase ATTRIBUTE_NODE:\\n\\t\\tdeep = true;\\n\\t\\tbreak;\\n\\t//case ENTITY_REFERENCE_NODE:\\n\\t//case PROCESSING_INSTRUCTION_NODE:\\n\\t////case TEXT_NODE:\\n\\t//case CDATA_SECTION_NODE:\\n\\t//case COMMENT_NODE:\\n\\t//\\tdeep = false;\\n\\t//\\tbreak;\\n\\t//case DOCUMENT_NODE:\\n\\t//case DOCUMENT_TYPE_NODE:\\n\\t//cannot be imported.\\n\\t//case ENTITY_NODE:\\n\\t//case NOTATION_NODE:\\n\\t//can not hit in level3\\n\\t//default:throw e;\\n\\t}\\n\\tif(!node2){\\n\\t\\tnode2 = node.cloneNode(false);//false\\n\\t}\\n\\tnode2.ownerDocument = doc;\\n\\tnode2.parentNode = null;\\n\\tif(deep){\\n\\t\\tvar child = node.firstChild;\\n\\t\\twhile(child){\\n\\t\\t\\tnode2.appendChild(importNode(doc,child,deep));\\n\\t\\t\\tchild = child.nextSibling;\\n\\t\\t}\\n\\t}\\n\\treturn node2;\\n}\\n//\\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\\n//\\t\\t\\t\\t\\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\\nfunction cloneNode(doc,node,deep){\\n\\tvar node2 = new node.constructor();\\n\\tfor(var n in node){\\n\\t\\tvar v = node[n];\\n\\t\\tif(typeof v != 'object' ){\\n\\t\\t\\tif(v != node2[n]){\\n\\t\\t\\t\\tnode2[n] = v;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tif(node.childNodes){\\n\\t\\tnode2.childNodes = new NodeList();\\n\\t}\\n\\tnode2.ownerDocument = doc;\\n\\tswitch (node2.nodeType) {\\n\\tcase ELEMENT_NODE:\\n\\t\\tvar attrs\\t= node.attributes;\\n\\t\\tvar attrs2\\t= node2.attributes = new NamedNodeMap();\\n\\t\\tvar len = attrs.length\\n\\t\\tattrs2._ownerElement = node2;\\n\\t\\tfor(var i=0;i<len;i++){\\n\\t\\t\\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\\n\\t\\t}\\n\\t\\tbreak;;\\n\\tcase ATTRIBUTE_NODE:\\n\\t\\tdeep = true;\\n\\t}\\n\\tif(deep){\\n\\t\\tvar child = node.firstChild;\\n\\t\\twhile(child){\\n\\t\\t\\tnode2.appendChild(cloneNode(doc,child,deep));\\n\\t\\t\\tchild = child.nextSibling;\\n\\t\\t}\\n\\t}\\n\\treturn node2;\\n}\\n\\nfunction __set__(object,key,value){\\n\\tobject[key] = value\\n}\\n//do dynamic\\ntry{\\n\\tif(Object.defineProperty){\\n\\t\\tObject.defineProperty(LiveNodeList.prototype,'length',{\\n\\t\\t\\tget:function(){\\n\\t\\t\\t\\t_updateLiveList(this);\\n\\t\\t\\t\\treturn this.$$length;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tObject.defineProperty(Node.prototype,'textContent',{\\n\\t\\t\\tget:function(){\\n\\t\\t\\t\\treturn getTextContent(this);\\n\\t\\t\\t},\\n\\t\\t\\tset:function(data){\\n\\t\\t\\t\\tswitch(this.nodeType){\\n\\t\\t\\t\\tcase ELEMENT_NODE:\\n\\t\\t\\t\\tcase DOCUMENT_FRAGMENT_NODE:\\n\\t\\t\\t\\t\\twhile(this.firstChild){\\n\\t\\t\\t\\t\\t\\tthis.removeChild(this.firstChild);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif(data || String(data)){\\n\\t\\t\\t\\t\\t\\tthis.appendChild(this.ownerDocument.createTextNode(data));\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tdefault:\\n\\t\\t\\t\\t\\t//TODO:\\n\\t\\t\\t\\t\\tthis.data = data;\\n\\t\\t\\t\\t\\tthis.value = data;\\n\\t\\t\\t\\t\\tthis.nodeValue = data;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t})\\n\\t\\t\\n\\t\\tfunction getTextContent(node){\\n\\t\\t\\tswitch(node.nodeType){\\n\\t\\t\\tcase ELEMENT_NODE:\\n\\t\\t\\tcase DOCUMENT_FRAGMENT_NODE:\\n\\t\\t\\t\\tvar buf = [];\\n\\t\\t\\t\\tnode = node.firstChild;\\n\\t\\t\\t\\twhile(node){\\n\\t\\t\\t\\t\\tif(node.nodeType!==7 && node.nodeType !==8){\\n\\t\\t\\t\\t\\t\\tbuf.push(getTextContent(node));\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tnode = node.nextSibling;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn buf.join('');\\n\\t\\t\\tdefault:\\n\\t\\t\\t\\treturn node.nodeValue;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t__set__ = function(object,key,value){\\n\\t\\t\\t//console.log(value)\\n\\t\\t\\tobject['$$'+key] = value\\n\\t\\t}\\n\\t}\\n}catch(e){//ie8\\n}\\n\\n//if(typeof require == 'function'){\\n\\texports.DOMImplementation = DOMImplementation;\\n\\texports.XMLSerializer = XMLSerializer;\\n//}\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/xmldom/dom\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/xmldom/dom-parser\": {\n \"text\": \"function DOMParser(options){\\r\\n\\tthis.options = options ||{locator:{}};\\r\\n\\t\\r\\n}\\r\\nDOMParser.prototype.parseFromString = function(source,mimeType){\\r\\n\\tvar options = this.options;\\r\\n\\tvar sax = new XMLReader();\\r\\n\\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\\r\\n\\tvar errorHandler = options.errorHandler;\\r\\n\\tvar locator = options.locator;\\r\\n\\tvar defaultNSMap = options.xmlns||{};\\r\\n\\tvar isHTML = /\\\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\\r\\n \\tvar entityMap = isHTML?require('./entities').entityMap:{'lt':'<','gt':'>','amp':'&','quot':'\\\"','apos':\\\"'\\\"};\\r\\n\\tif(locator){\\r\\n\\t\\tdomBuilder.setDocumentLocator(locator)\\r\\n\\t}\\r\\n\\t\\r\\n\\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\\r\\n\\tsax.domBuilder = options.domBuilder || domBuilder;\\r\\n\\tif(isHTML){\\r\\n\\t\\tdefaultNSMap['']= 'http://www.w3.org/1999/xhtml';\\r\\n\\t}\\r\\n\\tdefaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';\\r\\n\\tif(source){\\r\\n\\t\\tsax.parse(source,defaultNSMap,entityMap);\\r\\n\\t}else{\\r\\n\\t\\tsax.errorHandler.error(\\\"invalid doc source\\\");\\r\\n\\t}\\r\\n\\treturn domBuilder.doc;\\r\\n}\\r\\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\\r\\n\\tif(!errorImpl){\\r\\n\\t\\tif(domBuilder instanceof DOMHandler){\\r\\n\\t\\t\\treturn domBuilder;\\r\\n\\t\\t}\\r\\n\\t\\terrorImpl = domBuilder ;\\r\\n\\t}\\r\\n\\tvar errorHandler = {}\\r\\n\\tvar isCallback = errorImpl instanceof Function;\\r\\n\\tlocator = locator||{}\\r\\n\\tfunction build(key){\\r\\n\\t\\tvar fn = errorImpl[key];\\r\\n\\t\\tif(!fn && isCallback){\\r\\n\\t\\t\\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\\r\\n\\t\\t}\\r\\n\\t\\terrorHandler[key] = fn && function(msg){\\r\\n\\t\\t\\tfn('[xmldom '+key+']\\\\t'+msg+_locator(locator));\\r\\n\\t\\t}||function(){};\\r\\n\\t}\\r\\n\\tbuild('warning');\\r\\n\\tbuild('error');\\r\\n\\tbuild('fatalError');\\r\\n\\treturn errorHandler;\\r\\n}\\r\\n\\r\\n//console.log('#\\\\n\\\\n\\\\n\\\\n\\\\n\\\\n\\\\n####')\\r\\n/**\\r\\n * +ContentHandler+ErrorHandler\\r\\n * +LexicalHandler+EntityResolver2\\r\\n * -DeclHandler-DTDHandler \\r\\n * \\r\\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\\r\\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\\r\\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\\r\\n */\\r\\nfunction DOMHandler() {\\r\\n this.cdata = false;\\r\\n}\\r\\nfunction position(locator,node){\\r\\n\\tnode.lineNumber = locator.lineNumber;\\r\\n\\tnode.columnNumber = locator.columnNumber;\\r\\n}\\r\\n/**\\r\\n * @see org.xml.sax.ContentHandler#startDocument\\r\\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\\r\\n */ \\r\\nDOMHandler.prototype = {\\r\\n\\tstartDocument : function() {\\r\\n \\tthis.doc = new DOMImplementation().createDocument(null, null, null);\\r\\n \\tif (this.locator) {\\r\\n \\tthis.doc.documentURI = this.locator.systemId;\\r\\n \\t}\\r\\n\\t},\\r\\n\\tstartElement:function(namespaceURI, localName, qName, attrs) {\\r\\n\\t\\tvar doc = this.doc;\\r\\n\\t var el = doc.createElementNS(namespaceURI, qName||localName);\\r\\n\\t var len = attrs.length;\\r\\n\\t appendElement(this, el);\\r\\n\\t this.currentElement = el;\\r\\n\\t \\r\\n\\t\\tthis.locator && position(this.locator,el)\\r\\n\\t for (var i = 0 ; i < len; i++) {\\r\\n\\t var namespaceURI = attrs.getURI(i);\\r\\n\\t var value = attrs.getValue(i);\\r\\n\\t var qName = attrs.getQName(i);\\r\\n\\t\\t\\tvar attr = doc.createAttributeNS(namespaceURI, qName);\\r\\n\\t\\t\\tthis.locator &&position(attrs.getLocator(i),attr);\\r\\n\\t\\t\\tattr.value = attr.nodeValue = value;\\r\\n\\t\\t\\tel.setAttributeNode(attr)\\r\\n\\t }\\r\\n\\t},\\r\\n\\tendElement:function(namespaceURI, localName, qName) {\\r\\n\\t\\tvar current = this.currentElement\\r\\n\\t\\tvar tagName = current.tagName;\\r\\n\\t\\tthis.currentElement = current.parentNode;\\r\\n\\t},\\r\\n\\tstartPrefixMapping:function(prefix, uri) {\\r\\n\\t},\\r\\n\\tendPrefixMapping:function(prefix) {\\r\\n\\t},\\r\\n\\tprocessingInstruction:function(target, data) {\\r\\n\\t var ins = this.doc.createProcessingInstruction(target, data);\\r\\n\\t this.locator && position(this.locator,ins)\\r\\n\\t appendElement(this, ins);\\r\\n\\t},\\r\\n\\tignorableWhitespace:function(ch, start, length) {\\r\\n\\t},\\r\\n\\tcharacters:function(chars, start, length) {\\r\\n\\t\\tchars = _toString.apply(this,arguments)\\r\\n\\t\\t//console.log(chars)\\r\\n\\t\\tif(chars){\\r\\n\\t\\t\\tif (this.cdata) {\\r\\n\\t\\t\\t\\tvar charNode = this.doc.createCDATASection(chars);\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tvar charNode = this.doc.createTextNode(chars);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif(this.currentElement){\\r\\n\\t\\t\\t\\tthis.currentElement.appendChild(charNode);\\r\\n\\t\\t\\t}else if(/^\\\\s*$/.test(chars)){\\r\\n\\t\\t\\t\\tthis.doc.appendChild(charNode);\\r\\n\\t\\t\\t\\t//process xml\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tthis.locator && position(this.locator,charNode)\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\tskippedEntity:function(name) {\\r\\n\\t},\\r\\n\\tendDocument:function() {\\r\\n\\t\\tthis.doc.normalize();\\r\\n\\t},\\r\\n\\tsetDocumentLocator:function (locator) {\\r\\n\\t if(this.locator = locator){// && !('lineNumber' in locator)){\\r\\n\\t \\tlocator.lineNumber = 0;\\r\\n\\t }\\r\\n\\t},\\r\\n\\t//LexicalHandler\\r\\n\\tcomment:function(chars, start, length) {\\r\\n\\t\\tchars = _toString.apply(this,arguments)\\r\\n\\t var comm = this.doc.createComment(chars);\\r\\n\\t this.locator && position(this.locator,comm)\\r\\n\\t appendElement(this, comm);\\r\\n\\t},\\r\\n\\t\\r\\n\\tstartCDATA:function() {\\r\\n\\t //used in characters() methods\\r\\n\\t this.cdata = true;\\r\\n\\t},\\r\\n\\tendCDATA:function() {\\r\\n\\t this.cdata = false;\\r\\n\\t},\\r\\n\\t\\r\\n\\tstartDTD:function(name, publicId, systemId) {\\r\\n\\t\\tvar impl = this.doc.implementation;\\r\\n\\t if (impl && impl.createDocumentType) {\\r\\n\\t var dt = impl.createDocumentType(name, publicId, systemId);\\r\\n\\t this.locator && position(this.locator,dt)\\r\\n\\t appendElement(this, dt);\\r\\n\\t }\\r\\n\\t},\\r\\n\\t/**\\r\\n\\t * @see org.xml.sax.ErrorHandler\\r\\n\\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\\r\\n\\t */\\r\\n\\twarning:function(error) {\\r\\n\\t\\tconsole.warn('[xmldom warning]\\\\t'+error,_locator(this.locator));\\r\\n\\t},\\r\\n\\terror:function(error) {\\r\\n\\t\\tconsole.error('[xmldom error]\\\\t'+error,_locator(this.locator));\\r\\n\\t},\\r\\n\\tfatalError:function(error) {\\r\\n\\t\\tconsole.error('[xmldom fatalError]\\\\t'+error,_locator(this.locator));\\r\\n\\t throw error;\\r\\n\\t}\\r\\n}\\r\\nfunction _locator(l){\\r\\n\\tif(l){\\r\\n\\t\\treturn '\\\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\\r\\n\\t}\\r\\n}\\r\\nfunction _toString(chars,start,length){\\r\\n\\tif(typeof chars == 'string'){\\r\\n\\t\\treturn chars.substr(start,length)\\r\\n\\t}else{//java sax connect width xmldom on rhino(what about: \\\"? && !(chars instanceof String)\\\")\\r\\n\\t\\tif(chars.length >= start+length || start){\\r\\n\\t\\t\\treturn new java.lang.String(chars,start,length)+'';\\r\\n\\t\\t}\\r\\n\\t\\treturn chars;\\r\\n\\t}\\r\\n}\\r\\n\\r\\n/*\\r\\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\\r\\n * used method of org.xml.sax.ext.LexicalHandler:\\r\\n * #comment(chars, start, length)\\r\\n * #startCDATA()\\r\\n * #endCDATA()\\r\\n * #startDTD(name, publicId, systemId)\\r\\n *\\r\\n *\\r\\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\\r\\n * #endDTD()\\r\\n * #startEntity(name)\\r\\n * #endEntity(name)\\r\\n *\\r\\n *\\r\\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\\r\\n * IGNORED method of org.xml.sax.ext.DeclHandler\\r\\n * \\t#attributeDecl(eName, aName, type, mode, value)\\r\\n * #elementDecl(name, model)\\r\\n * #externalEntityDecl(name, publicId, systemId)\\r\\n * #internalEntityDecl(name, value)\\r\\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\\r\\n * IGNORED method of org.xml.sax.EntityResolver2\\r\\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\\r\\n * #resolveEntity(publicId, systemId)\\r\\n * #getExternalSubset(name, baseURI)\\r\\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\\r\\n * IGNORED method of org.xml.sax.DTDHandler\\r\\n * #notationDecl(name, publicId, systemId) {};\\r\\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\\r\\n */\\r\\n\\\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\\\".replace(/\\\\w+/g,function(key){\\r\\n\\tDOMHandler.prototype[key] = function(){return null}\\r\\n})\\r\\n\\r\\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\\r\\nfunction appendElement (hander,node) {\\r\\n if (!hander.currentElement) {\\r\\n hander.doc.appendChild(node);\\r\\n } else {\\r\\n hander.currentElement.appendChild(node);\\r\\n }\\r\\n}//appendChild and setAttributeNS are preformance key\\r\\n\\r\\n//if(typeof require == 'function'){\\r\\n\\tvar XMLReader = require('./sax').XMLReader;\\r\\n\\tvar DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation;\\r\\n\\texports.XMLSerializer = require('./dom').XMLSerializer ;\\r\\n\\texports.DOMParser = DOMParser;\\r\\n//}\\r\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/xmldom/dom-parser\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/xmldom/entities\": {\n \"text\": \"exports.entityMap = {\\n lt: '<',\\n gt: '>',\\n amp: '&',\\n quot: '\\\"',\\n apos: \\\"'\\\",\\n Agrave: \\\"À\\\",\\n Aacute: \\\"Á\\\",\\n Acirc: \\\"Â\\\",\\n Atilde: \\\"Ã\\\",\\n Auml: \\\"Ä\\\",\\n Aring: \\\"Å\\\",\\n AElig: \\\"Æ\\\",\\n Ccedil: \\\"Ç\\\",\\n Egrave: \\\"È\\\",\\n Eacute: \\\"É\\\",\\n Ecirc: \\\"Ê\\\",\\n Euml: \\\"Ë\\\",\\n Igrave: \\\"Ì\\\",\\n Iacute: \\\"Í\\\",\\n Icirc: \\\"Î\\\",\\n Iuml: \\\"Ï\\\",\\n ETH: \\\"Ð\\\",\\n Ntilde: \\\"Ñ\\\",\\n Ograve: \\\"Ò\\\",\\n Oacute: \\\"Ó\\\",\\n Ocirc: \\\"Ô\\\",\\n Otilde: \\\"Õ\\\",\\n Ouml: \\\"Ö\\\",\\n Oslash: \\\"Ø\\\",\\n Ugrave: \\\"Ù\\\",\\n Uacute: \\\"Ú\\\",\\n Ucirc: \\\"Û\\\",\\n Uuml: \\\"Ü\\\",\\n Yacute: \\\"Ý\\\",\\n THORN: \\\"Þ\\\",\\n szlig: \\\"ß\\\",\\n agrave: \\\"à\\\",\\n aacute: \\\"á\\\",\\n acirc: \\\"â\\\",\\n atilde: \\\"ã\\\",\\n auml: \\\"ä\\\",\\n aring: \\\"å\\\",\\n aelig: \\\"æ\\\",\\n ccedil: \\\"ç\\\",\\n egrave: \\\"è\\\",\\n eacute: \\\"é\\\",\\n ecirc: \\\"ê\\\",\\n euml: \\\"ë\\\",\\n igrave: \\\"ì\\\",\\n iacute: \\\"í\\\",\\n icirc: \\\"î\\\",\\n iuml: \\\"ï\\\",\\n eth: \\\"ð\\\",\\n ntilde: \\\"ñ\\\",\\n ograve: \\\"ò\\\",\\n oacute: \\\"ó\\\",\\n ocirc: \\\"ô\\\",\\n otilde: \\\"õ\\\",\\n ouml: \\\"ö\\\",\\n oslash: \\\"ø\\\",\\n ugrave: \\\"ù\\\",\\n uacute: \\\"ú\\\",\\n ucirc: \\\"û\\\",\\n uuml: \\\"ü\\\",\\n yacute: \\\"ý\\\",\\n thorn: \\\"þ\\\",\\n yuml: \\\"ÿ\\\",\\n nbsp: \\\" \\\",\\n iexcl: \\\"¡\\\",\\n cent: \\\"¢\\\",\\n pound: \\\"£\\\",\\n curren: \\\"¤\\\",\\n yen: \\\"¥\\\",\\n brvbar: \\\"¦\\\",\\n sect: \\\"§\\\",\\n uml: \\\"¨\\\",\\n copy: \\\"©\\\",\\n ordf: \\\"ª\\\",\\n laquo: \\\"«\\\",\\n not: \\\"¬\\\",\\n shy: \\\"\\\",\\n reg: \\\"®\\\",\\n macr: \\\"¯\\\",\\n deg: \\\"°\\\",\\n plusmn: \\\"±\\\",\\n sup2: \\\"²\\\",\\n sup3: \\\"³\\\",\\n acute: \\\"´\\\",\\n micro: \\\"µ\\\",\\n para: \\\"¶\\\",\\n middot: \\\"·\\\",\\n cedil: \\\"¸\\\",\\n sup1: \\\"¹\\\",\\n ordm: \\\"º\\\",\\n raquo: \\\"»\\\",\\n frac14: \\\"¼\\\",\\n frac12: \\\"½\\\",\\n frac34: \\\"¾\\\",\\n iquest: \\\"¿\\\",\\n times: \\\"×\\\",\\n divide: \\\"÷\\\",\\n forall: \\\"∀\\\",\\n part: \\\"∂\\\",\\n exist: \\\"∃\\\",\\n empty: \\\"∅\\\",\\n nabla: \\\"∇\\\",\\n isin: \\\"∈\\\",\\n notin: \\\"∉\\\",\\n ni: \\\"∋\\\",\\n prod: \\\"∏\\\",\\n sum: \\\"∑\\\",\\n minus: \\\"−\\\",\\n lowast: \\\"∗\\\",\\n radic: \\\"√\\\",\\n prop: \\\"∝\\\",\\n infin: \\\"∞\\\",\\n ang: \\\"∠\\\",\\n and: \\\"∧\\\",\\n or: \\\"∨\\\",\\n cap: \\\"∩\\\",\\n cup: \\\"∪\\\",\\n 'int': \\\"∫\\\",\\n there4: \\\"∴\\\",\\n sim: \\\"∼\\\",\\n cong: \\\"≅\\\",\\n asymp: \\\"≈\\\",\\n ne: \\\"≠\\\",\\n equiv: \\\"≡\\\",\\n le: \\\"≤\\\",\\n ge: \\\"≥\\\",\\n sub: \\\"⊂\\\",\\n sup: \\\"⊃\\\",\\n nsub: \\\"⊄\\\",\\n sube: \\\"⊆\\\",\\n supe: \\\"⊇\\\",\\n oplus: \\\"⊕\\\",\\n otimes: \\\"⊗\\\",\\n perp: \\\"⊥\\\",\\n sdot: \\\"⋅\\\",\\n Alpha: \\\"Α\\\",\\n Beta: \\\"Β\\\",\\n Gamma: \\\"Γ\\\",\\n Delta: \\\"Δ\\\",\\n Epsilon: \\\"Ε\\\",\\n Zeta: \\\"Ζ\\\",\\n Eta: \\\"Η\\\",\\n Theta: \\\"Θ\\\",\\n Iota: \\\"Ι\\\",\\n Kappa: \\\"Κ\\\",\\n Lambda: \\\"Λ\\\",\\n Mu: \\\"Μ\\\",\\n Nu: \\\"Ν\\\",\\n Xi: \\\"Ξ\\\",\\n Omicron: \\\"Ο\\\",\\n Pi: \\\"Π\\\",\\n Rho: \\\"Ρ\\\",\\n Sigma: \\\"Σ\\\",\\n Tau: \\\"Τ\\\",\\n Upsilon: \\\"Υ\\\",\\n Phi: \\\"Φ\\\",\\n Chi: \\\"Χ\\\",\\n Psi: \\\"Ψ\\\",\\n Omega: \\\"Ω\\\",\\n alpha: \\\"α\\\",\\n beta: \\\"β\\\",\\n gamma: \\\"γ\\\",\\n delta: \\\"δ\\\",\\n epsilon: \\\"ε\\\",\\n zeta: \\\"ζ\\\",\\n eta: \\\"η\\\",\\n theta: \\\"θ\\\",\\n iota: \\\"ι\\\",\\n kappa: \\\"κ\\\",\\n lambda: \\\"λ\\\",\\n mu: \\\"μ\\\",\\n nu: \\\"ν\\\",\\n xi: \\\"ξ\\\",\\n omicron: \\\"ο\\\",\\n pi: \\\"π\\\",\\n rho: \\\"ρ\\\",\\n sigmaf: \\\"ς\\\",\\n sigma: \\\"σ\\\",\\n tau: \\\"τ\\\",\\n upsilon: \\\"υ\\\",\\n phi: \\\"φ\\\",\\n chi: \\\"χ\\\",\\n psi: \\\"ψ\\\",\\n omega: \\\"ω\\\",\\n thetasym: \\\"ϑ\\\",\\n upsih: \\\"ϒ\\\",\\n piv: \\\"ϖ\\\",\\n OElig: \\\"Œ\\\",\\n oelig: \\\"œ\\\",\\n Scaron: \\\"Š\\\",\\n scaron: \\\"š\\\",\\n Yuml: \\\"Ÿ\\\",\\n fnof: \\\"ƒ\\\",\\n circ: \\\"ˆ\\\",\\n tilde: \\\"˜\\\",\\n ensp: \\\" \\\",\\n emsp: \\\" \\\",\\n thinsp: \\\" \\\",\\n zwnj: \\\"\\\",\\n zwj: \\\"\\\",\\n lrm: \\\"\\\",\\n rlm: \\\"\\\",\\n ndash: \\\"–\\\",\\n mdash: \\\"—\\\",\\n lsquo: \\\"‘\\\",\\n rsquo: \\\"’\\\",\\n sbquo: \\\"‚\\\",\\n ldquo: \\\"“\\\",\\n rdquo: \\\"”\\\",\\n bdquo: \\\"„\\\",\\n dagger: \\\"†\\\",\\n Dagger: \\\"‡\\\",\\n bull: \\\"•\\\",\\n hellip: \\\"…\\\",\\n permil: \\\"‰\\\",\\n prime: \\\"′\\\",\\n Prime: \\\"″\\\",\\n lsaquo: \\\"‹\\\",\\n rsaquo: \\\"›\\\",\\n oline: \\\"‾\\\",\\n euro: \\\"€\\\",\\n trade: \\\"™\\\",\\n larr: \\\"←\\\",\\n uarr: \\\"↑\\\",\\n rarr: \\\"→\\\",\\n darr: \\\"↓\\\",\\n harr: \\\"↔\\\",\\n crarr: \\\"↵\\\",\\n lceil: \\\"⌈\\\",\\n rceil: \\\"⌉\\\",\\n lfloor: \\\"⌊\\\",\\n rfloor: \\\"⌋\\\",\\n loz: \\\"◊\\\",\\n spades: \\\"♠\\\",\\n clubs: \\\"♣\\\",\\n hearts: \\\"♥\\\",\\n diams: \\\"♦\\\"\\n};\\n//for(var n in exports.entityMap){console.log(exports.entityMap[n].charCodeAt())}\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/xmldom/entities\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/xmldom/sax\": {\n \"text\": \"//[4] \\tNameStartChar\\t ::= \\t\\\":\\\" | [A-Z] | \\\"_\\\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\\r\\n//[4a] \\tNameChar\\t ::= \\tNameStartChar | \\\"-\\\" | \\\".\\\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\\r\\n//[5] \\tName\\t ::= \\tNameStartChar (NameChar)*\\r\\nvar nameStartChar = /[A-Z_a-z\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD]///\\\\u10000-\\\\uEFFFF\\r\\nvar nameChar = new RegExp(\\\"[\\\\\\\\-\\\\\\\\.0-9\\\"+nameStartChar.source.slice(1,-1)+\\\"\\\\\\\\u00B7\\\\\\\\u0300-\\\\\\\\u036F\\\\\\\\u203F-\\\\\\\\u2040]\\\");\\r\\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\\\:'+nameStartChar.source+nameChar.source+'*)?$');\\r\\n//var tagNamePattern = /^[a-zA-Z_][\\\\w\\\\-\\\\.]*(?:\\\\:[a-zA-Z_][\\\\w\\\\-\\\\.]*)?$/\\r\\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\\r\\n\\r\\n//S_TAG,\\tS_ATTR,\\tS_EQ,\\tS_ATTR_NOQUOT_VALUE\\r\\n//S_ATTR_SPACE,\\tS_ATTR_END,\\tS_TAG_SPACE, S_TAG_CLOSE\\r\\nvar S_TAG = 0;//tag name offerring\\r\\nvar S_ATTR = 1;//attr name offerring \\r\\nvar S_ATTR_SPACE=2;//attr name end and space offer\\r\\nvar S_EQ = 3;//=space?\\r\\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\\r\\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\\r\\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\\r\\nvar S_TAG_CLOSE = 7;//closed el<el />\\r\\n\\r\\nfunction XMLReader(){\\r\\n\\t\\r\\n}\\r\\n\\r\\nXMLReader.prototype = {\\r\\n\\tparse:function(source,defaultNSMap,entityMap){\\r\\n\\t\\tvar domBuilder = this.domBuilder;\\r\\n\\t\\tdomBuilder.startDocument();\\r\\n\\t\\t_copy(defaultNSMap ,defaultNSMap = {})\\r\\n\\t\\tparse(source,defaultNSMap,entityMap,\\r\\n\\t\\t\\t\\tdomBuilder,this.errorHandler);\\r\\n\\t\\tdomBuilder.endDocument();\\r\\n\\t}\\r\\n}\\r\\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\\r\\n\\tfunction fixedFromCharCode(code) {\\r\\n\\t\\t// String.prototype.fromCharCode does not supports\\r\\n\\t\\t// > 2 bytes unicode chars directly\\r\\n\\t\\tif (code > 0xffff) {\\r\\n\\t\\t\\tcode -= 0x10000;\\r\\n\\t\\t\\tvar surrogate1 = 0xd800 + (code >> 10)\\r\\n\\t\\t\\t\\t, surrogate2 = 0xdc00 + (code & 0x3ff);\\r\\n\\r\\n\\t\\t\\treturn String.fromCharCode(surrogate1, surrogate2);\\r\\n\\t\\t} else {\\r\\n\\t\\t\\treturn String.fromCharCode(code);\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tfunction entityReplacer(a){\\r\\n\\t\\tvar k = a.slice(1,-1);\\r\\n\\t\\tif(k in entityMap){\\r\\n\\t\\t\\treturn entityMap[k]; \\r\\n\\t\\t}else if(k.charAt(0) === '#'){\\r\\n\\t\\t\\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\\r\\n\\t\\t}else{\\r\\n\\t\\t\\terrorHandler.error('entity not found:'+a);\\r\\n\\t\\t\\treturn a;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tfunction appendText(end){//has some bugs\\r\\n\\t\\tif(end>start){\\r\\n\\t\\t\\tvar xt = source.substring(start,end).replace(/&#?\\\\w+;/g,entityReplacer);\\r\\n\\t\\t\\tlocator&&position(start);\\r\\n\\t\\t\\tdomBuilder.characters(xt,0,end-start);\\r\\n\\t\\t\\tstart = end\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tfunction position(p,m){\\r\\n\\t\\twhile(p>=lineEnd && (m = linePattern.exec(source))){\\r\\n\\t\\t\\tlineStart = m.index;\\r\\n\\t\\t\\tlineEnd = lineStart + m[0].length;\\r\\n\\t\\t\\tlocator.lineNumber++;\\r\\n\\t\\t\\t//console.log('line++:',locator,startPos,endPos)\\r\\n\\t\\t}\\r\\n\\t\\tlocator.columnNumber = p-lineStart+1;\\r\\n\\t}\\r\\n\\tvar lineStart = 0;\\r\\n\\tvar lineEnd = 0;\\r\\n\\tvar linePattern = /.*(?:\\\\r\\\\n?|\\\\n)|.*$/g\\r\\n\\tvar locator = domBuilder.locator;\\r\\n\\t\\r\\n\\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\\r\\n\\tvar closeMap = {};\\r\\n\\tvar start = 0;\\r\\n\\twhile(true){\\r\\n\\t\\ttry{\\r\\n\\t\\t\\tvar tagStart = source.indexOf('<',start);\\r\\n\\t\\t\\tif(tagStart<0){\\r\\n\\t\\t\\t\\tif(!source.substr(start).match(/^\\\\s*$/)){\\r\\n\\t\\t\\t\\t\\tvar doc = domBuilder.doc;\\r\\n\\t \\t\\t\\tvar text = doc.createTextNode(source.substr(start));\\r\\n\\t \\t\\t\\tdoc.appendChild(text);\\r\\n\\t \\t\\t\\tdomBuilder.currentElement = text;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\treturn;\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif(tagStart>start){\\r\\n\\t\\t\\t\\tappendText(tagStart);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tswitch(source.charAt(tagStart+1)){\\r\\n\\t\\t\\tcase '/':\\r\\n\\t\\t\\t\\tvar end = source.indexOf('>',tagStart+3);\\r\\n\\t\\t\\t\\tvar tagName = source.substring(tagStart+2,end);\\r\\n\\t\\t\\t\\tvar config = parseStack.pop();\\r\\n\\t\\t\\t\\tif(end<0){\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t \\t\\ttagName = source.substring(tagStart+2).replace(/[\\\\s<].*/,'');\\r\\n\\t \\t\\t//console.error('#@@@@@@'+tagName)\\r\\n\\t \\t\\terrorHandler.error(\\\"end tag name: \\\"+tagName+' is not complete:'+config.tagName);\\r\\n\\t \\t\\tend = tagStart+1+tagName.length;\\r\\n\\t \\t}else if(tagName.match(/\\\\s</)){\\r\\n\\t \\t\\ttagName = tagName.replace(/[\\\\s<].*/,'');\\r\\n\\t \\t\\terrorHandler.error(\\\"end tag name: \\\"+tagName+' maybe not complete');\\r\\n\\t \\t\\tend = tagStart+1+tagName.length;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t//console.error(parseStack.length,parseStack)\\r\\n\\t\\t\\t\\t//console.error(config);\\r\\n\\t\\t\\t\\tvar localNSMap = config.localNSMap;\\r\\n\\t\\t\\t\\tvar endMatch = config.tagName == tagName;\\r\\n\\t\\t\\t\\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\\r\\n\\t\\t if(endIgnoreCaseMach){\\r\\n\\t\\t \\tdomBuilder.endElement(config.uri,config.localName,tagName);\\r\\n\\t\\t\\t\\t\\tif(localNSMap){\\r\\n\\t\\t\\t\\t\\t\\tfor(var prefix in localNSMap){\\r\\n\\t\\t\\t\\t\\t\\t\\tdomBuilder.endPrefixMapping(prefix) ;\\r\\n\\t\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\tif(!endMatch){\\r\\n\\t\\t \\terrorHandler.fatalError(\\\"end tag name: \\\"+tagName+' is not match the current start tagName:'+config.tagName );\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t }else{\\r\\n\\t\\t \\tparseStack.push(config)\\r\\n\\t\\t }\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\tend++;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t\\t// end elment\\r\\n\\t\\t\\tcase '?':// <?...?>\\r\\n\\t\\t\\t\\tlocator&&position(tagStart);\\r\\n\\t\\t\\t\\tend = parseInstruction(source,tagStart,domBuilder);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase '!':// <!doctype,<![CDATA,<!--\\r\\n\\t\\t\\t\\tlocator&&position(tagStart);\\r\\n\\t\\t\\t\\tend = parseDCC(source,tagStart,domBuilder,errorHandler);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tdefault:\\r\\n\\t\\t\\t\\tlocator&&position(tagStart);\\r\\n\\t\\t\\t\\tvar el = new ElementAttributes();\\r\\n\\t\\t\\t\\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\\r\\n\\t\\t\\t\\t//elStartEnd\\r\\n\\t\\t\\t\\tvar end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);\\r\\n\\t\\t\\t\\tvar len = el.length;\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\\r\\n\\t\\t\\t\\t\\tel.closed = true;\\r\\n\\t\\t\\t\\t\\tif(!entityMap.nbsp){\\r\\n\\t\\t\\t\\t\\t\\terrorHandler.warning('unclosed xml attribute');\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tif(locator && len){\\r\\n\\t\\t\\t\\t\\tvar locator2 = copyLocator(locator,{});\\r\\n\\t\\t\\t\\t\\t//try{//attribute position fixed\\r\\n\\t\\t\\t\\t\\tfor(var i = 0;i<len;i++){\\r\\n\\t\\t\\t\\t\\t\\tvar a = el[i];\\r\\n\\t\\t\\t\\t\\t\\tposition(a.offset);\\r\\n\\t\\t\\t\\t\\t\\ta.locator = copyLocator(locator,{});\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\t//}catch(e){console.error('@@@@@'+e)}\\r\\n\\t\\t\\t\\t\\tdomBuilder.locator = locator2\\r\\n\\t\\t\\t\\t\\tif(appendElement(el,domBuilder,currentNSMap)){\\r\\n\\t\\t\\t\\t\\t\\tparseStack.push(el)\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\tdomBuilder.locator = locator;\\r\\n\\t\\t\\t\\t}else{\\r\\n\\t\\t\\t\\t\\tif(appendElement(el,domBuilder,currentNSMap)){\\r\\n\\t\\t\\t\\t\\t\\tparseStack.push(el)\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\tif(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){\\r\\n\\t\\t\\t\\t\\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\\r\\n\\t\\t\\t\\t}else{\\r\\n\\t\\t\\t\\t\\tend++;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}catch(e){\\r\\n\\t\\t\\terrorHandler.error('element parse error: '+e)\\r\\n\\t\\t\\t//errorHandler.error('element parse error: '+e);\\r\\n\\t\\t\\tend = -1;\\r\\n\\t\\t\\t//throw e;\\r\\n\\t\\t}\\r\\n\\t\\tif(end>start){\\r\\n\\t\\t\\tstart = end;\\r\\n\\t\\t}else{\\r\\n\\t\\t\\t//TODO: 这里有可能sax回退,有位置错误风险\\r\\n\\t\\t\\tappendText(Math.max(tagStart,start)+1);\\r\\n\\t\\t}\\r\\n\\t}\\r\\n}\\r\\nfunction copyLocator(f,t){\\r\\n\\tt.lineNumber = f.lineNumber;\\r\\n\\tt.columnNumber = f.columnNumber;\\r\\n\\treturn t;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\\r\\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\\r\\n */\\r\\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\\r\\n\\tvar attrName;\\r\\n\\tvar value;\\r\\n\\tvar p = ++start;\\r\\n\\tvar s = S_TAG;//status\\r\\n\\twhile(true){\\r\\n\\t\\tvar c = source.charAt(p);\\r\\n\\t\\tswitch(c){\\r\\n\\t\\tcase '=':\\r\\n\\t\\t\\tif(s === S_ATTR){//attrName\\r\\n\\t\\t\\t\\tattrName = source.slice(start,p);\\r\\n\\t\\t\\t\\ts = S_EQ;\\r\\n\\t\\t\\t}else if(s === S_ATTR_SPACE){\\r\\n\\t\\t\\t\\ts = S_EQ;\\r\\n\\t\\t\\t}else{\\r\\n\\t\\t\\t\\t//fatalError: equal must after attrName or space after attrName\\r\\n\\t\\t\\t\\tthrow new Error('attribute equal must after attrName');\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tbreak;\\r\\n\\t\\tcase '\\\\'':\\r\\n\\t\\tcase '\\\"':\\r\\n\\t\\t\\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\\r\\n\\t\\t\\t\\t){//equal\\r\\n\\t\\t\\t\\tif(s === S_ATTR){\\r\\n\\t\\t\\t\\t\\terrorHandler.warning('attribute value must after \\\"=\\\"')\\r\\n\\t\\t\\t\\t\\tattrName = source.slice(start,p)\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tstart = p+1;\\r\\n\\t\\t\\t\\tp = source.indexOf(c,start)\\r\\n\\t\\t\\t\\tif(p>0){\\r\\n\\t\\t\\t\\t\\tvalue = source.slice(start,p).replace(/&#?\\\\w+;/g,entityReplacer);\\r\\n\\t\\t\\t\\t\\tel.add(attrName,value,start-1);\\r\\n\\t\\t\\t\\t\\ts = S_ATTR_END;\\r\\n\\t\\t\\t\\t}else{\\r\\n\\t\\t\\t\\t\\t//fatalError: no end quot match\\r\\n\\t\\t\\t\\t\\tthrow new Error('attribute value no end \\\\''+c+'\\\\' match');\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}else if(s == S_ATTR_NOQUOT_VALUE){\\r\\n\\t\\t\\t\\tvalue = source.slice(start,p).replace(/&#?\\\\w+;/g,entityReplacer);\\r\\n\\t\\t\\t\\t//console.log(attrName,value,start,p)\\r\\n\\t\\t\\t\\tel.add(attrName,value,start);\\r\\n\\t\\t\\t\\t//console.dir(el)\\r\\n\\t\\t\\t\\terrorHandler.warning('attribute \\\"'+attrName+'\\\" missed start quot('+c+')!!');\\r\\n\\t\\t\\t\\tstart = p+1;\\r\\n\\t\\t\\t\\ts = S_ATTR_END\\r\\n\\t\\t\\t}else{\\r\\n\\t\\t\\t\\t//fatalError: no equal before\\r\\n\\t\\t\\t\\tthrow new Error('attribute value must after \\\"=\\\"');\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tbreak;\\r\\n\\t\\tcase '/':\\r\\n\\t\\t\\tswitch(s){\\r\\n\\t\\t\\tcase S_TAG:\\r\\n\\t\\t\\t\\tel.setTagName(source.slice(start,p));\\r\\n\\t\\t\\tcase S_ATTR_END:\\r\\n\\t\\t\\tcase S_TAG_SPACE:\\r\\n\\t\\t\\tcase S_TAG_CLOSE:\\r\\n\\t\\t\\t\\ts =S_TAG_CLOSE;\\r\\n\\t\\t\\t\\tel.closed = true;\\r\\n\\t\\t\\tcase S_ATTR_NOQUOT_VALUE:\\r\\n\\t\\t\\tcase S_ATTR:\\r\\n\\t\\t\\tcase S_ATTR_SPACE:\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t//case S_EQ:\\r\\n\\t\\t\\tdefault:\\r\\n\\t\\t\\t\\tthrow new Error(\\\"attribute invalid close char('/')\\\")\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tbreak;\\r\\n\\t\\tcase ''://end document\\r\\n\\t\\t\\t//throw new Error('unexpected end of input')\\r\\n\\t\\t\\terrorHandler.error('unexpected end of input');\\r\\n\\t\\t\\tif(s == S_TAG){\\r\\n\\t\\t\\t\\tel.setTagName(source.slice(start,p));\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\treturn p;\\r\\n\\t\\tcase '>':\\r\\n\\t\\t\\tswitch(s){\\r\\n\\t\\t\\tcase S_TAG:\\r\\n\\t\\t\\t\\tel.setTagName(source.slice(start,p));\\r\\n\\t\\t\\tcase S_ATTR_END:\\r\\n\\t\\t\\tcase S_TAG_SPACE:\\r\\n\\t\\t\\tcase S_TAG_CLOSE:\\r\\n\\t\\t\\t\\tbreak;//normal\\r\\n\\t\\t\\tcase S_ATTR_NOQUOT_VALUE://Compatible state\\r\\n\\t\\t\\tcase S_ATTR:\\r\\n\\t\\t\\t\\tvalue = source.slice(start,p);\\r\\n\\t\\t\\t\\tif(value.slice(-1) === '/'){\\r\\n\\t\\t\\t\\t\\tel.closed = true;\\r\\n\\t\\t\\t\\t\\tvalue = value.slice(0,-1)\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\tcase S_ATTR_SPACE:\\r\\n\\t\\t\\t\\tif(s === S_ATTR_SPACE){\\r\\n\\t\\t\\t\\t\\tvalue = attrName;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tif(s == S_ATTR_NOQUOT_VALUE){\\r\\n\\t\\t\\t\\t\\terrorHandler.warning('attribute \\\"'+value+'\\\" missed quot(\\\")!!');\\r\\n\\t\\t\\t\\t\\tel.add(attrName,value.replace(/&#?\\\\w+;/g,entityReplacer),start)\\r\\n\\t\\t\\t\\t}else{\\r\\n\\t\\t\\t\\t\\tif(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){\\r\\n\\t\\t\\t\\t\\t\\terrorHandler.warning('attribute \\\"'+value+'\\\" missed value!! \\\"'+value+'\\\" instead!!')\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\tel.add(value,value,start)\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase S_EQ:\\r\\n\\t\\t\\t\\tthrow new Error('attribute value missed!!');\\r\\n\\t\\t\\t}\\r\\n//\\t\\t\\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\\r\\n\\t\\t\\treturn p;\\r\\n\\t\\t/*xml space '\\\\x20' | #x9 | #xD | #xA; */\\r\\n\\t\\tcase '\\\\u0080':\\r\\n\\t\\t\\tc = ' ';\\r\\n\\t\\tdefault:\\r\\n\\t\\t\\tif(c<= ' '){//space\\r\\n\\t\\t\\t\\tswitch(s){\\r\\n\\t\\t\\t\\tcase S_TAG:\\r\\n\\t\\t\\t\\t\\tel.setTagName(source.slice(start,p));//tagName\\r\\n\\t\\t\\t\\t\\ts = S_TAG_SPACE;\\r\\n\\t\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t\\tcase S_ATTR:\\r\\n\\t\\t\\t\\t\\tattrName = source.slice(start,p)\\r\\n\\t\\t\\t\\t\\ts = S_ATTR_SPACE;\\r\\n\\t\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t\\tcase S_ATTR_NOQUOT_VALUE:\\r\\n\\t\\t\\t\\t\\tvar value = source.slice(start,p).replace(/&#?\\\\w+;/g,entityReplacer);\\r\\n\\t\\t\\t\\t\\terrorHandler.warning('attribute \\\"'+value+'\\\" missed quot(\\\")!!');\\r\\n\\t\\t\\t\\t\\tel.add(attrName,value,start)\\r\\n\\t\\t\\t\\tcase S_ATTR_END:\\r\\n\\t\\t\\t\\t\\ts = S_TAG_SPACE;\\r\\n\\t\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t\\t//case S_TAG_SPACE:\\r\\n\\t\\t\\t\\t//case S_EQ:\\r\\n\\t\\t\\t\\t//case S_ATTR_SPACE:\\r\\n\\t\\t\\t\\t//\\tvoid();break;\\r\\n\\t\\t\\t\\t//case S_TAG_CLOSE:\\r\\n\\t\\t\\t\\t\\t//ignore warning\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}else{//not space\\r\\n//S_TAG,\\tS_ATTR,\\tS_EQ,\\tS_ATTR_NOQUOT_VALUE\\r\\n//S_ATTR_SPACE,\\tS_ATTR_END,\\tS_TAG_SPACE, S_TAG_CLOSE\\r\\n\\t\\t\\t\\tswitch(s){\\r\\n\\t\\t\\t\\t//case S_TAG:void();break;\\r\\n\\t\\t\\t\\t//case S_ATTR:void();break;\\r\\n\\t\\t\\t\\t//case S_ATTR_NOQUOT_VALUE:void();break;\\r\\n\\t\\t\\t\\tcase S_ATTR_SPACE:\\r\\n\\t\\t\\t\\t\\tvar tagName = el.tagName;\\r\\n\\t\\t\\t\\t\\tif(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){\\r\\n\\t\\t\\t\\t\\t\\terrorHandler.warning('attribute \\\"'+attrName+'\\\" missed value!! \\\"'+attrName+'\\\" instead2!!')\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\tel.add(attrName,attrName,start);\\r\\n\\t\\t\\t\\t\\tstart = p;\\r\\n\\t\\t\\t\\t\\ts = S_ATTR;\\r\\n\\t\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t\\tcase S_ATTR_END:\\r\\n\\t\\t\\t\\t\\terrorHandler.warning('attribute space is required\\\"'+attrName+'\\\"!!')\\r\\n\\t\\t\\t\\tcase S_TAG_SPACE:\\r\\n\\t\\t\\t\\t\\ts = S_ATTR;\\r\\n\\t\\t\\t\\t\\tstart = p;\\r\\n\\t\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t\\tcase S_EQ:\\r\\n\\t\\t\\t\\t\\ts = S_ATTR_NOQUOT_VALUE;\\r\\n\\t\\t\\t\\t\\tstart = p;\\r\\n\\t\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\t\\tcase S_TAG_CLOSE:\\r\\n\\t\\t\\t\\t\\tthrow new Error(\\\"elements closed character '/' and '>' must be connected to\\\");\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}//end outer switch\\r\\n\\t\\t//console.log('p++',p)\\r\\n\\t\\tp++;\\r\\n\\t}\\r\\n}\\r\\n/**\\r\\n * @return true if has new namespace define\\r\\n */\\r\\nfunction appendElement(el,domBuilder,currentNSMap){\\r\\n\\tvar tagName = el.tagName;\\r\\n\\tvar localNSMap = null;\\r\\n\\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\\r\\n\\tvar i = el.length;\\r\\n\\twhile(i--){\\r\\n\\t\\tvar a = el[i];\\r\\n\\t\\tvar qName = a.qName;\\r\\n\\t\\tvar value = a.value;\\r\\n\\t\\tvar nsp = qName.indexOf(':');\\r\\n\\t\\tif(nsp>0){\\r\\n\\t\\t\\tvar prefix = a.prefix = qName.slice(0,nsp);\\r\\n\\t\\t\\tvar localName = qName.slice(nsp+1);\\r\\n\\t\\t\\tvar nsPrefix = prefix === 'xmlns' && localName\\r\\n\\t\\t}else{\\r\\n\\t\\t\\tlocalName = qName;\\r\\n\\t\\t\\tprefix = null\\r\\n\\t\\t\\tnsPrefix = qName === 'xmlns' && ''\\r\\n\\t\\t}\\r\\n\\t\\t//can not set prefix,because prefix !== ''\\r\\n\\t\\ta.localName = localName ;\\r\\n\\t\\t//prefix == null for no ns prefix attribute \\r\\n\\t\\tif(nsPrefix !== false){//hack!!\\r\\n\\t\\t\\tif(localNSMap == null){\\r\\n\\t\\t\\t\\tlocalNSMap = {}\\r\\n\\t\\t\\t\\t//console.log(currentNSMap,0)\\r\\n\\t\\t\\t\\t_copy(currentNSMap,currentNSMap={})\\r\\n\\t\\t\\t\\t//console.log(currentNSMap,1)\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\\r\\n\\t\\t\\ta.uri = 'http://www.w3.org/2000/xmlns/'\\r\\n\\t\\t\\tdomBuilder.startPrefixMapping(nsPrefix, value) \\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tvar i = el.length;\\r\\n\\twhile(i--){\\r\\n\\t\\ta = el[i];\\r\\n\\t\\tvar prefix = a.prefix;\\r\\n\\t\\tif(prefix){//no prefix attribute has no namespace\\r\\n\\t\\t\\tif(prefix === 'xml'){\\r\\n\\t\\t\\t\\ta.uri = 'http://www.w3.org/XML/1998/namespace';\\r\\n\\t\\t\\t}if(prefix !== 'xmlns'){\\r\\n\\t\\t\\t\\ta.uri = currentNSMap[prefix || '']\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tvar nsp = tagName.indexOf(':');\\r\\n\\tif(nsp>0){\\r\\n\\t\\tprefix = el.prefix = tagName.slice(0,nsp);\\r\\n\\t\\tlocalName = el.localName = tagName.slice(nsp+1);\\r\\n\\t}else{\\r\\n\\t\\tprefix = null;//important!!\\r\\n\\t\\tlocalName = el.localName = tagName;\\r\\n\\t}\\r\\n\\t//no prefix element has default namespace\\r\\n\\tvar ns = el.uri = currentNSMap[prefix || ''];\\r\\n\\tdomBuilder.startElement(ns,localName,tagName,el);\\r\\n\\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\\r\\n\\t//localNSMap = null\\r\\n\\tif(el.closed){\\r\\n\\t\\tdomBuilder.endElement(ns,localName,tagName);\\r\\n\\t\\tif(localNSMap){\\r\\n\\t\\t\\tfor(prefix in localNSMap){\\r\\n\\t\\t\\t\\tdomBuilder.endPrefixMapping(prefix) \\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t}else{\\r\\n\\t\\tel.currentNSMap = currentNSMap;\\r\\n\\t\\tel.localNSMap = localNSMap;\\r\\n\\t\\t//parseStack.push(el);\\r\\n\\t\\treturn true;\\r\\n\\t}\\r\\n}\\r\\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\\r\\n\\tif(/^(?:script|textarea)$/i.test(tagName)){\\r\\n\\t\\tvar elEndStart = source.indexOf('</'+tagName+'>',elStartEnd);\\r\\n\\t\\tvar text = source.substring(elStartEnd+1,elEndStart);\\r\\n\\t\\tif(/[&<]/.test(text)){\\r\\n\\t\\t\\tif(/^script$/i.test(tagName)){\\r\\n\\t\\t\\t\\t//if(!/\\\\]\\\\]>/.test(text)){\\r\\n\\t\\t\\t\\t\\t//lexHandler.startCDATA();\\r\\n\\t\\t\\t\\t\\tdomBuilder.characters(text,0,text.length);\\r\\n\\t\\t\\t\\t\\t//lexHandler.endCDATA();\\r\\n\\t\\t\\t\\t\\treturn elEndStart;\\r\\n\\t\\t\\t\\t//}\\r\\n\\t\\t\\t}//}else{//text area\\r\\n\\t\\t\\t\\ttext = text.replace(/&#?\\\\w+;/g,entityReplacer);\\r\\n\\t\\t\\t\\tdomBuilder.characters(text,0,text.length);\\r\\n\\t\\t\\t\\treturn elEndStart;\\r\\n\\t\\t\\t//}\\r\\n\\t\\t\\t\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn elStartEnd+1;\\r\\n}\\r\\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\\r\\n\\t//if(tagName in closeMap){\\r\\n\\tvar pos = closeMap[tagName];\\r\\n\\tif(pos == null){\\r\\n\\t\\t//console.log(tagName)\\r\\n\\t\\tpos = source.lastIndexOf('</'+tagName+'>')\\r\\n\\t\\tif(pos<elStartEnd){//忘记闭合\\r\\n\\t\\t\\tpos = source.lastIndexOf('</'+tagName)\\r\\n\\t\\t}\\r\\n\\t\\tcloseMap[tagName] =pos\\r\\n\\t}\\r\\n\\treturn pos<elStartEnd;\\r\\n\\t//} \\r\\n}\\r\\nfunction _copy(source,target){\\r\\n\\tfor(var n in source){target[n] = source[n]}\\r\\n}\\r\\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\\r\\n\\tvar next= source.charAt(start+2)\\r\\n\\tswitch(next){\\r\\n\\tcase '-':\\r\\n\\t\\tif(source.charAt(start + 3) === '-'){\\r\\n\\t\\t\\tvar end = source.indexOf('-->',start+4);\\r\\n\\t\\t\\t//append comment source.substring(4,end)//<!--\\r\\n\\t\\t\\tif(end>start){\\r\\n\\t\\t\\t\\tdomBuilder.comment(source,start+4,end-start-4);\\r\\n\\t\\t\\t\\treturn end+3;\\r\\n\\t\\t\\t}else{\\r\\n\\t\\t\\t\\terrorHandler.error(\\\"Unclosed comment\\\");\\r\\n\\t\\t\\t\\treturn -1;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}else{\\r\\n\\t\\t\\t//error\\r\\n\\t\\t\\treturn -1;\\r\\n\\t\\t}\\r\\n\\tdefault:\\r\\n\\t\\tif(source.substr(start+3,6) == 'CDATA['){\\r\\n\\t\\t\\tvar end = source.indexOf(']]>',start+9);\\r\\n\\t\\t\\tdomBuilder.startCDATA();\\r\\n\\t\\t\\tdomBuilder.characters(source,start+9,end-start-9);\\r\\n\\t\\t\\tdomBuilder.endCDATA() \\r\\n\\t\\t\\treturn end+3;\\r\\n\\t\\t}\\r\\n\\t\\t//<!DOCTYPE\\r\\n\\t\\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) \\r\\n\\t\\tvar matchs = split(source,start);\\r\\n\\t\\tvar len = matchs.length;\\r\\n\\t\\tif(len>1 && /!doctype/i.test(matchs[0][0])){\\r\\n\\t\\t\\tvar name = matchs[1][0];\\r\\n\\t\\t\\tvar pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]\\r\\n\\t\\t\\tvar sysid = len>4 && matchs[4][0];\\r\\n\\t\\t\\tvar lastMatch = matchs[len-1]\\r\\n\\t\\t\\tdomBuilder.startDTD(name,pubid && pubid.replace(/^(['\\\"])(.*?)\\\\1$/,'$2'),\\r\\n\\t\\t\\t\\t\\tsysid && sysid.replace(/^(['\\\"])(.*?)\\\\1$/,'$2'));\\r\\n\\t\\t\\tdomBuilder.endDTD();\\r\\n\\t\\t\\t\\r\\n\\t\\t\\treturn lastMatch.index+lastMatch[0].length\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn -1;\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\nfunction parseInstruction(source,start,domBuilder){\\r\\n\\tvar end = source.indexOf('?>',start);\\r\\n\\tif(end){\\r\\n\\t\\tvar match = source.substring(start,end).match(/^<\\\\?(\\\\S*)\\\\s*([\\\\s\\\\S]*?)\\\\s*$/);\\r\\n\\t\\tif(match){\\r\\n\\t\\t\\tvar len = match[0].length;\\r\\n\\t\\t\\tdomBuilder.processingInstruction(match[1], match[2]) ;\\r\\n\\t\\t\\treturn end+2;\\r\\n\\t\\t}else{//error\\r\\n\\t\\t\\treturn -1;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn -1;\\r\\n}\\r\\n\\r\\n/**\\r\\n * @param source\\r\\n */\\r\\nfunction ElementAttributes(source){\\r\\n\\t\\r\\n}\\r\\nElementAttributes.prototype = {\\r\\n\\tsetTagName:function(tagName){\\r\\n\\t\\tif(!tagNamePattern.test(tagName)){\\r\\n\\t\\t\\tthrow new Error('invalid tagName:'+tagName)\\r\\n\\t\\t}\\r\\n\\t\\tthis.tagName = tagName\\r\\n\\t},\\r\\n\\tadd:function(qName,value,offset){\\r\\n\\t\\tif(!tagNamePattern.test(qName)){\\r\\n\\t\\t\\tthrow new Error('invalid attribute:'+qName)\\r\\n\\t\\t}\\r\\n\\t\\tthis[this.length++] = {qName:qName,value:value,offset:offset}\\r\\n\\t},\\r\\n\\tlength:0,\\r\\n\\tgetLocalName:function(i){return this[i].localName},\\r\\n\\tgetLocator:function(i){return this[i].locator},\\r\\n\\tgetQName:function(i){return this[i].qName},\\r\\n\\tgetURI:function(i){return this[i].uri},\\r\\n\\tgetValue:function(i){return this[i].value}\\r\\n//\\t,getIndex:function(uri, localName)){\\r\\n//\\t\\tif(localName){\\r\\n//\\t\\t\\t\\r\\n//\\t\\t}else{\\r\\n//\\t\\t\\tvar qName = uri\\r\\n//\\t\\t}\\r\\n//\\t},\\r\\n//\\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\\r\\n//\\tgetType:function(uri,localName){}\\r\\n//\\tgetType:function(i){},\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nfunction _set_proto_(thiz,parent){\\r\\n\\tthiz.__proto__ = parent;\\r\\n\\treturn thiz;\\r\\n}\\r\\nif(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){\\r\\n\\t_set_proto_ = function(thiz,parent){\\r\\n\\t\\tfunction p(){};\\r\\n\\t\\tp.prototype = parent;\\r\\n\\t\\tp = new p();\\r\\n\\t\\tfor(parent in thiz){\\r\\n\\t\\t\\tp[parent] = thiz[parent];\\r\\n\\t\\t}\\r\\n\\t\\treturn p;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction split(source,start){\\r\\n\\tvar match;\\r\\n\\tvar buf = [];\\r\\n\\tvar reg = /'[^']+'|\\\"[^\\\"]+\\\"|[^\\\\s<>\\\\/=]+=?|(\\\\/?\\\\s*>|<)/g;\\r\\n\\treg.lastIndex = start;\\r\\n\\treg.exec(source);//skip <\\r\\n\\twhile(match = reg.exec(source)){\\r\\n\\t\\tbuf.push(match);\\r\\n\\t\\tif(match[1])return buf;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nexports.XMLReader = XMLReader;\\r\\n\\r\\n\",\n \"type\": \"application/javascript\",\n \"title\": \"$:/plugins/tiddlywiki/xmldom/sax\",\n \"module-type\": \"library\"\n },\n \"$:/plugins/tiddlywiki/xmldom/license\": {\n \"text\": \"You can choose any one of those:\\n\\nThe MIT License (MIT):\\n\\nlink:http://opensource.org/licenses/MIT\\n\\nLGPL:\\nhttp://www.gnu.org/licenses/lgpl.html\\n\",\n \"type\": \"text/plain\",\n \"title\": \"$:/plugins/tiddlywiki/xmldom/license\"\n },\n \"$:/plugins/tiddlywiki/xmldom/readme\": {\n \"title\": \"$:/plugins/tiddlywiki/xmldom/readme\",\n \"text\": \"This plugin packages [[xmldom|https://github.com/jindw/xmldom]] for use by other plugins. It does not provide any end-user visible features.\\n\"\n }\n }\n}"},"$:/themes/can/clutterstack_2020":{"title":"$:/themes/can/clutterstack_2020","name":"Clutterstack 2020","author":"Chris Nicoll","core-version":">=5.0.0","version":"0.0.1","plugin-type":"theme","description":"Tweaks for clutterstack wiki","dependents":"$:/themes/tiddlywiki/vanilla","plugin-priority":"1","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/can/clutterstack_2020/colours\": {\n \"title\": \"$:/themes/can/clutterstack_2020/colours\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"<!-- html {\\nbackground-attachment: fixed;\\nbackground-image: linear-gradient(18deg, #f2fbff 20%, #f8fff7 45%, #f2fbff 70%);\\n} -->\\n\\nhtml button {\\n border-width: 1px;\\n border-style: solid;\\n border-radius: 5px;\\n}\\n\\nspan.tc-topbar {\\n}\\n\\n.tc-topbar-left {\\nbackground: <<colour page-background>>;\\n -webkit-box-shadow: 0 1px 8px 0px rgba(0, 40, 150, 0.4); \\n -moz-box-shadow: 0 1px 8px 0px rgba(0, 40, 150, 0.4);\\n box-shadow: 0 1px 8px 0px rgba(20, 40, 120, 0.4);\\n}\\n\\n.tc-tiddler-frame {\\n background-color: <<colour tiddler-background>>;\\n}\\n\\n.tc-sidebar-tab-open {\\n /*background-color: <<colour background>>;*/\\n}\\n\\ndiv.tc-sidebar-tabs-main.tc-tab-content { \\n /*background-color: <<colour background>>;*/\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button {\\n border: none;\\n border-radius: 4px;\\n /*background-color: <<colour background>>;*/\\n}\\n\\ndiv.tc-tab-divider.tc-sidebar-tabs-main {\\n border: none;\\n}\\n\\ninput.tc-popup-handle {\\n border-width: 1px;\\n border-style: solid; \\n border-color: <<button-border>>;\\n border-radius: 5px;\\n}\\n\\nsection.story-backdrop div.tc-site-subtitle {\\n color: <<colour tiddler-subtitle-foreground>>;\\n}\\n\\n.tc-editor-toolbar button {\\n\\tbackground-color: <<colour button-background>>;\\n\\tcolor: <<colour button-foreground>>;\\n\\tfill: <<colour button-foreground>>;\\n border-style: solid;\\n border-width: 1px;\\n border-color: <<colour button-border>>;\\n}\\n\\n.tc-editor-toolbar button.tc-selected {\\n\\tbackground-color: <<colour primary>>;\\n fill: <<colour button-background>>;\\n\\tcolor: <<colour button-background>>;\\n}\\n\\n.tc-editor-toolbar button:hover {\\n\\tbackground-color: <<colour button-foreground>>;\\n\\tfill: <<colour button-background>>;\\n\\tcolor: <<colour button-background>>;\\n}\\n\"\n },\n \"$:/themes/can/clutterstack_2020/base\": {\n \"title\": \"$:/themes/can/clutterstack_2020/base\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\\\define sidebarbreakpoint()\\n<$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n.tc-tiddler-body {\\n margin-top: 0.2em;\\n}\\n\\np {margin-top: 0; }\\n.tc-tiddler-body p {max-width: 40em;}\\n\\nh1, h2, h3, h4, h5, h6 {margin-top: 0.2em; margin-bottom: 0.25em;font-weight: 400;}\\n\\nh1 {font-size: 2.0rem;}\\n.tc-titlebar h2 {font-size: 1.8rem;} \\nh2 {font-size: 1.6rem;}\\nh3 {font-size: 1.4rem;}\\nh4 {font-size: 1.2rem;}\\nh5 {font-size: 1.1rem;}\\nh6 {font-size: 1rem;}\\n\\nh1.tc-site-title {\\n font-family: monospace;\\n font-weight: 500;\\n font-size: 2.0rem;\\n}\\n\\n\\n.tc-titlebar {\\n font-size: 1.8rem;\\n}\\n.tc-topbar {\\ndisplay: flex;\\nflex-direction: row;\\n}\\n\\n.tc-topbar-left, .tc-topbar-right {\\ntop: 0px;\\n}\\n\\n.tc-topbar-left {\\nleft: 0;\\nwidth: 100%;\\nmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n}\\n\\n.tc-topbar .tc-page-controls {\\npadding: 0 0 5px 5px;\\n}\\n\\n.tc-topbar .tc-page-controls button {\\npadding-top: 0;\\n}\\n\\n.tc-topbar-right {\\npadding-top: 5px;\\n}\\n\\nsection.story-backdrop {\\n display: flex;\\n flex-direction: row;\\n}\\n\\nh1.tc-site-title {\\n margin: 0 1rem 0 0;\\n}\\n\\nsection.story-backdrop .tc-site-title {\\n padding-bottom: 10px;\\n\\n}\\n\\ndiv.tc-site-subtitle {\\n align-self: flex-end;\\n padding-bottom: 0.3em;\\n}\\n\\ndiv.tc-page-controls {\\n margin-top: 0;\\n}\\n\\n.tc-topbar button {\\n padding: 0;\\n}\\n\\nspan.tc-topbar.tc-topbar-right svg.tc-image-chevron-right.tc-image-button, span.tc-topbar.tc-topbar-right button.tc-btn-invisible svg.tc-image-chevron-left.tc-image-button\\n {\\n height:1.6em;\\n width: 1.6em;\\n}\\n\\n\\n.tc-tiddler-frame {\\n border-radius: 10px;\\n\\tborder: none;\\n margin: 0 0 16px 0;\\n}\\n\\n\\n.tc-subtitle {\\n margin-bottom: 0.3em;\\n}\\n.tc-tab-set.tc-sidebar-tabs-main {\\nmargin-right: 1em;\\npadding: 0.4em;\\nborder-radius: 5px;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button {\\n margin-top: 0.3em;\\n border: none;\\n border-radius: 4px;\\n}\\n\\n.tc-tab-buttons {\\n padding-top: 0; \\n border: none;\\n}\\n\\n\\ndiv.tc-tab-buttons.tc-sidebar-tabs-main {\\n padding: 0;\\n }\\n\\ndiv.tc-tab-content.tc-vertical.tc-sidebar-tabs-more {\\n border: none;\\n}\\n\\n\\ndiv.tc-tab-set.tc-sidebar-tabs-main div.tc-tab-buttons.tc-sidebar-tabs-main button.tc-tab-selected, div.tc-more-sidebar div.tc-tab-set.tc-vertical.tc-sidebar-tabs-more div.tc-tab-buttons.tc-vertical.tc-sidebar-tabs-more button {\\n border: none;\\n}\\n\\ndiv.tc-tab-buttons.tc-vertical.tc-sidebar-tabs-more button {\\n border-radius: 5px 0 0 5px;\\n}\\n\\ndiv.tc-search {\\n padding-bottom: 5px;\\n}\\n\\ndiv.tc-timeline div.tc-menu-list-item div.tc-menu-list-subitem a.tc-tiddlylink {\\n white-space: normal;\\n }\\n\\nblockquote > div {\\n margin-top: .4em;\\n margin-bottom: .4em;\\n}\\n\\ncode {\\n font-size: 0.9em;\\n font-weight: 400;\\n background-color: transparent;\\n border: none;\\n padding: 0;\\n}\\n\\np .tc-tag-list-item {\\n margin-right: 0;\\n}\\n\\np > span > span.tc-tag-label {\\n padding: 0 0.6em 0.05em 0.6em;\\n}\\n\\n@media (min-width: <<sidebarbreakpoint>>) \\n{\\n\\nsection.story-backdrop {\\n \\n}\\n\\nsection.story-backdrop .tc-site-title {\\n padding: 0 10px 10px 10px;\\n}\\n.tc-tiddler-frame {\\n padding: 16px 36px 16px 36px;\\n\\t}\\n\\n.tc-story-river {\\n\\t\\tpadding: 42px 24px 16px 32px;\\n\\t}\\n\\n.tc-sidebar-tab-open {\\n padding-left: 0.4em;\\n }\\n\\n/*.tc-sidebar-scrollable {\\n\\t\\tmargin: 0 0 0 -24px;\\n\\t\\tpadding: 42px 0 16px 0;\\n\\t}*/\\n\\n} \"\n },\n \"$:/palettes/ClutterstackLight\": {\n \"title\": \"$:/palettes/ClutterstackLight\",\n \"text\": \"bg-pale: #f8f8f8\\nbg-light: #d8d8d8\\nbg-mid: #a8a8a8\\nbg-dark: #227eb3\\nborder-mid: #cccccc\\nborder-light: #dedede\\nfg-dark: #444444\\nfg-mid: #999999\\nfg-darkest: #000000\\nalert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: <<colour muted-foreground>>\\nbutton-background: <<colour background>>\\nbutton-foreground: <<colour foreground>>\\nbutton-border: <<colour border-light>>\\ncode-background: transparent\\ncode-border: <<colour border-light>>\\ncode-foreground: #dd1144\\ndiff-delete-background: #ffc9c9\\ndiff-delete-foreground: <<colour foreground>>\\ndiff-equal-background: \\ndiff-equal-foreground: <<colour foreground>>\\ndiff-insert-background: #aaefad\\ndiff-insert-foreground: <<colour foreground>>\\ndiff-invisible-background: \\ndiff-invisible-foreground: <<colour muted-foreground>>\\ndirty-indicator: #ff0000\\ndownload-background: #34c734\\ndownload-foreground: <<colour background>>\\ndragger-background: <<colour foreground>>\\ndragger-foreground: <<colour background>>\\ndropdown-background: <<colour background>>\\ndropdown-border: <<colour muted-foreground>>\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: rgba(0,200,0,0.7)\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #2b679f\\nexternal-link-foreground: <<colour primary>>\\nforeground: <<colour fg-dark>>\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: <<colour foreground>>\\nmodal-background: <<colour background>>\\nmodal-border: <<colour border-mid>>\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #bbb\\nnotification-background: #ffffdd\\nnotification-border: <<colour border-mid>>\\npage-background: #e7f1fb\\npre-background: #f5f5f5\\npre-border: <<colour border-mid>>\\nprimary: #0f61c9\\nselect-tag-background: \\nselect-tag-foreground: \\nsidebar-button-foreground: <<colour foreground>>\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: #aaaaaa\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: <<colour fg-mid>>\\nsidebar-muted-foreground-hover: <<colour fg-dark>>\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: <<colour tab-background-selected>>\\nsidebar-tab-background: #e0e0e0\\nsidebar-tab-border-selected: <<colour tab-border-selected>>\\nsidebar-tab-border: <<colour tab-border>>\\nsidebar-tab-divider: <<colour tab-border>>\\nsidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\\nsidebar-tab-foreground: <<colour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: <<colour fg-dark>>\\nsidebar-tiddler-link-foreground: <<colour fg-mid>>\\nsite-title-foreground: #182955\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: <<colour primary>>\\ntab-background: <<colour bg-light>>\\ntab-border-selected: <<colour primary>>\\ntab-border: #cccccc\\ntab-divider: <<colour bg-light>>\\ntab-foreground-selected: #ffffff\\ntab-foreground: <<colour fg-dark>>\\ntable-border: <<colour border-mid>>\\ntable-footer-background: <<colour bg-light>>\\ntable-header-background: <<colour bg-pale>>\\ntag-background: #466586\\ntag-foreground: #ffffff\\ntiddler-background: <<colour background>>\\ntiddler-border: <<colour background>>\\ntiddler-controls-foreground-hover: <<colour fg-dark>>\\ntiddler-controls-foreground-selected: <<colour fg-dark>>\\ntiddler-controls-foreground: <<colour fg-mid>>\\ntiddler-editor-background: <<colour background>>\\ntiddler-editor-border-image: \\ntiddler-editor-border: <<colour border-light>>\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: <<colour background>>\\ntiddler-info-background: <<colour bg-pale>>\\ntiddler-info-border: <<colour border-light>>\\ntiddler-info-tab-background: <<colour bg-pale>>\\ntiddler-link-background: \\ntiddler-link-foreground: <<colour primary>>\\ntiddler-subtitle-foreground: #466586\\ntiddler-title-foreground: <<colour foreground>>\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: \\nvery-muted-foreground: \\nwikilist-background: \\nwikilist-item: \\nwikilist-info: \\nwikilist-title:\\nwikilist-title-svg: <<colour wikilist-title>>\\nwikilist-url: \\nwikilist-button-open: \\nwikilist-button-open-hover: \\nwikilist-button-reveal: \\nwikilist-button-reveal-hover: \\nwikilist-button-remove: \\nwikilist-button-remove-hover: \\nwikilist-toolbar-background: \\nwikilist-toolbar-foreground: \\nwikilist-droplink-dragover: \\nwikilist-button-background: \\nwikilist-button-foreground: \",\n \"type\": \"application/x-tiddler-dictionary\",\n \"created\": \"20201021161410560\",\n \"description\": \"Light with greys and blues\",\n \"modified\": \"20201111195208956\",\n \"name\": \"Clutterstack Light\",\n \"tags\": \"$:/tags/Palette\"\n },\n \"$:/themes/can/clutterstack_2020/tweaksy\": {\n \"title\": \"$:/themes/can/clutterstack_2020/tweaksy\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\\n/* Make tiddler titles look normal even though they are links */\\na h2.tc-title { color: <<colour foreground>>; }\\ndiv.tc-titlebar a:hover { text-decoration: none; }\"\n }\n }\n}"},"$:/themes/tiddlywiki/centralised":{"title":"$:/themes/tiddlywiki/centralised","name":"Centralised","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Centralises the story river","dependents":"$:/themes/tiddlywiki/snowwhite","version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/centralised/styles.tid\": {\n \"title\": \"$:/themes/tiddlywiki/centralised/styles.tid\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\thtml .tc-page-container {\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\thtml .tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\twidth: 770px;\\n\\t\\tpadding: 42px;\\n\\t\\tmargin: 0 auto;\\n\\t\\ttext-align: left;\\n\\t}\\n\\n\\thtml .tc-sidebar-scrollable {\\n\\t\\ttext-align: left;\\n\\t\\tleft: 50%;\\n\\t\\tright: 0;\\n\\t\\tmargin-left: 343px;\\n\\t}\\n}\\n\"\n }\n }\n}"},"$:/themes/tiddlywiki/heavier":{"title":"$:/themes/tiddlywiki/heavier","name":"Heavier","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Heavier font theme","dependents":"$:/themes/tiddlywiki/snowwhite","version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/heavier/base\": {\n \"title\": \"$:/themes/tiddlywiki/heavier/base\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\nhtml body strong,\\nhtml body button.tc-tiddlylink,\\nhtml body a.tc-tiddlylink,\\nhtml body a.tc-tiddlylink-shadow,\\nhtml body .tc-menu-list-count {\\n\\tfont-weight: 700;\\n}\\n\\nhtml body h1,\\nhtml body h2,\\nhtml body h3,\\nhtml body h4,\\nhtml body h5,\\nhtml body h6,\\nhtml body a.tc-tiddlylink-shadow.tc-tiddlylink-resolves,\\nhtml body button.tc-tag-label,\\nhtml body span.tc-tag-label,\\nhtml body .tc-sidebar-header .tc-title a.tc-tiddlylink-resolves,\\nhtml body .tc-site-title,\\nhtml body .tc-titlebar,\\nhtml body .tc-subtitle,\\nhtml body .tc-tiddler-missing .tc-title,\\nhtml body .tc-tab-buttons button,\\nhtml body .tc-tiddler-frame .tc-tiddler-body {\\n\\tfont-weight: 500;\\n}\\n\\nhtml body .tc-view-field-name {\\n\\tfont-weight: 400;\\n}\\n\"\n }\n }\n}"},"$:/themes/tiddlywiki/readonly":{"title":"$:/themes/tiddlywiki/readonly","name":"ReadOnly","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Hides the ability to edit tiddlers","dependents":"$:/themes/tiddlywiki/snowwhite","version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/readonly/styles.tid\": {\n \"title\": \"$:/themes/tiddlywiki/readonly/styles.tid\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\define button-selector(title)\\nbutton.$title$, .tc-drop-down button.$title$, div.$title$\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fclone>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fdelete>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fedit>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-here>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-journal-here>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fimport>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fmanager>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-image>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-journal>>,\\n<<button-selector tc-btn-\\\\%24\\\\%3A\\\\%2Fcore\\\\%2Fui\\\\%2FButtons\\\\%2Fnew-tiddler>> {\\n\\tdisplay: none;\\n}\"\n }\n }\n}"},"$:/themes/tiddlywiki/seamless":{"title":"$:/themes/tiddlywiki/seamless","name":"Seamless","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Removes borders from tiddlers","dependents":"$:/themes/tiddlywiki/vanilla","version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/seamless/base\": {\n \"title\": \"$:/themes/tiddlywiki/seamless/base\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"list-after\": \"$:/themes/tiddlywiki/vanilla/base\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n/*\\nRules copied from Snow White\\n*/\\n\\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\\n\\t<<transition \\\"fill 150ms ease-in-out\\\">>\\n}\\n\\n.tc-tiddler-controls button.tc-selected svg {\\n\\t<<filter \\\"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\\\">>\\n}\\n\\n.tc-drop-down {\\n\\tborder-radius: 4px;\\n\\t<<box-shadow \\\"2px 2px 10px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-block-dropdown {\\n\\tborder-radius: 4px;\\n\\t<<box-shadow \\\"2px 2px 10px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-modal-displayed {\\n\\t<<filter \\\"blur(4px)\\\">>\\n}\\n\\n.tc-modal {\\n\\tborder-radius: 6px;\\n\\t<<box-shadow \\\"0 3px 7px rgba(0,0,0,0.3)\\\">>\\n}\\n\\n.tc-modal-footer {\\n\\tborder-radius: 0 0 6px 6px;\\n\\t<<box-shadow \\\"inset 0 1px 0 #fff\\\">>;\\n}\\n\\n.tc-alert {\\n\\tborder-radius: 6px;\\n\\t<<box-shadow \\\"0 3px 7px rgba(0,0,0,0.6)\\\">>\\n}\\n\\n.tc-notification {\\n\\tborder-radius: 6px;\\n\\t<<box-shadow \\\"0 3px 7px rgba(0,0,0,0.3)\\\">>\\n\\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\\n}\\n\\n.tc-message-box img {\\n\\t<<box-shadow \\\"1px 1px 3px rgba(0,0,0,0.5)\\\">>\\n}\\n\\n/*\\nSeamless modifications\\n*/\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t/* Drop the tiddler frame padding */\\n\\tbody.tc-body .tc-tiddler-frame {\\n\\t\\tpadding: 0;\\n\\t}\\n\\n\\t/* Move the sidebar up so that the title lines up */\\n\\tbody.tc-body .tc-sidebar-scrollable {\\n\\t\\tpadding: 43px 0 28px 42px;\\n\\t}\\n\\n\\t/* Stop the tiddler info panel from bleeding into the tiddler frame padding */\\n\\tbody.tc-body .tc-tiddler-info {\\n\\t\\tmargin: 0;\\n\\t}\\n\\n\\t/* Stop message boxes from bleeding into the tiddler frame padding */\\n\\tbody.tc-body .tc-message-box {\\n\\t\\tmargin: 21px 0 21px 0;\\n\\t}\\n\\n}\\n\\n/* Use the tiddler background colour for the page background */\\nhtml body.tc-body {\\n\\tbackground-color: <<colour background>>;\\n}\\n\\nhtml:-webkit-full-screen {\\n\\tbackground-color: <<colour background>>;\\n}\\n\\n/* Adjust the colour of the page controls */\\nbody.tc-body .tc-page-controls svg {\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n/* Adjust the colour of the sidebar selected tabs */\\nbody.tc-body .tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: <<colour background>>;\\n}\\n\"\n }\n }\n}"},"$:/themes/tiddlywiki/snowwhite":{"title":"$:/themes/tiddlywiki/snowwhite","name":"Snow White","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Emphasises individual tiddlers","dependents":"$:/themes/tiddlywiki/vanilla","plugin-priority":"0","version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/snowwhite/base\": {\n \"title\": \"$:/themes/tiddlywiki/snowwhite/base\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-sidebar-header {\\n\\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\\n}\\n\\n.tc-tiddler-info {\\n\\t<<box-shadow \\\"inset 1px 2px 3px rgba(0,0,0,0.1)\\\">>\\n}\\n\\n@media screen {\\n\\t.tc-tiddler-frame {\\n\\t\\t<<box-shadow \\\"1px 1px 5px rgba(0, 0, 0, 0.3)\\\">>\\n\\t}\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\t.tc-tiddler-frame {\\n\\t\\t<<box-shadow none>>\\n\\t}\\n}\\n\\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\\n\\t<<transition \\\"fill 150ms ease-in-out\\\">>\\n}\\n\\n.tc-tiddler-controls button.tc-selected,\\n.tc-page-controls button.tc-selected {\\n\\t<<filter \\\"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\\\">>\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor {\\n\\t<<box-shadow \\\"inset 0 1px 8px rgba(0, 0, 0, 0.15)\\\">>\\n}\\n\\n.tc-edit-tags {\\n\\t<<box-shadow \\\"inset 0 1px 8px rgba(0, 0, 0, 0.15)\\\">>\\n}\\n\\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\\n\\t<<box-shadow \\\"none\\\">>\\n\\tborder: none;\\n\\toutline: none;\\n}\\n\\ntextarea.tc-edit-texteditor {\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n}\\n\\ncanvas.tc-edit-bitmapeditor {\\n\\t<<box-shadow \\\"2px 2px 5px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-drop-down {\\n\\tborder-radius: 4px;\\n\\t<<box-shadow \\\"2px 2px 10px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-block-dropdown {\\n\\tborder-radius: 4px;\\n\\t<<box-shadow \\\"2px 2px 10px rgba(0, 0, 0, 0.5)\\\">>\\n}\\n\\n.tc-modal {\\n\\tborder-radius: 6px;\\n\\t<<box-shadow \\\"0 3px 7px rgba(0,0,0,0.3)\\\">>\\n}\\n\\n.tc-modal-footer {\\n\\tborder-radius: 0 0 6px 6px;\\n\\t<<box-shadow \\\"inset 0 1px 0 #fff\\\">>;\\n}\\n\\n\\n.tc-alert {\\n\\tborder-radius: 6px;\\n\\t<<box-shadow \\\"0 3px 7px rgba(0,0,0,0.6)\\\">>\\n}\\n\\n.tc-notification {\\n\\tborder-radius: 6px;\\n\\t<<box-shadow \\\"0 3px 7px rgba(0,0,0,0.3)\\\">>\\n\\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\\n}\\n\\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\\n\\tborder-top: none;\\n\\theight: 1px;\\n\\t<<background-linear-gradient \\\"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\\\">>\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\t<<background-linear-gradient \\\"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\\\">>\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\\n\\t<<background-linear-gradient \\\"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\\\">>\\n}\\n\\n.tc-message-box img {\\n\\t<<box-shadow \\\"1px 1px 3px rgba(0,0,0,0.5)\\\">>\\n}\\n\\n.tc-plugin-info {\\n\\t<<box-shadow \\\"1px 1px 3px rgba(0,0,0,0.5)\\\">>\\n}\\n\"\n }\n }\n}"},"$:/themes/tiddlywiki/starlight":{"title":"$:/themes/tiddlywiki/starlight","name":"Starlight","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Example alternative theme","dependents":"$:/themes/tiddlywiki/snowwhite","version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/starlight/arvo.woff\": {\n \"title\": \"$:/themes/tiddlywiki/starlight/arvo.woff\",\n \"text\": \"d09GRgABAAAAADn0AAwAAAAAWXgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABHAAAAFMAAABgd9Zm82NtYXAAAAFwAAACwAAABiJywnghZ2FzcAAABDAAAAAYAAAAGABZACxnbHlmAAAESAAALEAAAEMw49DYfmhlYWQAADCIAAAANQAAADb6MXFtaGhlYQAAMMAAAAAgAAAAJBEVCUFobXR4AAAw4AAAAmQAAAOA90pQtmtlcm4AADNEAAAA2wAAAVz1kvXhbG9jYQAANCAAAAHCAAABwoxMexRtYXhwAAA15AAAACAAAAAgAzIHJm5hbWUAADYEAAACTgAABZeRsQXhcG9zdAAAOFQAAAGeAAACLHojM/14nGNgYj7OOIGBlYGBdRarMQMDozyEZr7IkMbEwMAAwhDQwMCwHEg5wvje/kHeDA4MCkqSbCL/NBny2Dcw/lJgYBR0AMqx8LC+AVIKDAwASlsMnQB4nO2SZ3NNURSGn3NdUaMHIeK4eheidyLRu+gkjB69JiRa1CREb9F77z0h0UWNMMwY1/lgwjd+AHO99zDKDOMP2DPvOmevs/c6e6/3AXJhy+nEwDsCNNObkYOPkam5iaVcBzoxivGEEkZHOtOFrnSjCU1pRnea04KWtKI1bWhLO9oTwjSmM5oxjGUcPXCoqpPc+JCHvOQjPwUoiC+FKEwRilKM4pTAj5KUojT+lKEsPelFb9ZSjlgCKa+TVMBFRSpRmSpUpRrVqUFNalGbOtSlHkHUpwHBNKQRjZlAFBOZpDvs5QQnOc1l9nOQDNK5QQo3ucVt7nKHe9znAZk85BFPeMpjstjJDrJ5xnN2qcI8pjCZN/ShL/0Ip79yccxXXMxmxZF2716xip8jgZWK8WxhDckk/cgPYCCD9DzCcQ7YmcEMYSjDGE4ELzV/i5v1JBLJiO97VkuvpWOc4ShnOcV5LnCRc1zhqvKXSOMaqSxiBjOZxWwWsoA5RBPDXJyOQK0JlTteB+rKtTY6QYS+xen2T8jhIx7D1wgyIo05RpzjruO+402uVLOE6W8Gmi6zitnMDDFnmIvMeFcxl5/L3+Oxyagn99vq9JH6x2518inv+WQUVJ0I1Yl13FGdV6pT3CxtBth1mv6hTgHwZEhpnk+KHyS398qeXtJo79uX4/D5mdXRCgMryAq2qlk9rbFWfyvc3dud4Z4lXkO1zNurKLtb06Qr0jvDIZJtGU5F57dmGnn58/gX578z/SufyTYfiSJgnSiZLz4S5HOS9oXLjXniYzkr1O1V4me1fFkmNgaygY1sEh1H5Okx0eDldDFbxekl29cD4nWq+Eq13T3IdZaKvnQRfEP0pojfeLbJv8fqfJZ43Sl6tojZbJvaFywRSfvYziG5c5g9YmPudzJiREm0zdzr/3T8p+PvdHwF87BilAABAAUACAAKAAwABQANAAcAOAAH//8ACnicjXsJQFNX1vC7770E3JBAwipLCEkMEEjySAIEwr4vsm8iAgKCGyIiIqJ1QdwQXGutWsuo49hobadqa61LrXXajjPjON0+u0w/p/XvlGn9nda2Si7/vfclEND/m682eeS8+84999yz3XPOo2iqkaJYF8EQxVBOFOUuFUmN6NPInBgun0/fscoFQ4/EjYIACv1HU5MpSjCMxk6n3ChKzjFShpNI9RyQAnQFUoZ1XbPS+kb7QSjeCD4BSvDxfii2/gL+NmQB5fCExSJIeHTFQp+kj6PZ+tG8w4LvKS9KTukoysiJZHqBzp+WiIVO/oxE7ELLpEAk1ZlpfWQ4LXP4s39ggD5ZNbgydVG9Nj8qIHXli1XWXFAMajWFZllwXFEEfAGUa4rigoPNRREWdvfLdGrH4JzaIxqf1MIqzdyjq9LoQThZk1vHhRUmKOhDUKRIKFZr52aFUxSgMkb+W3BcOBlRRQGFQhbkgijypzmdwegpFLKyoGAFosLNEMzpPDw8OQl7LfnzzcuvbMkp7r2w/PA/i84ozsGfBp+Hwx8sXHgVTDm47f0+bgFbtWx93bFPV+64s7P2uZeLFr3X1f4JmPniIAj8sGvW4oRXMW8RPwQHEW/FlBTvg86fRTxgZYi9IplUxI0uno5suji4cY5ON2fj4MUm6x8HBkDxUPMbW/Pzt77RLBgy1G05cbVpwdsnt80zoLU/Xlz1wserV/3tUCVeG+b5TTSHO9lpmQjttAR9RJyITNPPmm9a74IbMJr2u/n47YEBwRAsAhT0tVghuhQjfFgOxvCIxuEhsmDHQk+y/ox2fxSH9wnrsIVHgHn8o+AO4nEoWrPIhZEFKcYzVaZQODkwXqqXigRSxbLtLxTueWTj68Cfd4fVfpz8+ZY2zPv1l5dfeaiF5fQ6IdDMas9RzLPx96NVhe36V5dtpOuOf7Ky5x875rz5rsWqsq1BeBStwRf9kEpkNupHV6HHMLQ29nUwNDAAxfuHd5PlgKH9zOL9giHL40UWCy21fokWtcdigXrwwShv6DaEdwrmzSheWT/4B0IzA/Pj1OPFhBOAahxxo9ehsRLbWCT0TkInpcFoZvQi2T7w3VqJNMxDn2wxRYgV/u7HyLMepqRUaW7x9MpCWWaKScIu43UTy8/HZF5PRAYmH2Ct1AOH1cnYLlDVYW2iFw/CJutxaAFDB/CqdgjiT52y3rIeREuqpL+xE2hfj0CI8LrZaCRqqLdLDGIHPcU10Mf10uMttrVN9wpwvQzj7XuNnneC6Hkvm45LHQkCSK/RX0ijwd/BV+AeuNHfD8WD1u9PWu8hK2Jh111+dFfgd/nxWkTQ9kd/EJget1pG6RLKkf0Q2/ZPCsa2DhjRUqPB0LoRyhqP8GwfAPvp15xPIvoeXWW/fXwNL+/lxzINAwnvsM4/RPLoTinRah1UnPVwk4hpIau0q59NKpmAQ3D4jwuwJB55EUy9gv6CPx3puLo5q2DnlaaOtzdnFfa+6Y+V/IWjWMm7PoR/P3oUfvVR14W6Y//VufrekbK6Y3dWbr+zs862d+wNovsBvO7TvP2zr0hqM34KpP4NjS91p6asPrUA/psXyGIgip6bqty8VzCkn3+gvmj3kgTr93iBUBYQW2la2s3LRwa8QNaopExojeH0hCUio8sbOV4dZUFO7hPWTF/Yfu9Y5diS55z4Z19i3gpTdIXL/qmJZfWa3N49KarQBsKFXRcWYy4UbLrh5b75Fpi6b4wN++G/b20WicJN0abUqJLoGVH508B8wpWvBwlXtny2u25MprMQX6RUmANfkHvwdOc8pQwiU/Y0FnU0vNSdpsqsN3lzavmU4g00/LQ1YO2Sa3Z+yQi/9vD8im6ZmyWeojJlh8Jzl8DN1e125vnHVpha1xBZyx/5ku0T0lQy+jXGEE9Pm58KCqeVMj1HrBXPM6UynNFHmtFvNAzZM2Z/Qm5VeM6ybEVERtnM92dvq9bmbr28rP14a4p7znBE8fK0lMW5Ki5/btidjI6S8JSNl7sKtrSU+GX/xJ4oj/CWxeaHJRVoZ7gk+WU1bCyrPrIiWV+xLNbSUhUXEBhXZowriVW4mD1S6jaUlu1flqhIrY2xYLqRoRO0En+NvLXIZtH0RKzA9W3w+E1Bxk249CCUWNiDQ2AALh16XG9Bz7WODAknE77b7JJtZTazaFsz+tkKvns+umFbUenA/Oij4Lve2Yc/6lp56/mKbUjTrOa1v2+NDF98tpd+G1mX4qPQUlF+8qfD9CXM05GHiLav0BwuvP6iGELGGy0Z8xMY2gAl8F9wxiYwtBH0gBf7ieZiK/W4hd1J9gTFIpMeEp2xPz+GAv0tc56MnoWz4J9gA+yBt2AawdUCNoBQcBCseJbHqHr0McHaJoh59C7bh/CeRHQNjvkF3ohyo5dRIs+BoaWwEViqofgNeBFeeAWK54EzsKkLDO1CoU/IC5gFN6zHLRZwDcYhwzqbjjp1CtaCF3j7xaF5Qnn63XmUBPOoYeSQ3wF+QHsYmTFYiozYNrhkBcIJvcE9xM5V1n8jnMh92HCxiOXUNPQDEDemB8Qvs9uGW+gb7zw+zWy0FrzDpgumPj4yDMvvslUjFDhF6HD4T0N+j1AsNdKIIjRKgrw6Sw1TBxqRLqaN3GUesDKkiXFImoRCIgGRZha5bE+jzUw4Kc0MFnkJjguxzTQaR63HdVP/7Jy1VZwysWzuPHVG3UwQGFOgiyjNjveIk5fXNmgrB+oNoA3eHpZnJUW5g08MFYnB/sacGmOapmiJOakxmwuYNsm5xFig95km8Z2+zkvlJwqt3FZrfWRZ6xag8vinV3hKmCpOJeFtR/TIfXaLUEx5YJuOohSDgbPb1SCFEkmxDAQJnUQeHnadjQb5SQeLGk92peT0XmjJ7dVc2EfnZ27SBq6uTlhRaeDKlgvF1kEuNmfr1fbuD3bNUgcnCpqgdyxnvS3lNLUDNeWbq7X83laN3GWnsuqnxZDYvBLG0ZhxnITJD1lXkrisRKstbU2s2RFywL+8pSdr0fmerLzN55rqXk5qpn/JTjPU95eXbZ+nn1OZk9CYoSzY9f7Kle/vLExJtZC1Vo18yx5Ha/XCGg94tzG6Q2QikYxBs4vGiKFvgPT98LRuY3Hz2Z7sjI0XlmWvju5rKFoaoVufkrS8TKcpXSkUP9pvKeGiM/tublx5fVuuVAX6Hsu0WjolRKGt3lxes2uezjb/XQaySuS9QtD8Yg9PzFUSMI/RgAyhh4cEYCmRhjNAPG2q/DfzC54rzm78U0vz79dlmrvOdbYfmsdNFjAwOrE2RTWZ9mb9YqvB92GZ0voGtWZtWkra1j9tabm+uzS9fV+eIk8ODslT680xdRkzEc9LKIqpFxIPinR11C/oOT0vk55OePFCCbhw//4gdD740ku0pnx1jr44iRNHB86PKprLTn3WakRK9d6zg5WbKsMmi8STe0Re8+t5eaqCRlbMyikFFe0o/4S7aCIxASiN/gyRJyL8DuxmKrneUjun87pNF759aFjRtji83j+3vDoitzUz+JfwHHOEiOtJszF/tiHWzndZqH7Y7+Gwq8ygfNYnLMAtsGDrgng3P4WENqpnjm0EoBCpAgrxIIhIPGdTRhsrIvHynex8WQYyhDMy80sjijZVc8i67OhsTdgYsw+KD+5AYr5phjZYHF69ux66Ivv1aUdXXLj1CHKLF228QF9ZgmFqEuXHz8TjdLdttN0pVoFChHnPvjaJTOPrEyGTSGQRPr4amYSdOoyw0a/RDlC5RCLXINxxUAUuCu4jW0a8D4mJlQaD/kn0xSA/vGxNgXtFwe4u98BQb6/QQHd09fJGV3bq46MV/Q1R9LZp/e3M87SvVwi+GeLlHSZ1d5eG2fQU2c3biF8+9ljdKLMHzjIwKkJVYDH92kMz2LIBXgfl3Xdg+ZZSmHryjFBsGX4EUez/JtxpAX+Gn9sYRPDSGQjvJEfuVIF8xI19+4hW4ZFkv5wOswGUkcxP9svD83/YtfFbWA+y6KDswgrN0sEwRfHsekPxpmotOmPsWtmavF3XD/12dbYmbjTtwqcOdmqnH6fwKCoPig+f4bixCVriotBf5nDri3hTeLrYB4iuIBI3jJ9VbyPURiLj4jALIkiKCNJimUKEjENrWeUXqfCwTY32uXTkK7aeDeFjbncbRtvOGh1CKaxBpSB366VlbZc35+RsvtzWfmlzzjtcRXtSake5Tle2MjWpvYKjhV3v78zL63+/q/ODXQX5O99fVTHQYDQ0DFRW76rT6ep2Ybk1QRXbg3TYB588EcfH+wT7CuXj/YIJZDn4hVldUYNIWwborIwerbSryuYa2KmlNs/wp92FUh/4CtrhbdIYzvrnIINu3q5R34DtiIo9jmjgbTUnesKSYKZOsNUX9unWF47a6ZXRF5AglZeskOnWJtusBfwQrNYaRw21IvzRexa6LkpBZ6uCtXM3l9lMNb+3TC5LZB6FHNgc8+t2xzuLt0HnyeRekqbGqiefscJ+MACy3dTGZGVkVTijTfDmZhngVLKf/YFGlSdNcBaOfMX0sqFYjkfjYw9PbO9trHWMjhVKpUIx5gBl9AWlOSd4ZrLGNz7rxjMrjA07yjr3q5r+LI/LnanMMAYm5r3b2a6ds6m0ZV9s7U0m0CQXuQVp/SPjfNJC98xPbStQ5yVYQuMUbu7ySKkubUZWaE990tKCcHM2iYG5kXv0DUElWS+OxMXjfZM79hBGMPDvn5gZZmVIgiJUsyAjpSE1iDn223PYI5yMy/Gb7tbt7SfN21BHxzz7SynPx9iR79m97FQ+TnT0uCTCFpNJRDL6byCvDf417Vh13toKzXaQt2R+XG/sNmIAawyx6rm7GsAPFmtXx6owJd2B8YpR3DID4XWxxYXuvElC/8SgsRZQj+JBRgU89To8XchOtVgN9PsWy/AAs9T2rDAUPWuLKd3dOXf74wxDMGRozv5y8F9vxWIc/7B898/T8JsKjGYhkzh8ld5NUJmGr2N0trjShV+jnGMYxxDYc8xUSulzpj+9x8ETxcAEP2kG5crLV3WgvALeAYYceMICUEiJTEwLSLVYHj5E9vI0PGwh+AOQLqgRfnc7vTxOXh6BLABs6fo3XAW2LITcDli9Zgk8XkyIpfdaLI/bEU4/ZgnGk4NkGnEDx79GPhkg4cPgHHoaPPs6/bX1R1B3dfhRGw13AfUKq/AMfI3wC1rACeCLY113T6C8eQcODwDfUus9Pb/H1eA+3UMfJPcRZdW0Ety32PIPNSM/gnrqEabdOMEx1UiCI8Y8W0SwpHOim0N2oBzJzwdC1p5zsGXADDgDxh/IJ+Yc6P7B/9oQlfPMtZMvfrQtKqrns9+092cGz8gfaOvYmqL0zu13W/lX4DN4CqjPPdN4G37029/Af9xe9erco3dWd9w5UV/f97Bj9Z2jc4m+IgI+F3riM5SREwn0cmJ1HuyGN8Hx/L34OFjy21tDj/bisyASd+a2UEgFY96aGTtFTrIxk+2EeC4tpyW+Jk46M602JnJOWij9GsjoPFLeeHxFokiVzEEl3Tvcu5veGJiFHJauPEkhTZhrnvtie2LisoOzgwvmLIiz3jxDzqwjDxicG0SnDEDmEgrHzeVw5ubGjLQMqTH6k5kqTW1ON9XWsJcEuSsOly483ZXsxeVHRxSZg3PWv1xfdXZNrPCK3962yHk54eF582NK05KaM5RsjbIiW6tamlK2fYEZB5eamrKsGW6JlctS6n67KjVx5fqEOQtCshti4xvTlc8qU2YjOiuRbrTb8mKAQ+JmFI2FndIq2vdD6wjY+M5//zeKqXZZt9HFzP7hFY9c4C8WiHQATMZrzUI+UI9w4KjZ0Rc5BJI8C5yUOMMK4qJW5Cy92Judtflye8WB1bN9j7qaixujM7pmR0ZWdaXn96p3M6XWWcwahTJ/89mGxvNbCyJKVqQVcmXxMn1VV1p6ZwUXrfFkvI/zvqh6ZIhdi+b3xP4QTCBBH2kwAvfRswtPCxMBLXHzlFWWnvzSXVcXNb61qyxZB9pcMhoqEQndmSmrq6NiGzYJhqzv+Tindp9qWvvu5vSsnjeXlVuq6UFrurqguzBvdYlaU74qq7C7OITXJeQJ2an8WdjIGXxoI6/Dwsm0E+LnuXbD+k3rDdY/XGHuJg30bTSsgamWAyAOhIHpi9uBYd96+Dk65r/7HNJMhtqG7Ge50JmSIW+UjZCPLynYXK2R90DMhDjDfcJvuqP0ueXJVblccaw0d+OZ+oZXN+ZK40oicyqS2g5+pilqiTcvKdLg42l8S5HGqEiZY+QqU2fOTK3kjHNSFEJn86KdhXXHDf5F85bFzT3enZHRfXxuXNu8In/jsdrCnYvMj8+ZmvOQIDabYpry1Oq8JnqtrixRoUgs02n5K9mn+Yg/m4UCfp+kYPyxCq8OMBP2CZwGc3SFEeVv9ZThfVr05q6iZB3cGMjvT3d8Fb9fdKzYJbX7fDXepYxeskvWCkGZfXfsu4VpuI3s3cdCFbJXnk9aPJGUkd2eGOUDVvXqRMsn+OBxK95zAZWNfFWFzf6FUvFUEdKjCVjlExYl55Ab/A9jsnWz12Rnr6nktJVrcvPWVGhBaXB8hK9vRHywzBzu6xtuZgKvPf7hbfpTfuBsnbZiTR4/UMYPlNkGsv3JnbP1+tmdySkrq/T6qpVD3mpzMBkUHh8cbFZ73/x1CBQlo6OaYfbK5JROfO0c8lHHjQ2KU/vgWtfIA8FuZNM0VCI+pwqUY1kAo0OmEBd8nJAWGjlk8wBwYewLQ3qITkCRDqGVwSBwHgqpa+lOq/1dd4Y8sawqyUcr9zQvHCgs27vI7BUWl5qhALpA5ZSLojQDEA+nBRlneqhnLYyLrMpP9oMbv/EJlpuLwnUFMYEqQ4WpSfiPyNJ4WcqKF+fEtdXnRyR4mTPyFPlbG03mpq3ZsbMzTDqVO7yb2R9T/X7tCEUrXbTxmfKYeRkqn4hEBfLtyTMyZ4bkxcqkMbnqkDlckU8s0ms5KwPOwmjiP2Ui4ye/v8vKaKErkWkV+rMLyRNfd5QxaG8Z7vHvVP8A8b9z+QaPsz6ihbx96INx9EFhNa6TAOQosad0I7kUkoal3SoHGgw41N86q6s4LKy4axaMW/ozcAKSHTuABAh/Xrqk/ouhn7u7f/7X5/UYnx7hS+HxufMuTWlEbhf7XVropLdj2VI50GgwNA5UQkv95//Czw99Ub9k6c/wEfxuxw74Hfz1Zz5OMjFdDIX2F+cyjZ5Onk5KJ6VRbkTRPLj7i/zXQ4v37ln0PITK4R7B9IKO/I8y/vTHtL8Vdhc+JHWMC2w/e4GvF+FKnIRk7vrB0XPgOKw8B6sYT/AbOOc8rATHMU9H7jKhQinmKXI7Mrr7tPXEaaH017cRT3dCoXOd4Dby2c3orkg86h9ZJDgsYhbLh764jEkqAGYGVwCIbWRxnD7hMALQaH04Y49AhHqZRp5VF+MZ07zn3F+Xtd46u7c5JqZ579lbrW0fzaluhY93bB2hvji/Pj19/fkvALV1OwBfnFuX7hOZPW9lWtVqWfzh2c0vP5Oete7lhsxN0fCX6s1BIn1KgTph0aywkNzFzEVrc5zZr2BZZ2Xj5d/1NUTFLNhz9i9LW2+d27MgJi7qUGq2De+WkS/OrU9PXX36rz88k7J1zZKCiPz4yJjMZ07W1b70TPZMeZHVqSzVKosN9UKmNcY0P1fNy9H3sJdeJzzJV7p5Z/092H3nDlwsPPnsr1P38/HHPWabUE1kFvFXNUhfGRSqf71A6gCwF9zln8dRMK6BgdA7YDdcfEfo/uzPn+9HYw7QrvRO1pnEtBNs1QFlSpU+sipFia6RenRlpkZWpeJfej0PxfPDfraFr9ECm2nApJJ/4Nacg63mtPXnW+nS/LNfv0a/JUxs7i9uPNAUOfhrqvDNX1P5dbqOPGAHhGJkVZGMjMVsElK0cyBq1Csq9Y6hFJ2Tl2AK8wpOnG3U5Bv94YY3jE376+ccaU9281eIuaIY6awt5+crlWKFOLG1WKMrXmrOZ95hgjQmf125OVBmLuUeD1iYO2k7lqUntD5XHJ6byIml5bVdKQ3nN2YILwoE2tJlxsS2bC3FUo0j95y8hfvQGSOCmkWVE64hMbWVv4PC2bFkAE0yeEIakDSEfQ0eyBxynlIlrgZJcGVDhIQcF4Ia41oOXrrTseKzy4eWxsUtPXT5sxUddy4dbIk723z+YV/fT280N7/xU1/fw/PNwLWuEdzNXFGoFqtilQHaqapCeoTiXOpnJVfBHhDQn1VeVMbEryBPE6w2TPwMO34+39x8/ucd1UBraW62QCs00YcPh2Q1xGhzTGEiUXrkicOwOAseZmLhcFyKORXHKY7rLvnfrFr+P2SSkRX836+W2aZpjklYigOXpQlRzQGbPDNKazXN5zfn5W0+3xwzvyLT7z+vdTtg+LWWh4eg3UxIWFqsUcvW+euVnhhL0/kts7xV+hl8nNlIWZiTzCXk9ZGVk8sYd44B5Jumr3z22ZWv6b6rd+5c/doCtoAtsAN28NenPAsYzh0dZPnvnG/wU/QO/qJ3fJQ8zFA3EY/1wIXEGKYnoxb5f/h901Ol9w8wqLy8VIYAf73Kkz7yBOQFr5kGBJnpha4B/ujahcF4mD8P9P8Pv0nNBXzNUnQvtjkiW82F7h3kdRndc3a450z9Yr9HU+uY28wJpOfEhwJPRsngj3zD5Utn0EcojrfCPPBv/G3LPaHxG+zj3ZXunvjzpW04czuepnPhVPyNa4DMbfA9GUswgwUb7RhtuVPmNLgv9OPvAyUQf4YOz0I/2+EZ4H2jabJvth237bVldHPHjRm/p3r7JvL9SY0CKdr96eM9JL42gqPnwTE4+zyswkxjusFRWHUOLgG7rHds/OMQbzmef8jmS7kx5tL4vCFoJLU+XHfnEJFS9OGcZOQjc0dRrbvMyLnLgNRdenI4/rIZzEVfXym/KvhBfj/7ag58Mft67v9V/VBoBYvB3AL4InsamOHb+HMD1l6DXaAHf66BF2yFP1y3fJ0pYY9QQnxulAD0/2Qm21pJHx8+S/8KfvsGvA6vvwGOEfpKgZZJYVztvVkSsuZS+nurG/6AS33gyz6M8yjC+QOPEwA9/p/5AaE7bq1ksuk5cPYbwARMb8AKjLNz5EfmrnA60gmkERMlHmuI0cFh2Ot56IiBgi1QODHED50ekmXSl5mDcNtVwaKkGWcE6SuPzqt/foGhaX5EJ+c8Mf5/0LSzs1KnTorPjFQXJ86MmlUeMLV4X2ty0pKdsxotGdKm5+bn8Pu2bySNlQtDcc1dIFKQFKLESNJqjgV2dOgW8S1DTnqZnq/wOJTmnUQ0O69N2vGYRiFgu9KUIT0TXZOqCMlvz7peslrRcMuTnrxk9uJl8qjkgNM4ExBR2pl5ASS5VsZZpoCCkrwMuU4qnhQxXZtRlxgzL0c3BZTAk9PzDBaG8UjMTzeH6AJEk/RiLmV2nHlhccxUeAnT3oPijC0oTohAu0bq5pjNiEZEHKlnSBB1OEWIQThjiNndExIfIpGbcpRbUg0qfIbAZweVIXWLMsckl6Cb9O3w7BodeCe+LkW2prkaFptrMjTT2GmajNo4WF3dvFaWUhcP3tTNzSZ9bPvhA8AJL/FxjEi2//nnhZd+ieR5m4Hoy7HRp8ccxQTiSE+Pk/04lYKz+9jRSEjYgKUjgydLJptAlp1s2Lu2uRoMxtXaiKoxA0t18xpMFIzV1WSHrw3PnquDqZh8EtODVjaePkh5Ixr4xMNYWpbFKY8+9aqKmK7ljYrQMl2murNSmV+Qmx7vjX6Bu8VVar06taituEoSKA+UpBTx65JSLFMneJWKwmu2J5n9aScnPoZ1EpIipCeKp9C3B65E4myNmVYolTLpNR+FoW5zUdbqcjV7HEhmmhShSWpvmmYnu01xcnUGnv90kThPmiQzq8E3w18ticvyn+LlOswoU3cV5q2vjtRXr8+drMiICvIOjZF6R3Cxcl+D787Q3EBFZVWJ9MQJWW3bhhRb3akFyXYAku1wLNtPCHKQTZLHdR5iSa7cu9BkXrSn7HrKSs2C8ywAoc+MlY77Q57Tnlx6AWS6VvW9vmjBub5qEZgHD7qYOWRjQdZYCbkiu3mbJzxL5JSqYTewXxLPCowA2XF0aAJKehrcthPUgpIjcBvofBYOwkPH6aPgShc6guxvg4nQ3IHsbGkLsVEkD0pyuMonI17Rf8qMTvzNbBszGMEeHsEa66Qnc6cjQ9AC1pI5PZ+cE2dyn5gn5Q4c7n8S+Utjud5P2f2Mi+AWscvIFciUTp8+ih/e29PL7gfR8Mbzz6Mx5ewBRiXoJTn/cQI72v0AonWZ8WblDP2kDvHygqi8hCjp9AB/b6fF0zSxqYJeqTJQESIrmRMQHMBOD5ihj4hXuCK8SvYm4ydIIr5UqpcyftbJ9EP2Zjumq4PtZsoFN8jZlyQ9+cSgkXNhwL2cDfNMTCdQJFVGRlYmKehOJnbeRrZbV96ZHppnkgWZ8sLSO8tJbfgczKcLR14l50wzQ8LHc8aK5FDnfW45zesz4C0gjy0IV2e2zcJJOZqmBDfZfU5tttiCUbo7oQ+77+G87z9+UPetUwrcogadEeSb8M8PGsE9agH2pHJ75sIxSmWN4MOkyigvVx+pm8Ig1k6ZqTN4xjVmhwSbcmZl+/n5GaJjg9x9pjtNm3Rc6DLN2Tcyl+Mqskxqf2eC/0u2hXEW/IX4OAY5aE8j4zysHR7o6RX8Bb4Aat95xxYvskPobP8eL49gXD7TTDtNSPCBYm1ZkkKRVKbVliUoFAllpRK5dsYMrcLDQ4GvconwPXK3NFEuTyzV4tH3MdhhGK6psQdoseA6Os1g/8u5gw3wq19eZw8AHxH8EN0vRve9bfc5CZAB1X344QHBdRH8htCsZD+g7yPZe6oOTfTRSizA3uFBYnFQuDcWaPABgahlYrFMTSCC/AlK82SdHdQxF5GtvGjj0wS+GCfwDTwS+aEHFX4ikZ8CIfATNUVWp6pUqdWRkXPSVKq0OexFDHUY9Z3DzUg8GPHhNPsQvCoYftrZ+PTE0ELQNZFmgCMWWoX0flxd3WTrMrA3FSD7ACnKKQnFdd4UOoAoOfBEr7Ne6kROioBewGiYkzdhBOhCB71bN4cDu62P9/wGSpivYI1FkEB6lwMs1kek/xlCC11Kv281IK3gRu4Ki1kllUQVUnOwpHnqjQbHNigPT96t4TKoVOxgLRRj6T/WHQFRbGOz9aPdMV9tzAcg0FTk2B/V9juN+ZUVthYZq4db2Gj7zIorSYEl9UuMxb01kaS9iq7dyymE9g4qRuDQTkNXS5iqcT1U6dlp+baGGkONrdGmpFSZEOaFE9uJ9Vk6/2lQmhlb3YUbrLC7Z6aO9t3QlBGq2HVClb2mLnp6Tf2JXquM8b1Wg7gLmc4Y326lsvaNtVuFyeEei0V4ArITO65oqgn3cZAe42A+syMRjPbQSuwU2BtEFbIFYOgwyMBNoildpxfAi7hDeCvIAxm4LzS7ZZ5g6NQmENn0HOml/ZJ0g97km2mr6iJInMFkgB7kvyeT2MpJbyT1s6rCvk9N+fBj5nXwVs62DmsfqcnqmSxaisb643jfnsUVOskcsvc4DDEC9wDO1T/UR59AdytTKnTYnitCvkO+x4s5AySB6Qp3mY9rrCayJDbQPzpfpygO+a4Tn2+YeDpaqKYM9noZEiXZWNhur8EjcRstl/EhngFYXAPUfq4zg7w2MoqEci6qOlkeHh4SOzO9xqipygjrcU42YDuTER1tjE4QFLvKZrhP8ZL7hM0yyWQxOSGaWd7uRSZNUVyQX3SBXsNNnyH35IwLDTY7zFQw8cKwp9u0iQ0ejYaaTQUFm2r0kTWbCguRGO8PiskNU+dFS6XReeqw3Jgg9mpeT61RX7NxVn5PjQFfI4tNgYGm4khjabS/f3QpP+c8ZjKaM5hCYgEmJDP5NhalTT5xsU6J05u2lDqtDKmJN85OCjaULoyMyPQvSU1skumi+zMTmjKVhXfPGOb6HgyMmumZzpwOUgVGZYfEFEV6OQu1KXG+4hpZqF/s3CR4Y0PdTN/NLj4Kby1HeGCkTrJ6gYrUohAPDEalkRgFD0+jJ9kZIc4V8zbBSWlUKCbypZtT7965N3x+lLExfMuRnWqtJmz3s/2a5ujo+RE7jx8N15wMy2mMiZmfExaWMz8mpjEnjL43a0f0K12/9/Lx8Tzadjp6e17u1ugzHS95+/p4vdxyKWZLoakRj240xfBXLKNacIbtYO6Rczg2lXq249zwUuae9T2w9nV0/zDS8cXI7nrgPgBbp4MSDeTsfQ4c84jvciiJf+cd0uJwzYL7G7xhkOAu393AyPg46zQtBq8yvv8rH0AfGP2lxQGbFtehoAp8zLb9f2I/zl36RB1K9aoKDjMPJrgT+BWuRNGUM4xm2ti1CB+pOI/H54lPa2N1GP1oOGMwmgV6sG/iVJ9OD8lG5+G4sfOwEJ2H6xqebzY2N0akcYHuzgycQMjHTc931jseicsCx47Ep9KlUTFJZa05hHcH6dssJ/iWP+fjlmFAHwG7++F1eKUP7BZ8O/xPepl1B+OB17Uf/ojOf1dtuQOO7BY+BaJz4FWrG3SxupP9GPlw5JpgP6nDkHoCe+vGY/aGUPXrAQwZuSZcR+654U4/fB+gLw4dxZH6SPCbFmPmjx3GT7JRwGsP/OF879KlvfDMsLB43adpBfAtjBAsAu/B6KNHl1y7Rv8B7MkY7LQ+t47k6fA8k8g8gaQSjeaRE1tJzvMTTeWTc04HbkEhhnBd9M6ZqdV6rip1plL2NVBD5+E4PH8hvIjnPwfEAUmBMi46NKrCLPWLLtKHZMmH+phtT9DiRWiJJfVjUnN80q461JOfsKvjWSSIxjSCKBdfle/04ADxPhSuVxmjalKVoSr3IJ/pqoy6aENNZuizTnGclypAFG9ITNYZ6UpHPmLyBZXTA3xFkz1lXhFFccGy2Fmh2llekwJCdL4aFJ0GxpYY1Jwrir9Cja3ccPQoq/Gakke+EAqFKSg2Jz1acsVY5zbH4HYTvvrjJJPbOrSAhwfl4WnvXQZOlbXaynWDlxa2/aFk+43P5i3Gvy4vWP1RecsN+u8dVzZnJsVZ08zPwfwoA/2aaXsBfgfkvxYA8eHF75/pb4xKiP49/GYR/PuJxe+/PDA/KjO5/0rtsU87W/9cMLyOM4Lvr8xiVoVE4Hc/KLIHkSPX2DfZfnTOUuIeJONYvximd7SrzElGEVIJ99kxej80mbO3XFqWtzmm593bsUmZvVdW5G815d9glvl6w3R5cThuHLR2+HiB88HF4bh7cGfGxdZV7+/MDw46CR9kXGpb/cHOWQrZfHrzMrX1j94+6OxcGb9YTWs9Pbi6XdXEtq9FZ/ejJOZQkSwKX5IYe2nPnW8HsRvztScO0gnj3ty7cvD6hQvf2d/co49awA+nxr29B36hn4ciC3Qee4WP9GwMs2sFD9FecjjzihyJu4OPt7EJexPlxN4N+kDFSf3Wt7mksl1vNS66uqs0v8dSpawzL90buXjTp1k9DbHG6tWpmd1VkfqKZYKHg8ajanhkjqVi2Zs9Welb3l07//TqNGefC5qjsi+teaHF3YVZq8o16pLVebmry8KR3ozw7wgIbtEKHO0gK7W2kCJw0g8v+AuCBxJ4VyIPJz2ggl4Ex4kRJ6qdOuQAvzUKX0v9lcBJzx2B62zwzwmc9B8S/Boe/yMeP+kLI3AjD/+ch5P3WJ1eQXCaxwNWgr8jOHn30+kMgrME3gXYUfhDMt7VNn6PA3z+KLwdzCVw8v4MGe9hG/8qgZP3iAh+MY8fzYDh5P0NAve1wRcROE/nsVE6u0HbU+FrwE0H+G9H4cuBK/hoFD5/FN4Okh3GHxyFP0O9yK8L5uN3YEf5sBIsIHwj732SeYU8PdR9Mn4ifI2Nnzz8lVH4cuoPT4WvpR4ROA7i2gieyTz+kQf28ePga6hsAkdxP32I4OHhy0f6CRxJH33PAb525GeH/To2ul/doN+OXygn/Jlu48+Bp45fA759qjwsB2EO+35sdN+7wamnwtfQTk+Vk+Ugyy4PglAy3sc2byeB8/p1fVS/ujspB72zwzF/bj9VH5d7OI7vHYW3ZzrAhc+N4nlm5AT1OdZfmI/fZ7HpL5IH6oxdrxlI5g2yycOhp8LXUD87wG/Z4IieNOopcCwPgwSODZ6K4FnPr/cgPx7nAQwO8DV+PDwGwVsInvU2eagl8GkIXiAYphBcSiGfso56gdxfNzLXwd5cH7U33dRNAid98IRPoTb79N1Tx68ByqfYLbS+BZSD3bo+are6qU+eCl8DdE+xcwhPO4+H9MuS8Qbb+GwSw+lHrjEXkb+094Q8fHc44Qbb/ziS5Cl+ZDlbfjb0yQh3YoYWt3KCwxPj2om/4V5Sbts2IZR9IllLOw/a33ULQ74yaPy7bhx+wUxiO6HrpeQfR9582wn8gfYQfvPt9dfh18AXfk1egHsAXOCDV+F77YIhC/QC/8diga59e/oeWiwP0QXct/W30zX0fTwX36/KxwQyx7YHJ1I6dBPNEE8xhHsrZ0wfjRsnu/u6kcixE4inB0qlrjJuuq9cYg8YJUqF3G0I19yENyhqkiv9C+n5GR/wCW84hm4gwiEUwzVHaGHaSc+xE991DOydx/Smsf5jOobPTAOqjcmjT6DYzYXvM+X0Rvs8bcBjA/zxUkdbWwc8y7aC21C7Rdjf8PbbZJ4sJCt+wqnIpiIh9ORsCVlSO1MoSPXMYBwrkeDCg16j0WrHun08/QXjEwhKmbvYg/SeESxCPDDrX8HJc2Oa2uXRGUHhleEJC3NDa+ckFRkXHZ5f2NuUJkr8P86a5IKQ6CKDr8yYGpS7qaUsNqB5dlpW4vIjc+t21MW5pv2gSshtalkfllqskggT65Kk3l7G8vigxTX6nEjpFJcZLu6xZe25809Eag4sytsw1yCLL+WOR800h3p4q+Pk4cla6VRfbWRc3rykBS8ZdLsXlu5aGBue12ikfzIkqbwUbEs1l64NnAICDBnUqG19xWZbsS04Cs5iW0C3gLOjOvZXZCvWuXyE74NPRz5COkjSGv8PP+XQlnicY2BkYGAA4ooCnW3x/DZfGTg5GEDgxCNZSRB9kp1z/n/Tf2yc39g3ArmcDEwgUQAjPgrPAAAAeJxjYGRgYN/wj43BnOvbf9P/KZzfGIAiKOABAKJwB2t4nF2ST0iTYRzHv3ue3/O4hoWHQYcw9SAyPNUaYrZLxRhLQsSGyMsYMdZuISIWHqSDJxkvEtQY0ml0kBCJ8BASUgfr4CGiQxiIiJBg0UGGSLS+zzsH4QsfHt7397y/f9+vTKMIPtYiYtLwzT7SZo+nhS/b8O1TpNvi8LWCr5ZRtF2MdcAPlxkbJ0mk5bh5mtf85y1GTBUxewGTZqtRj4B5v2PZZBCXd4iHNgBhPckjJfsYlBw8OSLP4akD3JNVeLxbUIt895BkH56qwgsrFEwWBfmErOxiSNbg6Q0U9C5G1QniJoUbMoyoLSEqN1mrgi69hGE1iKjaRS70EXlzFeN6AqO8l5UsYrKHCZlChvlykuD7HyxIHQ845xf7HnfMOvzQGHrVAmLqM8okoW9jyHAHegS95ywW+e2XfhPER3Q/qnLCPDvoaJtD0SEdTcLAlps77GaP4YkI58phkniqhKJDtkics/iI6gNEdJV9zqLG+4+512esMR/aRIVnmnfLuoYefn9oLmJetSOv2huH2sM3/YNzdqJP/8aMfoU1k1RQl9DJ2I7TUN3lfucxpgrok9XQfZ4rZKhttvHXHnN32xgw/SiFjtCj1pFQM4jrlyjqFPsrYYA6XpEVvAj+467EIsx+lhRQMY8aX22NfmoxiFvyAdfMIea421ygu9Pc6Uicbk5Dp1XgQfrPeSmAHnJ+cr5xsbMEXrVNr7agT7POq6RELgd5Tn3aytki8KTr5yy5ph//h7PC7YhcpzfPB723/Hg6R4vAe92NhBSpJWvobhQidbupf1LXGKYkhUxQm/f+ARdUu5F4nB3OQWrCUBSF4VPBCsVABDUaJKjQgRja0oiGN3TkCsQVZODMNThz1ql0GS6gGxBHbie3fy48Pi6H+857kl44B9zoT21d1NLAdji0MyZ2xZH9YupJ4cnabuqo5WYkHU3tB+du7pYmDNhVzGZEc4VNZ+SdEZ3vijUmiZnv6tF5xoz9nsr6hKGuNCDfYWYFTu0NZ+7cXdoec58/7BW/fb+snxhwyH9uGDCh7Yo5byUkW439hyl5hV/cTdnfYLCFcnzok2SPwY4qmPvY3F25a5IFNvulJtb/BxtQXB8AAAAAFgAWADwAiADEAPYBGgE6AXwBqAG+AeQCEAIwAlwCggLCAvQDTgOSA+4ECgQ8BFwEiAS8BOIFAAUIBRQFbAWqBeIGIgZkBpQG5gcaB0gHfgeqB74ICgg8CHYIuAj4CSIJcAmcCcgJ5goOCj4KYgp+Co4KnAq8CvoLEAtIC5wLvgv+DEIMaAzSDRQNPA2yDi4OPA5SDnoOog7ADtgO5g92D4gPlg+oD8gP6hBAELwRMhFQEW4RwhHQEd4R9hIMEhwSLBI+ElAScBJ+ErgSzhLiEvgTTBOqE+wT+hQ8FGYUuhT+FSAVWhWEFZYVwhXQFfQWDBYkFlQWaBaiFrIWwhb8FzYXVhdqF5wYIBhiGJoYsBjgGSwZZhmuGgIaEho4GlgagBrWGuwbABsOG0IbiBvyHEocnBzYHSYdMh0+HUodVh1iHW4deh2GHZIdnh2qHbYdwh3OHdod5h3yHf4eCh4WHiIeLh46HkYeUh5eHmoedh6CHo4emh6mHrIevh7KHtYe4h7uHvofBh8SHx4fKh82H0IfTh9aH2Yfch+CH44fmh+mH7Ifvh/KH9Yf4h/wIDIgaCCcILgg0CDsIXghiCGYAAAAAQAAAOAAawAFAGYABAACABAALwBZAAAB3AYjAAMAAXictZLNbtNAFIWP47RJ2iRqKyG6QGJQKtFu/FNlFRAiqpCoEgmRSt2wQPmZJlZdT2Q7ibJhxwaJJ2DNBvEuvAJvwZaT8VQxFZSyII7H35w5c++dawNoWF9gIfs94J2xhSJnGRdQgjBs4x4eGy7mPBt4iKeGN3N6CQ28MVxGFe8MV3K8hXN8MLyN+/huuIo9/DBcw75VMVzHgfXI8E4u126uzj2t27CKFc6eWy8MWyhb7w0XULc+GrbRtD4ZLuY8G3hmfTO8mdNL6BVqhsvYL7w1XMnxFr4WFoa34dgNw1Uc2K8N1+DZM8N1vLQ/G97J5dpd1Xmipss4GE9Scez5nmhHqYpER6l5kDrteK56cjwL+/EKxUCm/ZbwHc9rave5jJOA9rWiLSKWoewnch36cHhklpc3MuQmd7CLdhgK7UmYJJHxXI7ELBrJWJyddoWayuhCRanoBkMZJZKF+ZM0nbZcd7FYOJcqXv2dobpyb8iOlP8YIMwcbp+NcXEChSmWiBFgjAlSfjCHGOKIz2N48HkLtBFxRXEU6PCpMKc/hcOVmKzQg+T+GUL0qVyrAgPqKbUW2aff49XMxX7CeK+4u8NPXnJXwrhZnt+51/EEvZLZJDnhuM4YcC60I6XWx4irV7qqS2oKF7eeZ53rT567dWxAx+152qw+1Oe4jpOYUyW6E3OOIyoz7h5pReAMp+jqU0ypRDyL0hkE1YA1rLTV7qx7vo6a0tuCy2uhL4d9ULob2ehwn2KH3L+4HcaV/7mC8JcYrn5rq7fq/gQl+PaKAAB4nG3PRYgUAACF4W9W3VXX7u7u7u7u7nV31h1jRmd27cRWFEXQk2JdVFSwMU9iFzY22N1XXb0J/vAOD95/eOL85ddhDfyPp5mJU0llVVRVTXU11FRLbXXUVU/9TK+hRhproqlmmmuhpVZay6KDTjrroqtuuuuhp15666OvfvobYKBBBhtiqGGGG2GkUUbLK5/8CiqksCKKKqa4EkoqJavscsgpm0S55JZHARW10VY7y62w0iqr7bLbHgccdMhhRxx12hkbfBKvrHLKqyDBGGONk2SpJT4rrYx77gfiPPDYk8zXzyzW0RprPfLQXets9dEHX3z1zRabnbLTpkAWO2zX3msn/fDdT+tt88ZbkwPMM9ciL7wy3i8T7JfmuZf2uuCcfZKluCTovIuuueyKq25Kdd0Nd9xy2zsThUwyRVjENFNFxWRIN90Ms800yxwLzLfQ+0BWx2wMZAvEOxtIsMwJx+OnJCVHI+E8U4PRUCQlORhOD0aDKblTQtNDsVAkHJucFEtLTJ8RCYVT/yyiuVIjGdF/Sizjrxv9DS6Pg1QAAA==\",\n \"type\": \"application/font-woff\"\n },\n \"$:/themes/tiddlywiki/starlight/ltbg.jpg\": {\n \"title\": \"$:/themes/tiddlywiki/starlight/ltbg.jpg\",\n \"text\": \"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PSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJPGRpY3Q+CgkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVRpb2dhUGFwZXJOYW1lPC9rZXk+CgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD43MzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+Nzc0PC9yZWFsPgoJCQkJCQk8cmVhbD41OTQ8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc+bmEtbGV0dGVyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD43MzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPlVTIExldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQudHlwZTwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mb1RpY2tldDwvc3RyaW5nPgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LkFQSVZlcnNpb248L2tleT4KCTxzdHJpbmc+MDAuMjA8L3N0cmluZz4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+Cgk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0VGlja2V0PC9zdHJpbmc+CjwvZGljdD4KPC9wbGlzdD4KOEJJTQPtAAAAAAAQAEgCTgABAAEASAJOAAEAAThCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANHAAAABgAAAAAAAAAAAAABVAAAAVQAAAAJAFAAaQBjAHQAdQByAGUAIAAyAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAFUAAABVAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAABVAAAAABSZ2h0bG9uZwAAAVQAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAVQAAAAAUmdodGxvbmcAAAFUAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAA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Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBNb24gRmViIDE5IDIwMDcgMjI6MTM6NDMgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhhcDpDcmVhdGVEYXRlPSIyMDEwLTA4LTMwVDIzOjQ5OjE0LTA1OjAwIiB4YXA6TW9kaWZ5RGF0ZT0iMjAxMC0wOC0zMFQyMzo0OToxNC0wNTowMCIgeGFwOk1ldGFkYXRhRGF0ZT0iMjAxMC0wOC0zMFQyMzo0OToxNC0wNTowMCIgeGFwOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1MzIE1hY2ludG9zaCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iaU1hYyIgcGhvdG9zaG9wOkhpc3Rvcnk9IiIgeGFwTU06SW5zdGFuY2VJRD0idXVpZDpFQjAwQjU5NDA4QjVERjExODdBNTlCQzExMkI0QjA2RSIgeGFwTU06RG9jdW1lbnRJRD0idXVpZDpFQTAwQjU5NDA4QjVERjExODdBNTlCQzExMkI0QjA2RSIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDkwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwOTAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIHRpZmY6TmF0aXZlRGlnZXN0PSIyNTYsMjU3LDI1OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEsMjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwzMzQzMjs3RUY4RDFBOTcwMjlCOUNFOTAwNkUzRDcxRjgwNDdFNSIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM0MCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjM0MCIgZXhpZjpDb2xvclNwYWNlPSItMSIgZXhpZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtGRTM2RkQ0MzU0NEI0ODUyODY3OEVERkZGOTk0MkMwRiI+IDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+IPJElDQ19QUk9GSUxFAAEBAAAPFGFwcGwCAAAAbW50clJHQiBYWVogB9oAAQAEAA8AMwADYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1hcHBsWM2pk1LRLUWykThyCK1QdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAAAXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAYSbmRpbgAAB+wAAAY+ZGVzYwAADiwAAABfZHNjbQAADowAAAA8bW1vZAAADsgAAAAoY3BydAAADvAAAAAkWFlaIAAAAAAAAHeaAABAmQAAAxlYWVogAAAAAAAAWO0AAKuMAAAXrVhZWiAAAAAAAAAmTgAAE/UAALheWFlaIAAAAAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAADAQAAAgAAAUUCyAQ5BZsHIQi8ClsL+w2ZDzsQ6hKXFEYWAhe5GVYa4xxxHfkfdSDyImcj0iU1JpAn5ikyKnkrvi0BLkEvgTC9MfkzNTRrNaE21DgHOTg6ZjuTPLw95D8MQDNBV0J5Q5pEuEXWRvJIDEklSjpL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\",\n \"type\": \"image/jpeg\"\n },\n \"$:/themes/tiddlywiki/starlight/styles.tid\": {\n \"title\": \"$:/themes/tiddlywiki/starlight/styles.tid\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n/*\\nPlaceholder for a more thorough refinement of Snow White\\n*/\\n\\n@font-face {\\n font-family: \\\"Arvo\\\";\\n font-style: normal;\\n font-weight: 400;\\n src: local(\\\"Arvo\\\"), url(<<datauri \\\"$:/themes/tiddlywiki/starlight/arvo.woff\\\">>) format(\\\"woff\\\");\\n}\\n\\nhtml body, .tc-sidebar-scrollable-backdrop {\\n\\tfont-family: \\\"Arvo\\\", \\\"Times\\\";\\n background: url(<<datauri \\\"$:/themes/tiddlywiki/starlight/ltbg.jpg\\\">>);\\n}\\n\\n.tc-page-controls svg {\\n <<filter \\\"drop-shadow(1px 1px 2px rgba(255,255,255,0.9))\\\">>\\n}\\n\"\n },\n \"$:/themes/tiddlywiki/starlight/themetweaks\": {\n \"title\": \"$:/themes/tiddlywiki/starlight/themetweaks\",\n \"tags\": \"$:/tags/ControlPanel/Appearance\",\n \"caption\": \"Star Tweaks\",\n \"text\": \"Demo of a control panel tab dynamically loaded with a theme.\\n\"\n }\n }\n}"},"$:/themes/tiddlywiki/tight":{"title":"$:/themes/tiddlywiki/tight","name":"Tight","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Tightly packed theme","dependents":"$:/themes/tiddlywiki/vanilla","version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/tight/base\": {\n \"title\": \"$:/themes/tiddlywiki/tight/base\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\thtml body.tc-body {\\n\\t\\tfont-size: 13px;\\n\\t\\tline-height: 16px;\\n\\t}\\n\\n\\thtml body.tc-body h1,\\n\\thtml body.tc-body h2,\\n\\thtml body.tc-body h3,\\n\\thtml body.tc-body h4,\\n\\thtml body.tc-body p {\\n\\t\\tmargin-top: 0.3em;\\n\\t\\tmargin-bottom: 0.3em;\\n\\t}\\n\\n\\thtml body.tc-body code {\\n\\t\\tfont-size: 0.8em;\\n\\t}\\n\\n\\thtml body.tc-body section.tc-story-river {\\n\\t\\tpadding: 0px;\\n\\t}\\n\\n\\thtml body.tc-body div.tc-tiddler-frame {\\n\\t\\tpadding: 12px;\\n\\t}\\n\\n\\thtml body.tc-body div.tc-sidebar-scrollable {\\n\\t\\tpadding: 12px 0 12px 12px;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-subtitle {\\n\\t\\tfont-size: 0.7em;\\n\\t\\tfont-weight: 700;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-subtitle .tc-tiddlylink {\\n\\t\\tmargin-right: .3em;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-tags-wrapper {\\n\\t\\tmargin: 0;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame button.tc-tag-label,\\n\\thtml body.tc-body .tc-tiddler-frame span.tc-tag-label {\\n\\t\\tfont-size: 0.8em;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h1 {\\n\\t\\tfont-size: 1.5em;\\n\\t\\tfont-weight: 500;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h2 {\\n\\t\\tfont-size: 1.3em;\\n\\t\\tfont-weight: 500;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h3 {\\n\\t\\tfont-size: 1.2em;\\n\\t\\tfont-weight: 500;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-body h4 {\\n\\t\\tfont-size: 1.1em;\\n\\t\\tfont-weight: 500;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-improvement-banner {\\n\\t\\tmargin-right: -15px;\\n\\t\\tmargin-left: -10px;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-tiddler-info {\\n\\t margin: 0 -13px 0 -13px;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-fold-banner {\\n\\t width: 13px;\\n\\t margin-left: -15px;\\n\\t}\\n\\n\\thtml body.tc-body .tc-tiddler-frame .tc-unfold-banner {\\n\\t margin-left: -13px;\\n\\t margin-top: -4px;\\n\\t}\\n\\n}\\n\"\n }\n }\n}"},"$:/themes/tiddlywiki/tight-heavier":{"title":"$:/themes/tiddlywiki/tight-heavier","name":"Tight and Heavier","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Tight and Heavier font theme","dependents":"$:/themes/tiddlywiki/tight $:/themes/tiddlywiki/heavier","version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/tight-heavier/base\": {\n \"title\": \"$:/themes/tiddlywiki/tight-heavier/base\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\"\n }\n }\n}"},"$:/themes/tiddlywiki/vanilla":{"title":"$:/themes/tiddlywiki/vanilla","name":"Vanilla","author":"JeremyRuston","core-version":">=5.0.0","plugin-type":"theme","description":"Basic theme","plugin-priority":"0","version":"5.1.23-prerelease","dependents":"","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/themes/tiddlywiki/vanilla/themetweaks\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/themetweaks\",\n \"tags\": \"$:/tags/ControlPanel/Appearance\",\n \"caption\": \"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\n \"text\": \"\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\n\\\\define replacement-text()\\n[img[$(imageTitle)$]]\\n\\\\end\\n\\n\\\\define backgroundimage-dropdown()\\n<div class=\\\"tc-drop-down-wrapper\\\">\\n<$button popup=<<qualify \\\"$:/state/popup/themetweaks/backgroundimage\\\">> class=\\\"tc-btn-invisible tc-btn-dropdown\\\">{{$:/core/images/down-arrow}}</$button>\\n<$reveal state=<<qualify \\\"$:/state/popup/themetweaks/backgroundimage\\\">> type=\\\"popup\\\" position=\\\"belowleft\\\" text=\\\"\\\" default=\\\"\\\">\\n<div class=\\\"tc-drop-down\\\">\\n<$macrocall $name=\\\"image-picker\\\" actions=\\\"\\\"\\\"\\n\\n<$action-setfield\\n\\t$tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\"\\n\\t$value=<<imageTitle>>\\n/>\\n\\n\\\"\\\"\\\"/>\\n</div>\\n</$reveal>\\n</div>\\n\\\\end\\n\\n\\\\define backgroundimageattachment-dropdown()\\n<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\" default=\\\"scroll\\\">\\n<option value=\\\"scroll\\\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\\n<option value=\\\"fixed\\\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\\n</$select>\\n\\\\end\\n\\n\\\\define backgroundimagesize-dropdown()\\n<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\" default=\\\"scroll\\\">\\n<option value=\\\"auto\\\"><<lingo Settings/BackgroundImageSize/Auto>></option>\\n<option value=\\\"cover\\\"><<lingo Settings/BackgroundImageSize/Cover>></option>\\n<option value=\\\"contain\\\"><<lingo Settings/BackgroundImageSize/Contain>></option>\\n</$select>\\n\\\\end\\n\\n<<lingo ThemeTweaks/Hint>>\\n\\n! <<lingo Options>>\\n\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\"><option value=\\\"fixed-fluid\\\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\\\"fluid-fixed\\\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\"><option value=\\\"no\\\">{{$:/language/No}}</option><option value=\\\"yes\\\">{{$:/language/Yes}}</option></$select> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\"><option value=\\\"pre\\\">{{$:/language/No}}</option><option value=\\\"pre-wrap\\\">{{$:/language/Yes}}</option></$select> |\\n\\n! <<lingo Settings>>\\n\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\" default=\\\"\\\" tag=\\\"input\\\"/> |<<backgroundimage-dropdown>> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\\n\\n! <<lingo Metrics>>\\n\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storytop\\\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storytop\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyright\\\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storyright\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|<$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\\\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n\"\n },\n \"$:/themes/tiddlywiki/vanilla/base\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/base\",\n \"tags\": \"[[$:/tags/Stylesheet]]\",\n \"text\": \"\\\\define custom-background-datauri()\\n<$set name=\\\"background\\\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\\n<$list filter=\\\"[<background>is[image]]\\\">\\n`background: url(`\\n<$list filter=\\\"[<background>!has[_canonical_uri]]\\\">\\n`\\\"`<$macrocall $name=\\\"datauri\\\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\\\"`\\n</$list>\\n<$list filter=\\\"[<background>has[_canonical_uri]]\\\">\\n`\\\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\\\"_canonical_uri\\\"/>`\\\"`\\n</$list>\\n`) center center;`\\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\\n</$list>\\n</$set>\\n\\\\end\\n\\n\\\\define if-fluid-fixed(text,hiddenSidebarText)\\n<$reveal state=\\\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\" type=\\\"match\\\" text=\\\"fluid-fixed\\\">\\n$text$\\n<$reveal state=\\\"$:/state/sidebar\\\" type=\\\"nomatch\\\" text=\\\"yes\\\" default=\\\"yes\\\">\\n$hiddenSidebarText$\\n</$reveal>\\n</$reveal>\\n\\\\end\\n\\n\\\\define if-editor-height-fixed(then,else)\\n<$reveal state=\\\"$:/config/TextEditor/EditorHeight/Mode\\\" type=\\\"match\\\" text=\\\"fixed\\\">\\n$then$\\n</$reveal>\\n<$reveal state=\\\"$:/config/TextEditor/EditorHeight/Mode\\\" type=\\\"match\\\" text=\\\"auto\\\">\\n$else$\\n</$reveal>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n/*\\n** Start with the normalize CSS reset, and then belay some of its effects\\n*/\\n\\n{{$:/themes/tiddlywiki/vanilla/reset}}\\n\\n*, input[type=\\\"search\\\"] {\\n\\tbox-sizing: border-box;\\n\\t-moz-box-sizing: border-box;\\n\\t-webkit-box-sizing: border-box;\\n}\\n\\nhtml button {\\n\\tline-height: 1.2;\\n\\tcolor: <<colour button-foreground>>;\\n\\tbackground: <<colour button-background>>;\\n\\tborder-color: <<colour button-border>>;\\n}\\n\\n/*\\n** Basic element styles\\n*/\\n\\nhtml {\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\\n\\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\\n\\t-webkit-font-smoothing: antialiased;\\n\\t-moz-osx-font-smoothing: grayscale;\\n}\\n\\nhtml:-webkit-full-screen {\\n\\tbackground-color: <<colour page-background>>;\\n}\\n\\nbody.tc-body {\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\\n\\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\\n\\tword-wrap: break-word;\\n\\t<<custom-background-datauri>>\\n\\tcolor: <<colour foreground>>;\\n\\tbackground-color: <<colour page-background>>;\\n\\tfill: <<colour foreground>>;\\n}\\n\\n<<if-background-attachment \\\"\\\"\\\"\\n\\nbody.tc-body {\\n background-color: transparent;\\n}\\n\\n\\\"\\\"\\\">>\\n\\nh1, h2, h3, h4, h5, h6 {\\n\\tline-height: 1.2;\\n\\tfont-weight: 300;\\n}\\n\\npre {\\n\\tdisplay: block;\\n\\tpadding: 14px;\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n\\tword-break: normal;\\n\\tword-wrap: break-word;\\n\\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\\n\\tbackground-color: <<colour pre-background>>;\\n\\tborder: 1px solid <<colour pre-border>>;\\n\\tpadding: 0 3px 2px;\\n\\tborder-radius: 3px;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\ncode {\\n\\tcolor: <<colour code-foreground>>;\\n\\tbackground-color: <<colour code-background>>;\\n\\tborder: 1px solid <<colour code-border>>;\\n\\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\\n\\tpadding: 0 3px 2px;\\n\\tborder-radius: 3px;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\nblockquote {\\n\\tborder-left: 5px solid <<colour blockquote-bar>>;\\n\\tmargin-left: 25px;\\n\\tpadding-left: 10px;\\n\\tquotes: \\\"\\\\201C\\\"\\\"\\\\201D\\\"\\\"\\\\2018\\\"\\\"\\\\2019\\\";\\n}\\n\\nblockquote > div {\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n}\\n\\nblockquote.tc-big-quote {\\n\\tfont-family: Georgia, serif;\\n\\tposition: relative;\\n\\tbackground: <<colour pre-background>>;\\n\\tborder-left: none;\\n\\tmargin-left: 50px;\\n\\tmargin-right: 50px;\\n\\tpadding: 10px;\\n border-radius: 8px;\\n}\\n\\nblockquote.tc-big-quote cite:before {\\n\\tcontent: \\\"\\\\2014 \\\\2009\\\";\\n}\\n\\nblockquote.tc-big-quote:before {\\n\\tfont-family: Georgia, serif;\\n\\tcolor: <<colour blockquote-bar>>;\\n\\tcontent: open-quote;\\n\\tfont-size: 8em;\\n\\tline-height: 0.1em;\\n\\tmargin-right: 0.25em;\\n\\tvertical-align: -0.4em;\\n\\tposition: absolute;\\n left: -50px;\\n top: 42px;\\n}\\n\\nblockquote.tc-big-quote:after {\\n\\tfont-family: Georgia, serif;\\n\\tcolor: <<colour blockquote-bar>>;\\n\\tcontent: close-quote;\\n\\tfont-size: 8em;\\n\\tline-height: 0.1em;\\n\\tmargin-right: 0.25em;\\n\\tvertical-align: -0.4em;\\n\\tposition: absolute;\\n right: -80px;\\n bottom: -20px;\\n}\\n\\ndl dt {\\n\\tfont-weight: bold;\\n\\tmargin-top: 6px;\\n}\\n\\nbutton, textarea, input, select {\\n\\toutline-color: <<colour primary>>;\\n}\\n\\ntextarea,\\ninput[type=text],\\ninput[type=search],\\ninput[type=\\\"\\\"],\\ninput:not([type]) {\\n\\tcolor: <<colour foreground>>;\\n\\tbackground: <<colour background>>;\\n}\\n\\ninput[type=\\\"checkbox\\\"] {\\n vertical-align: middle;\\n}\\n\\ninput[type=\\\"search\\\"]::-webkit-search-decoration,\\ninput[type=\\\"search\\\"]::-webkit-search-cancel-button,\\ninput[type=\\\"search\\\"]::-webkit-search-results-button,\\ninput[type=\\\"search\\\"]::-webkit-search-results-decoration {\\n\\t-webkit-appearance:none;\\n}\\n\\n.tc-muted {\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\nsvg.tc-image-button {\\n\\tpadding: 0px 1px 1px 0px;\\n}\\n\\n.tc-icon-wrapper > svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\nkbd {\\n\\tdisplay: inline-block;\\n\\tpadding: 3px 5px;\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tcolor: <<colour foreground>>;\\n\\tvertical-align: middle;\\n\\tbackground-color: <<colour background>>;\\n\\tborder: solid 1px <<colour muted-foreground>>;\\n\\tborder-bottom-color: <<colour muted-foreground>>;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\\n}\\n\\n::selection {\\n\\tbackground-color: <<colour primary>>;\\n\\tcolor: <<colour page-background>>;\\n}\\n\\n::-moz-selection {\\n\\tbackground-color: <<colour primary>>;\\n\\tcolor: <<colour page-background>>;\\n}\\n\\n/*\\nMarkdown likes putting code elements inside pre elements\\n*/\\npre > code {\\n\\tpadding: 0;\\n\\tborder: none;\\n\\tbackground-color: inherit;\\n\\tcolor: inherit;\\n}\\n\\ntable {\\n\\tborder: 1px solid <<colour table-border>>;\\n\\twidth: auto;\\n\\tmax-width: 100%;\\n\\tcaption-side: bottom;\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n\\t/* next 2 elements needed, since normalize 8.0.1 */\\n\\tborder-collapse: collapse;\\n\\tborder-spacing: 0;\\n}\\n\\ntable th, table td {\\n\\tpadding: 0 7px 0 7px;\\n\\tborder-top: 1px solid <<colour table-border>>;\\n\\tborder-left: 1px solid <<colour table-border>>;\\n}\\n\\ntable thead tr td, table th {\\n\\tbackground-color: <<colour table-header-background>>;\\n\\tfont-weight: bold;\\n}\\n\\ntable tfoot tr td {\\n\\tbackground-color: <<colour table-footer-background>>;\\n}\\n\\n.tc-csv-table {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-tiddler-frame img,\\n.tc-tiddler-frame svg,\\n.tc-tiddler-frame canvas,\\n.tc-tiddler-frame embed,\\n.tc-tiddler-frame iframe {\\n\\tmax-width: 100%;\\n}\\n\\n.tc-tiddler-body > embed,\\n.tc-tiddler-body > iframe {\\n\\twidth: 100%;\\n\\theight: 600px;\\n}\\n\\n/*\\n** Links\\n*/\\n\\nbutton.tc-tiddlylink,\\na.tc-tiddlylink {\\n\\ttext-decoration: none;\\n\\tfont-weight: 500;\\n\\tcolor: <<colour tiddler-link-foreground>>;\\n\\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink {\\n\\tcolor: <<colour sidebar-tiddler-link-foreground>>;\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink:hover {\\n\\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\\n}\\n\\nbutton.tc-tiddlylink:hover,\\na.tc-tiddlylink:hover {\\n\\ttext-decoration: underline;\\n}\\n\\na.tc-tiddlylink-resolves {\\n}\\n\\na.tc-tiddlylink-shadow {\\n\\tfont-weight: bold;\\n}\\n\\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\\n\\tfont-weight: normal;\\n}\\n\\na.tc-tiddlylink-missing {\\n\\tfont-style: italic;\\n}\\n\\na.tc-tiddlylink-external {\\n\\ttext-decoration: underline;\\n\\tcolor: <<colour external-link-foreground>>;\\n\\tbackground-color: <<colour external-link-background>>;\\n}\\n\\na.tc-tiddlylink-external:visited {\\n\\tcolor: <<colour external-link-foreground-visited>>;\\n\\tbackground-color: <<colour external-link-background-visited>>;\\n}\\n\\na.tc-tiddlylink-external:hover {\\n\\tcolor: <<colour external-link-foreground-hover>>;\\n\\tbackground-color: <<colour external-link-background-hover>>;\\n}\\n\\n.tc-drop-down a.tc-tiddlylink:hover {\\n\\tcolor: <<colour tiddler-link-background>>;\\n}\\n\\n/*\\n** Drag and drop styles\\n*/\\n\\n.tc-tiddler-dragger {\\n\\tposition: relative;\\n\\tz-index: -10000;\\n}\\n\\n.tc-tiddler-dragger-inner {\\n\\tposition: absolute;\\n\\ttop: -1000px;\\n\\tleft: -1000px;\\n\\tdisplay: inline-block;\\n\\tpadding: 8px 20px;\\n\\tfont-size: 16.9px;\\n\\tfont-weight: bold;\\n\\tline-height: 20px;\\n\\tcolor: <<colour dragger-foreground>>;\\n\\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n\\tbackground-color: <<colour dragger-background>>;\\n\\tborder-radius: 20px;\\n}\\n\\n.tc-tiddler-dragger-cover {\\n\\tposition: absolute;\\n\\tbackground-color: <<colour page-background>>;\\n}\\n\\n.tc-dropzone {\\n\\tposition: relative;\\n}\\n\\n.tc-dropzone.tc-dragover:before {\\n\\tz-index: 10000;\\n\\tdisplay: block;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbackground: <<colour dropzone-background>>;\\n\\ttext-align: center;\\n\\tcontent: \\\"<<lingo DropMessage>>\\\";\\n}\\n\\n.tc-droppable > .tc-droppable-placeholder {\\n\\tdisplay: none;\\n}\\n\\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\\n\\tdisplay: block;\\n\\tborder: 2px dashed <<colour dropzone-background>>;\\n}\\n\\n.tc-draggable {\\n\\tcursor: move;\\n}\\n\\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\\n.tc-links-draggable-list .tc-droppable-placeholder {\\n\\tline-height: 2em;\\n\\theight: 2em;\\n}\\n\\n.tc-sidebar-tab-open-item {\\n\\tposition: relative;\\n}\\n\\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\\n\\tfont-size: 0.7em;\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n/*\\n** Plugin reload warning\\n*/\\n\\n.tc-plugin-reload-warning {\\n\\tz-index: 1000;\\n\\tdisplay: block;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbackground: <<colour alert-background>>;\\n\\ttext-align: center;\\n}\\n\\n/*\\n** Buttons\\n*/\\n\\nbutton svg, button img, label svg, label img {\\n\\tvertical-align: middle;\\n}\\n\\n.tc-btn-invisible {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n \\tcursor: pointer;\\n\\tcolor: <<colour foreground>>;\\n}\\n\\n.tc-btn-boxed {\\n\\tfont-size: 0.6em;\\n\\tpadding: 0.2em;\\n\\tmargin: 1px;\\n\\tbackground: none;\\n\\tborder: 1px solid <<colour tiddler-controls-foreground>>;\\n\\tborder-radius: 0.25em;\\n}\\n\\nhtml body.tc-body .tc-btn-boxed svg {\\n\\tfont-size: 1.6666em;\\n}\\n\\n.tc-btn-boxed:hover {\\n\\tbackground: <<colour muted-foreground>>;\\n\\tcolor: <<colour background>>;\\n}\\n\\nhtml body.tc-body .tc-btn-boxed:hover svg {\\n\\tfill: <<colour background>>;\\n}\\n\\n.tc-btn-rounded {\\n\\tfont-size: 0.5em;\\n\\tline-height: 2;\\n\\tpadding: 0em 0.3em 0.2em 0.4em;\\n\\tmargin: 1px;\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tbackground: <<colour muted-foreground>>;\\n\\tcolor: <<colour background>>;\\n\\tborder-radius: 2em;\\n}\\n\\nhtml body.tc-body .tc-btn-rounded svg {\\n\\tfont-size: 1.6666em;\\n\\tfill: <<colour background>>;\\n}\\n\\n.tc-btn-rounded:hover {\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tbackground: <<colour background>>;\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\nhtml body.tc-body .tc-btn-rounded:hover svg {\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-btn-icon svg {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-btn-text {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n}\\n\\n/* used for documentation \\\"fake\\\" buttons */\\n.tc-btn-standard {\\n\\tline-height: 1.8;\\n\\tcolor: #667;\\n\\tbackground-color: #e0e0e0;\\n\\tborder: 1px solid #888;\\n\\tpadding: 2px 1px 2px 1px;\\n\\tmargin: 1px 4px 1px 4px;\\n}\\n\\n.tc-btn-big-green {\\n\\tdisplay: inline-block;\\n\\tpadding: 8px;\\n\\tmargin: 4px 8px 4px 8px;\\n\\tbackground: <<colour download-background>>;\\n\\tcolor: <<colour download-foreground>>;\\n\\tfill: <<colour download-foreground>>;\\n\\tborder: none;\\n\\tborder-radius: 2px;\\n\\tfont-size: 1.2em;\\n\\tline-height: 1.4em;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-btn-big-green svg,\\n.tc-btn-big-green img {\\n\\theight: 2em;\\n\\twidth: 2em;\\n\\tvertical-align: middle;\\n\\tfill: <<colour download-foreground>>;\\n}\\n\\n.tc-primary-btn {\\n \\tbackground: <<colour primary>>;\\n}\\n\\n.tc-sidebar-lists input {\\n\\tcolor: <<colour foreground>>;\\n}\\n\\n.tc-sidebar-lists button {\\n\\tcolor: <<colour sidebar-button-foreground>>;\\n\\tfill: <<colour sidebar-button-foreground>>;\\n}\\n\\n.tc-sidebar-lists button.tc-btn-mini {\\n\\tcolor: <<colour sidebar-muted-foreground>>;\\n}\\n\\n.tc-sidebar-lists button.tc-btn-mini:hover {\\n\\tcolor: <<colour sidebar-muted-foreground-hover>>;\\n}\\n\\nbutton svg.tc-image-button, button .tc-image-button img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n}\\n\\n.tc-unfold-banner {\\n\\tposition: absolute;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\twidth: 100%;\\n\\twidth: calc(100% + 2px);\\n\\tmargin-left: -43px;\\n\\ttext-align: center;\\n\\tborder-top: 2px solid <<colour tiddler-info-background>>;\\n\\tmargin-top: 4px;\\n}\\n\\n.tc-unfold-banner:hover {\\n\\tbackground: <<colour tiddler-info-background>>;\\n\\tborder-top: 2px solid <<colour tiddler-info-border>>;\\n}\\n\\n.tc-unfold-banner svg, .tc-fold-banner svg {\\n\\theight: 0.75em;\\n\\tfill: <<colour tiddler-controls-foreground>>;\\n}\\n\\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\\n\\tfill: <<colour tiddler-controls-foreground-hover>>;\\n}\\n\\n.tc-fold-banner {\\n\\tposition: absolute;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\twidth: 23px;\\n\\ttext-align: center;\\n\\tmargin-left: -35px;\\n\\ttop: 6px;\\n\\tbottom: 6px;\\n}\\n\\n.tc-fold-banner:hover {\\n\\tbackground: <<colour tiddler-info-background>>;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-unfold-banner {\\n\\t\\tposition: static;\\n\\t\\twidth: calc(100% + 59px);\\n\\t}\\n\\n\\t.tc-fold-banner {\\n\\t\\twidth: 16px;\\n\\t\\tmargin-left: -16px;\\n\\t\\tfont-size: 0.75em;\\n\\t}\\n\\n}\\n\\n/*\\n** Tags and missing tiddlers\\n*/\\n\\n.tc-tag-list-item {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\tmargin-right: 7px;\\n}\\n\\n.tc-tags-wrapper {\\n\\tmargin: 4px 0 14px 0;\\n}\\n\\n.tc-missing-tiddler-label {\\n\\tfont-style: italic;\\n\\tfont-weight: normal;\\n\\tdisplay: inline-block;\\n\\tfont-size: 11.844px;\\n\\tline-height: 14px;\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n}\\n\\n.tc-block-tags-dropdown > .tc-btn-invisible:hover {\\n\\tbackground-color: <<colour primary>>;\\n}\\n\\nbutton.tc-tag-label, span.tc-tag-label {\\n\\tdisplay: inline-block;\\n\\tpadding: 0.16em 0.7em;\\n\\tfont-size: 0.9em;\\n\\tfont-weight: 400;\\n\\tline-height: 1.2em;\\n\\tcolor: <<colour tag-foreground>>;\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n\\tbackground-color: <<colour tag-background>>;\\n\\tborder-radius: 1em;\\n}\\n\\n.tc-sidebar-scrollable .tc-tag-label {\\n\\ttext-shadow: none;\\n}\\n\\n.tc-untagged-separator {\\n\\twidth: 10em;\\n\\tleft: 0;\\n\\tmargin-left: 0;\\n\\tborder: 0;\\n\\theight: 1px;\\n\\tbackground: <<colour tab-divider>>;\\n}\\n\\nbutton.tc-untagged-label {\\n\\tbackground-color: <<colour untagged-background>>;\\n}\\n\\n.tc-tag-label svg, .tc-tag-label img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tmargin-right: 3px; \\n\\tmargin-bottom: 1px;\\n\\tvertical-align: bottom;\\n}\\n\\n.tc-edit-tags button.tc-remove-tag-button svg {\\n\\tfont-size: 0.7em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-tag-manager-table .tc-tag-label {\\n\\twhite-space: normal;\\n}\\n\\n.tc-tag-manager-tag {\\n\\twidth: 100%;\\n}\\n\\nbutton.tc-btn-invisible.tc-remove-tag-button {\\n\\toutline: none;\\n}\\n\\n.tc-tag-button-selected,\\n.tc-list-item-selected a.tc-tiddlylink {\\n\\tbackground-color: <<colour primary>>;\\n\\tcolor: <<colour tiddler-background>>;\\n}\\n\\n/*\\n** Page layout\\n*/\\n\\n.tc-topbar {\\n\\tposition: fixed;\\n\\tz-index: 1200;\\n}\\n\\n.tc-topbar-left {\\n\\tleft: 29px;\\n\\ttop: 5px;\\n}\\n\\n.tc-topbar-right {\\n\\ttop: 5px;\\n\\tright: 29px;\\n}\\n\\n.tc-topbar button {\\n\\tpadding: 8px;\\n}\\n\\n.tc-topbar svg {\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-topbar button:hover svg {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-sidebar-header {\\n\\tcolor: <<colour sidebar-foreground>>;\\n\\tfill: <<colour sidebar-foreground>>;\\n}\\n\\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\\n\\tfont-weight: 300;\\n}\\n\\n.tc-sidebar-header .tc-sidebar-lists p {\\n\\tmargin-top: 3px;\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-sidebar-header .tc-missing-tiddler-label {\\n\\tcolor: <<colour sidebar-foreground>>;\\n}\\n\\n.tc-advanced-search input {\\n\\twidth: 60%;\\n}\\n\\n.tc-search a svg {\\n\\twidth: 1.2em;\\n\\theight: 1.2em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-page-controls {\\n\\tmargin-top: 14px;\\n\\tfont-size: 1.5em;\\n}\\n\\n.tc-page-controls .tc-drop-down {\\n font-size: 1rem;\\n}\\n\\n.tc-page-controls button {\\n\\tmargin-right: 0.5em;\\n}\\n\\n.tc-page-controls a.tc-tiddlylink:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-page-controls img {\\n\\twidth: 1em;\\n}\\n\\n.tc-page-controls svg {\\n\\tfill: <<colour sidebar-controls-foreground>>;\\n}\\n\\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\\n\\tfill: <<colour sidebar-controls-foreground-hover>>;\\n}\\n\\n.tc-menu-list-item {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-menu-list-count {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-menu-list-subitem {\\n\\tpadding-left: 7px;\\n}\\n\\n.tc-story-river {\\n\\tposition: relative;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-sidebar-header {\\n\\t\\tpadding: 14px;\\n\\t\\tmin-height: 32px;\\n\\t\\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-message-box {\\n\\t\\tmargin: 21px -21px 21px -21px;\\n\\t}\\n\\n\\t.tc-sidebar-scrollable {\\n\\t\\tposition: fixed;\\n\\t\\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\toverflow-y: auto;\\n\\t\\toverflow-x: auto;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t\\tmargin: 0 0 0 -42px;\\n\\t\\tpadding: 71px 0 28px 42px;\\n\\t}\\n\\n\\thtml[dir=\\\"rtl\\\"] .tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\t\\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\\n\\t\\tpadding: 42px 42px 42px 42px;\\n\\t}\\n\\n<<if-no-sidebar \\\"\\n\\n\\t.tc-story-river {\\n\\t\\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\\n\\t}\\n\\n\\\">>\\n\\n}\\n\\n@media print {\\n\\n\\tbody.tc-body {\\n\\t\\tbackground-color: transparent;\\n\\t}\\n\\n\\t.tc-sidebar-header, .tc-topbar {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 0;\\n\\t}\\n\\n\\t.tc-story-river .tc-tiddler-frame {\\n\\t\\tmargin: 0;\\n\\t\\tborder: none;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n/*\\n** Tiddler styles\\n*/\\n\\n.tc-tiddler-frame {\\n\\tposition: relative;\\n\\tmargin-bottom: 28px;\\n\\tbackground-color: <<colour tiddler-background>>;\\n\\tborder: 1px solid <<colour tiddler-border>>;\\n}\\n\\n{{$:/themes/tiddlywiki/vanilla/sticky}}\\n\\n.tc-tiddler-info {\\n\\tpadding: 14px 42px 14px 42px;\\n\\tbackground-color: <<colour tiddler-info-background>>;\\n\\tborder-top: 1px solid <<colour tiddler-info-border>>;\\n\\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\\n}\\n\\n.tc-tiddler-info p {\\n\\tmargin-top: 3px;\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: <<colour tiddler-info-tab-background>>;\\n\\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\\n}\\n\\n.tc-view-field-table {\\n\\twidth: 100%;\\n}\\n\\n.tc-view-field-name {\\n\\twidth: 1%; /* Makes this column be as narrow as possible */\\n\\ttext-align: right;\\n\\tfont-style: italic;\\n\\tfont-weight: 200;\\n}\\n\\n.tc-view-field-value {\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\t.tc-tiddler-frame {\\n\\t\\tpadding: 14px 14px 14px 14px;\\n\\t}\\n\\n\\t.tc-tiddler-info {\\n\\t\\tmargin: 0 -14px 0 -14px;\\n\\t}\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\t.tc-tiddler-frame {\\n\\t\\tpadding: 28px 42px 42px 42px;\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\\n\\t\\tborder-radius: 2px;\\n\\t}\\n\\n<<if-no-sidebar \\\"\\n\\n\\t.tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\\">>\\n\\n\\t.tc-tiddler-info {\\n\\t\\tmargin: 0 -42px 0 -42px;\\n\\t}\\n}\\n\\n.tc-site-title,\\n.tc-titlebar {\\n\\tfont-weight: 300;\\n\\tfont-size: 2.35em;\\n\\tline-height: 1.2em;\\n\\tcolor: <<colour tiddler-title-foreground>>;\\n\\tmargin: 0;\\n}\\n\\n.tc-site-title {\\n\\tcolor: <<colour site-title-foreground>>;\\n}\\n\\n.tc-tiddler-title-icon {\\n\\tvertical-align: middle;\\n\\tmargin-right: .1em;\\n}\\n\\n.tc-system-title-prefix {\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\n.tc-titlebar h2 {\\n\\tfont-size: 1em;\\n\\tdisplay: inline;\\n}\\n\\n.tc-titlebar img {\\n\\theight: 1em;\\n}\\n\\n.tc-subtitle {\\n\\tfont-size: 0.9em;\\n\\tcolor: <<colour tiddler-subtitle-foreground>>;\\n\\tfont-weight: 300;\\n}\\n\\n.tc-subtitle .tc-tiddlylink {\\n\\tmargin-right: .3em;\\n}\\n\\n.tc-tiddler-missing .tc-title {\\n font-style: italic;\\n font-weight: normal;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-controls {\\n\\tfloat: right;\\n}\\n\\n.tc-tiddler-controls .tc-drop-down {\\n\\tfont-size: 0.6em;\\n}\\n\\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\\n\\tfont-size: 1em;\\n}\\n\\n.tc-tiddler-controls > span > button,\\n.tc-tiddler-controls > span > span > button,\\n.tc-tiddler-controls > span > span > span > button {\\n\\tvertical-align: baseline;\\n\\tmargin-left:5px;\\n}\\n\\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\\n.tc-search button svg, .tc-search a svg {\\n\\tfill: <<colour tiddler-controls-foreground>>;\\n}\\n\\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\\n\\theight: 0.75em;\\n}\\n\\n.tc-search button svg, .tc-search a svg {\\n height: 1.2em;\\n width: 1.2em;\\n margin: 0 0.25em;\\n}\\n\\n.tc-tiddler-controls button.tc-selected svg,\\n.tc-page-controls button.tc-selected svg {\\n\\tfill: <<colour tiddler-controls-foreground-selected>>;\\n}\\n\\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\\n.tc-search button:hover svg, .tc-search a:hover svg {\\n\\tfill: <<colour tiddler-controls-foreground-hover>>;\\n}\\n\\n@media print {\\n\\t.tc-tiddler-controls {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n.tc-tiddler-help { /* Help prompts within tiddler template */\\n\\tcolor: <<colour muted-foreground>>;\\n\\tmargin-top: 14px;\\n}\\n\\n.tc-tiddler-help a.tc-tiddlylink {\\n\\tcolor: <<colour very-muted-foreground>>;\\n}\\n\\n.tc-tiddler-frame .tc-edit-texteditor {\\n\\twidth: 100%;\\n\\tmargin: 4px 0 4px 0;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n\\tpadding: 3px 3px 3px 3px;\\n\\tborder: 1px solid <<colour tiddler-editor-border>>;\\n\\tbackground-color: <<colour tiddler-editor-background>>;\\n\\tline-height: 1.3em;\\n\\t-webkit-appearance: none;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n}\\n\\n.tc-tiddler-frame .tc-binary-warning {\\n\\twidth: 100%;\\n\\theight: 5em;\\n\\ttext-align: center;\\n\\tpadding: 3em 3em 6em 3em;\\n\\tbackground: <<colour alert-background>>;\\n\\tborder: 1px solid <<colour alert-border>>;\\n}\\n\\ncanvas.tc-edit-bitmapeditor {\\n\\tborder: 6px solid <<colour tiddler-editor-border-image>>;\\n\\tcursor: crosshair;\\n\\t-moz-user-select: none;\\n\\t-webkit-user-select: none;\\n\\t-ms-user-select: none;\\n\\tmargin-top: 6px;\\n\\tmargin-bottom: 6px;\\n}\\n\\n.tc-edit-bitmapeditor-width {\\n\\tdisplay: block;\\n}\\n\\n.tc-edit-bitmapeditor-height {\\n\\tdisplay: block;\\n}\\n\\n.tc-tiddler-body {\\n\\tclear: both;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-body {\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\\n\\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\\n}\\n\\n.tc-titlebar, .tc-tiddler-edit-title {\\n\\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\\n}\\n\\nhtml body.tc-body.tc-single-tiddler-window {\\n\\tmargin: 1em;\\n\\tbackground: <<colour tiddler-background>>;\\n}\\n\\n.tc-single-tiddler-window img,\\n.tc-single-tiddler-window svg,\\n.tc-single-tiddler-window canvas,\\n.tc-single-tiddler-window embed,\\n.tc-single-tiddler-window iframe {\\n\\tmax-width: 100%;\\n}\\n\\n/*\\n** Editor\\n*/\\n\\n.tc-editor-toolbar {\\n\\tmargin-top: 8px;\\n}\\n\\n.tc-editor-toolbar button {\\n\\tvertical-align: middle;\\n\\tbackground-color: <<colour tiddler-controls-foreground>>;\\n\\tcolor: <<colour tiddler-controls-foreground-selected>>;\\n\\tfill: <<colour tiddler-controls-foreground-selected>>;\\n\\tborder-radius: 4px;\\n\\tpadding: 3px;\\n\\tmargin: 2px 0 2px 4px;\\n}\\n\\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\\n\\tmargin-left: 1px;\\n\\twidth: 1em;\\n\\tborder-radius: 8px;\\n}\\n\\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\\n\\tmargin-left: 11px;\\n}\\n\\n.tc-editor-toolbar button.tc-selected {\\n\\tbackground-color: <<colour primary>>;\\n}\\n\\n.tc-editor-toolbar button svg {\\n\\twidth: 1.6em;\\n\\theight: 1.2em;\\n}\\n\\n.tc-editor-toolbar button:hover {\\n\\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\\n\\tfill: <<colour background>>;\\n\\tcolor: <<colour background>>;\\n}\\n\\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\\n\\twhite-space: normal;\\n}\\n\\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\\n\\tdisplay: inline-block;\\n\\tpadding: 3px;\\n\\twidth: auto;\\n}\\n\\n.tc-editor-toolbar .tc-search-results {\\n\\tpadding: 0;\\n}\\n\\n/*\\n** Adjustments for fluid-fixed mode\\n*/\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n<<if-fluid-fixed text:\\\"\\\"\\\"\\n\\n\\t.tc-story-river {\\n\\t\\tpadding-right: 0;\\n\\t\\tposition: relative;\\n\\t\\twidth: auto;\\n\\t\\tleft: 0;\\n\\t\\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\t\\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n\\t}\\n\\n\\t.tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n\\t}\\n\\n\\tbody.tc-body .tc-storyview-zoomin-tiddler {\\n\\t\\twidth: 100%;\\n\\t\\twidth: calc(100% - 42px);\\n\\t}\\n\\n\\\"\\\"\\\" hiddenSidebarText:\\\"\\\"\\\"\\n\\n\\t.tc-story-river {\\n\\t\\tpadding-right: 3em;\\n\\t\\tmargin-right: 0;\\n\\t}\\n\\n\\tbody.tc-body .tc-storyview-zoomin-tiddler {\\n\\t\\twidth: 100%;\\n\\t\\twidth: calc(100% - 84px);\\n\\t}\\n\\n\\\"\\\"\\\">>\\n\\n}\\n\\n/*\\n** Toolbar buttons\\n*/\\n\\n.tc-page-controls svg.tc-image-new-button {\\n fill: <<colour toolbar-new-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-options-button {\\n fill: <<colour toolbar-options-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-save-button {\\n fill: <<colour toolbar-save-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-info-button {\\n fill: <<colour toolbar-info-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-edit-button {\\n fill: <<colour toolbar-edit-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-close-button {\\n fill: <<colour toolbar-close-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-delete-button {\\n fill: <<colour toolbar-delete-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-cancel-button {\\n fill: <<colour toolbar-cancel-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-done-button {\\n fill: <<colour toolbar-done-button>>;\\n}\\n\\n/*\\n** Tiddler edit mode\\n*/\\n\\n.tc-tiddler-edit-frame em.tc-edit {\\n\\tcolor: <<colour muted-foreground>>;\\n\\tfont-style: normal;\\n}\\n\\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\\n\\tfont-style: normal;\\n}\\n\\n.tc-type-selector .tc-edit-typeeditor {\\n\\twidth: auto;\\n}\\n\\n.tc-type-selector-wrapper {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-tags {\\n\\tborder: 1px solid <<colour tiddler-editor-border>>;\\n\\tpadding: 4px 8px 4px 8px;\\n}\\n\\n.tc-edit-add-tag {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-add-tag .tc-add-tag-name input {\\n\\twidth: 50%;\\n}\\n\\n.tc-edit-add-tag .tc-keyboard {\\n\\tdisplay:inline;\\n}\\n\\n.tc-edit-tags .tc-tag-label {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-tags-list {\\n\\tmargin: 14px 0 14px 0;\\n}\\n\\n.tc-remove-tag-button {\\n\\tpadding-left: 4px;\\n}\\n\\n.tc-tiddler-preview {\\n\\toverflow: auto;\\n}\\n\\n.tc-tiddler-preview-preview {\\n\\tfloat: right;\\n\\twidth: 49%;\\n\\tborder: 1px solid <<colour tiddler-editor-border>>;\\n\\tmargin: 4px 0 3px 3px;\\n\\tpadding: 3px 3px 3px 3px;\\n}\\n\\n<<if-editor-height-fixed then:\\\"\\\"\\\"\\n\\n.tc-tiddler-preview-preview {\\n\\toverflow-y: scroll;\\n\\theight: {{$:/config/TextEditor/EditorHeight/Height}};\\n}\\n\\n\\\"\\\"\\\">>\\n\\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\\n\\twidth: 49%;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\\n\\tmax-width: 49%;\\n}\\n\\n.tc-edit-fields {\\n\\twidth: 100%;\\n}\\n\\n\\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\\n\\tborder: none;\\n\\tpadding: 4px;\\n}\\n\\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\\n\\tbackground-color: <<colour tiddler-editor-fields-odd>>;\\n}\\n\\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\\n\\tbackground-color: <<colour tiddler-editor-fields-even>>;\\n}\\n\\n.tc-edit-field-name {\\n\\ttext-align: right;\\n}\\n\\n.tc-edit-field-value input {\\n\\twidth: 100%;\\n}\\n\\n.tc-edit-field-remove {\\n}\\n\\n.tc-edit-field-remove svg {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: <<colour muted-foreground>>;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {\\n\\twidth: auto;\\n}\\n\\n.tc-edit-field-add-name-wrapper {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-field-add-value {\\n\\tdisplay: inline-block;\\n\\twidth: 35%;\\n}\\n\\n.tc-edit-field-add-button {\\n\\tdisplay: inline-block;\\n\\twidth: 10%;\\n}\\n\\n/*\\n** Storyview Classes\\n*/\\n\\n.tc-viewswitcher .tc-image-button {\\n\\tmargin-right: .3em;\\n}\\n\\n.tc-storyview-zoomin-tiddler {\\n\\tposition: absolute;\\n\\tdisplay: block;\\n\\twidth: 100%;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-storyview-zoomin-tiddler {\\n\\t\\twidth: calc(100% - 84px);\\n\\t}\\n\\n}\\n\\n/*\\n** Dropdowns\\n*/\\n\\n.tc-btn-dropdown {\\n\\ttext-align: left;\\n}\\n\\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: <<colour muted-foreground>>;\\n}\\n\\n.tc-drop-down-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-drop-down {\\n\\tmin-width: 380px;\\n\\tborder: 1px solid <<colour dropdown-border>>;\\n\\tbackground-color: <<colour dropdown-background>>;\\n\\tpadding: 7px 0 7px 0;\\n\\tmargin: 4px 0 0 0;\\n\\twhite-space: nowrap;\\n\\ttext-shadow: none;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-drop-down .tc-drop-down {\\n\\tmargin-left: 14px;\\n}\\n\\n.tc-drop-down button svg, .tc-drop-down a svg {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-drop-down button.tc-btn-invisible:hover svg {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-drop-down .tc-drop-down-info {\\n\\tpadding-left: 14px;\\n}\\n\\n.tc-drop-down p {\\n\\tpadding: 0 14px 0 14px;\\n}\\n\\n.tc-drop-down svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-drop-down img {\\n\\twidth: 1em;\\n}\\n\\n.tc-drop-down a, .tc-drop-down button {\\n\\tdisplay: block;\\n\\tpadding: 0 14px 0 14px;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n\\tcolor: <<colour foreground>>;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\\n\\tdisplay: inline-block;\\n width: auto;\\n margin-bottom: 0px;\\n border-bottom-left-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n\\n.tc-drop-down .tc-prompt {\\n\\tpadding: 0 14px;\\n}\\n\\n.tc-drop-down .tc-chooser {\\n\\tborder: none;\\n}\\n\\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\\n\\tfont-size: 0.4em;\\n\\tpadding-left: 1.2em;\\n}\\n\\n.tc-drop-down .tc-file-input-wrapper {\\n\\twidth: 100%;\\n}\\n\\n.tc-drop-down .tc-file-input-wrapper button {\\n\\tcolor: <<colour foreground>>;\\n}\\n\\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\\n\\tcolor: <<colour tiddler-link-background>>;\\n\\tbackground-color: <<colour tiddler-link-foreground>>;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-drop-down .tc-tab-buttons button {\\n\\tbackground-color: <<colour dropdown-tab-background>>;\\n}\\n\\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: <<colour dropdown-tab-background-selected>>;\\n\\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\\n}\\n\\n.tc-drop-down-bullet {\\n\\tdisplay: inline-block;\\n\\twidth: 0.5em;\\n}\\n\\n.tc-drop-down .tc-tab-contents a {\\n\\tpadding: 0 0.5em 0 0.5em;\\n}\\n\\n.tc-block-dropdown-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-block-dropdown {\\n\\tposition: absolute;\\n\\tmin-width: 220px;\\n\\tborder: 1px solid <<colour dropdown-border>>;\\n\\tbackground-color: <<colour dropdown-background>>;\\n\\tpadding: 7px 0;\\n\\tmargin: 4px 0 0 0;\\n\\twhite-space: nowrap;\\n\\tz-index: 1000;\\n\\ttext-shadow: none;\\n}\\n\\n.tc-block-dropdown.tc-search-drop-down {\\n\\tmargin-left: -12px;\\n}\\n\\n.tc-block-dropdown a {\\n\\tdisplay: block;\\n\\tpadding: 4px 14px 4px 14px;\\n}\\n\\n.tc-block-dropdown.tc-search-drop-down a {\\n\\tdisplay: block;\\n\\tpadding: 0px 10px 0px 10px;\\n}\\n\\n.tc-drop-down .tc-dropdown-item-plain,\\n.tc-block-dropdown .tc-dropdown-item-plain {\\n\\tpadding: 4px 14px 4px 7px;\\n}\\n\\n.tc-drop-down .tc-dropdown-item,\\n.tc-block-dropdown .tc-dropdown-item {\\n\\tpadding: 4px 14px 4px 7px;\\n\\tcolor: <<colour muted-foreground>>;\\n}\\n\\n.tc-block-dropdown a.tc-tiddlylink:hover {\\n\\tcolor: <<colour tiddler-link-background>>;\\n\\tbackground-color: <<colour tiddler-link-foreground>>;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-search-results {\\n\\tpadding: 0 7px 0 7px;\\n}\\n\\n.tc-image-chooser, .tc-colour-chooser {\\n\\twhite-space: normal;\\n}\\n\\n.tc-image-chooser a,\\n.tc-colour-chooser a {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\ttext-align: center;\\n\\tposition: relative;\\n}\\n\\n.tc-image-chooser a {\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tpadding: 2px;\\n\\tmargin: 2px;\\n\\twidth: 4em;\\n\\theight: 4em;\\n}\\n\\n.tc-colour-chooser a {\\n\\tpadding: 3px;\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-image-chooser a:hover,\\n.tc-colour-chooser a:hover {\\n\\tbackground: <<colour primary>>;\\n\\tpadding: 0px;\\n\\tborder: 3px solid <<colour primary>>;\\n}\\n\\n.tc-image-chooser a svg,\\n.tc-image-chooser a img {\\n\\tdisplay: inline-block;\\n\\twidth: auto;\\n\\theight: auto;\\n\\tmax-width: 3.5em;\\n\\tmax-height: 3.5em;\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tmargin: auto;\\n}\\n\\n/*\\n** Modals\\n*/\\n\\n.tc-modal-wrapper {\\n\\tposition: fixed;\\n\\toverflow: auto;\\n\\toverflow-y: scroll;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tz-index: 900;\\n}\\n\\n.tc-modal-backdrop {\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tz-index: 1000;\\n\\tbackground-color: <<colour modal-backdrop>>;\\n}\\n\\n.tc-modal {\\n\\tz-index: 1100;\\n\\tbackground-color: <<colour modal-background>>;\\n\\tborder: 1px solid <<colour modal-border>>;\\n}\\n\\n@media (max-width: 55em) {\\n\\t.tc-modal {\\n\\t\\tposition: fixed;\\n\\t\\ttop: 1em;\\n\\t\\tleft: 1em;\\n\\t\\tright: 1em;\\n\\t}\\n\\n\\t.tc-modal-body {\\n\\t\\toverflow-y: auto;\\n\\t\\tmax-height: 400px;\\n\\t\\tmax-height: 60vh;\\n\\t}\\n}\\n\\n@media (min-width: 55em) {\\n\\t.tc-modal {\\n\\t\\tposition: fixed;\\n\\t\\ttop: 2em;\\n\\t\\tleft: 25%;\\n\\t\\twidth: 50%;\\n\\t}\\n\\n\\t.tc-modal-body {\\n\\t\\toverflow-y: auto;\\n\\t\\tmax-height: 400px;\\n\\t\\tmax-height: 60vh;\\n\\t}\\n}\\n\\n.tc-modal-header {\\n\\tpadding: 9px 15px;\\n\\tborder-bottom: 1px solid <<colour modal-header-border>>;\\n}\\n\\n.tc-modal-header h3 {\\n\\tmargin: 0;\\n\\tline-height: 30px;\\n}\\n\\n.tc-modal-header img, .tc-modal-header svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-modal-body {\\n\\tpadding: 15px;\\n}\\n\\n.tc-modal-footer {\\n\\tpadding: 14px 15px 15px;\\n\\tmargin-bottom: 0;\\n\\ttext-align: right;\\n\\tbackground-color: <<colour modal-footer-background>>;\\n\\tborder-top: 1px solid <<colour modal-footer-border>>;\\n}\\n\\n/*\\n** Notifications\\n*/\\n\\n.tc-notification {\\n\\tposition: fixed;\\n\\ttop: 14px;\\n\\tright: 42px;\\n\\tz-index: 1300;\\n\\tmax-width: 280px;\\n\\tpadding: 0 14px 0 14px;\\n\\tbackground-color: <<colour notification-background>>;\\n\\tborder: 1px solid <<colour notification-border>>;\\n}\\n\\n/*\\n** Tabs\\n*/\\n\\n.tc-tab-set.tc-vertical {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tab-buttons {\\n\\tfont-size: 0.85em;\\n\\tpadding-top: 1em;\\n\\tmargin-bottom: -2px;\\n}\\n\\n.tc-tab-buttons.tc-vertical {\\n\\tz-index: 100;\\n\\tdisplay: block;\\n\\tpadding-top: 14px;\\n\\tvertical-align: top;\\n\\ttext-align: right;\\n\\tmargin-bottom: inherit;\\n\\tmargin-right: -1px;\\n\\tmax-width: 33%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n}\\n\\n.tc-tab-buttons button.tc-tab-selected {\\n\\tcolor: <<colour tab-foreground-selected>>;\\n\\tbackground-color: <<colour tab-background-selected>>;\\n\\tborder-left: 1px solid <<colour tab-border-selected>>;\\n\\tborder-top: 1px solid <<colour tab-border-selected>>;\\n\\tborder-right: 1px solid <<colour tab-border-selected>>;\\n}\\n\\n.tc-tab-buttons button {\\n\\tcolor: <<colour tab-foreground>>;\\n\\tpadding: 3px 5px 3px 5px;\\n\\tmargin-right: 0.3em;\\n\\tfont-weight: 300;\\n\\tborder: none;\\n\\tbackground: inherit;\\n\\tbackground-color: <<colour tab-background>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-top: 1px solid <<colour tab-border>>;\\n\\tborder-right: 1px solid <<colour tab-border>>;\\n\\tborder-top-left-radius: 2px;\\n\\tborder-top-right-radius: 2px;\\n\\tborder-bottom-left-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-tab-buttons.tc-vertical button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tmargin-top: 3px;\\n\\tmargin-right: 0;\\n\\ttext-align: right;\\n\\tbackground-color: <<colour tab-background>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-bottom: 1px solid <<colour tab-border>>;\\n\\tborder-right: none;\\n\\tborder-top-left-radius: 2px;\\n\\tborder-bottom-left-radius: 2px;\\n\\tborder-top-right-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\\n\\tbackground-color: <<colour tab-background-selected>>;\\n\\tborder-right: 1px solid <<colour tab-background-selected>>;\\n}\\n\\n.tc-tab-divider {\\n\\tborder-top: 1px solid <<colour tab-divider>>;\\n}\\n\\n.tc-tab-divider.tc-vertical {\\n\\tdisplay: none;\\n}\\n\\n.tc-tab-content {\\n\\tmargin-top: 14px;\\n}\\n\\n.tc-tab-content.tc-vertical {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\tpadding-top: 0;\\n\\tpadding-left: 14px;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\t-webkit-flex: 1 0 70%;\\n\\tflex: 1 0 70%;\\n\\toverflow: auto;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons {\\n\\tmargin-bottom: -1px;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: <<colour sidebar-tab-background-selected>>;\\n\\tcolor: <<colour sidebar-tab-foreground-selected>>;\\n\\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\\n\\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\\n\\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button {\\n\\tbackground-color: <<colour sidebar-tab-background>>;\\n\\tcolor: <<colour sidebar-tab-foreground>>;\\n\\tborder-left: 1px solid <<colour sidebar-tab-border>>;\\n\\tborder-top: 1px solid <<colour sidebar-tab-border>>;\\n\\tborder-right: 1px solid <<colour sidebar-tab-border>>;\\n}\\n\\n.tc-sidebar-lists .tc-tab-divider {\\n\\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tbackground-color: <<colour sidebar-tab-background>>;\\n\\tborder-top: none;\\n\\tborder-left: none;\\n\\tborder-bottom: none;\\n\\tborder-right: 1px solid #ccc;\\n\\tmargin-bottom: inherit;\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\\n\\tbackground-color: <<colour sidebar-tab-background-selected>>;\\n\\tborder: none;\\n}\\n\\n/*\\n** Manager\\n*/\\n\\n.tc-manager-wrapper {\\n\\t\\n}\\n\\n.tc-manager-controls {\\n\\t\\n}\\n\\n.tc-manager-control {\\n\\tmargin: 0.5em 0;\\n}\\n\\n.tc-manager-list {\\n\\twidth: 100%;\\n\\tborder-top: 1px solid <<colour muted-foreground>>;\\n\\tborder-left: 1px solid <<colour muted-foreground>>;\\n\\tborder-right: 1px solid <<colour muted-foreground>>;\\n}\\n\\n.tc-manager-list-item {\\n\\n}\\n\\n.tc-manager-list-item-heading {\\n display: block;\\n width: 100%;\\n text-align: left;\\t\\n\\tborder-bottom: 1px solid <<colour muted-foreground>>;\\n\\tpadding: 3px;\\n}\\n\\n.tc-manager-list-item-heading-selected {\\n\\tfont-weight: bold;\\n\\tcolor: <<colour background>>;\\n\\tfill: <<colour background>>;\\n\\tbackground-color: <<colour foreground>>;\\n}\\n\\n.tc-manager-list-item-heading:hover {\\n\\tbackground: <<colour primary>>;\\n\\tcolor: <<colour background>>;\\n}\\n\\n.tc-manager-list-item-content {\\n\\tdisplay: flex;\\n}\\n\\n.tc-manager-list-item-content-sidebar {\\n flex: 1 0;\\n background: <<colour tiddler-editor-background>>;\\n border-right: 0.5em solid <<colour muted-foreground>>;\\n border-bottom: 0.5em solid <<colour muted-foreground>>;\\n white-space: nowrap;\\n}\\n\\n.tc-manager-list-item-content-item-heading {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n background: <<colour muted-foreground>>;\\n\\ttext-transform: uppercase;\\n\\tfont-size: 0.6em;\\n\\tfont-weight: bold;\\n padding: 0.5em 0 0.5em 0;\\n}\\n\\n.tc-manager-list-item-content-item-body {\\n\\tpadding: 0 0.5em 0 0.5em;\\n}\\n\\n.tc-manager-list-item-content-item-body > pre {\\n\\tmargin: 0.5em 0 0.5em 0;\\n\\tborder: none;\\n\\tbackground: inherit;\\n}\\n\\n.tc-manager-list-item-content-tiddler {\\n flex: 3 1;\\n border-left: 0.5em solid <<colour muted-foreground>>;\\n border-right: 0.5em solid <<colour muted-foreground>>;\\n border-bottom: 0.5em solid <<colour muted-foreground>>;\\n}\\n\\n.tc-manager-list-item-content-item-body > table {\\n\\tborder: none;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n}\\n\\n.tc-manager-list-item-content-item-body > table td {\\n\\tborder: none;\\n}\\n\\n.tc-manager-icon-editor > button {\\n\\twidth: 100%;\\n}\\n\\n.tc-manager-icon-editor > button > svg,\\n.tc-manager-icon-editor > button > button {\\n\\twidth: 100%;\\n\\theight: auto;\\n}\\n\\n/*\\n** Alerts\\n*/\\n\\n.tc-alerts {\\n\\tposition: fixed;\\n\\ttop: 28px;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tmax-width: 50%;\\n\\tz-index: 20000;\\n}\\n\\n.tc-alert {\\n\\tposition: relative;\\n\\tmargin: 14px;\\n\\tpadding: 7px;\\n\\tborder: 1px solid <<colour alert-border>>;\\n\\tbackground-color: <<colour alert-background>>;\\n}\\n\\n.tc-alert-toolbar {\\n\\tposition: absolute;\\n\\ttop: 7px;\\n\\tright: 7px;\\n line-height: 0;\\n}\\n\\n.tc-alert-toolbar svg {\\n\\tfill: <<colour alert-muted-foreground>>;\\n}\\n\\n.tc-alert-subtitle {\\n\\tcolor: <<colour alert-muted-foreground>>;\\n\\tfont-weight: bold;\\n font-size: 0.8em;\\n margin-bottom: 0.5em;\\n}\\n\\n.tc-alert-body > p {\\n\\tmargin: 0;\\n}\\n\\n.tc-alert-highlight {\\n\\tcolor: <<colour alert-highlight>>;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n\\n\\t.tc-static-alert {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t.tc-static-alert-inner {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 100;\\n\\t}\\n\\n}\\n\\n.tc-static-alert-inner {\\n\\tpadding: 0 2px 2px 42px;\\n\\tcolor: <<colour static-alert-foreground>>;\\n}\\n\\n/*\\n** Floating drafts list\\n*/\\n\\n.tc-drafts-list {\\n\\tz-index: 2000;\\n\\tposition: fixed;\\n\\tfont-size: 0.8em;\\n\\tleft: 0;\\n\\tbottom: 0;\\n}\\n\\n.tc-drafts-list a {\\n\\tmargin: 0 0.5em;\\n\\tpadding: 4px 4px;\\n\\tborder-top-left-radius: 4px;\\n\\tborder-top-right-radius: 4px;\\n\\tborder: 1px solid <<colour background>>;\\n\\tborder-bottom-none;\\n\\tbackground: <<colour dirty-indicator>>;\\n\\tcolor: <<colour background>>;\\n\\tfill: <<colour background>>;\\n}\\n\\n.tc-drafts-list a:hover {\\n\\ttext-decoration: none;\\n\\tbackground: <<colour foreground>>;\\n\\tcolor: <<colour background>>;\\n\\tfill: <<colour background>>;\\n}\\n\\n.tc-drafts-list a svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tvertical-align: text-bottom;\\n}\\n\\n/*\\n** Control panel\\n*/\\n\\n.tc-control-panel td {\\n\\tpadding: 4px;\\n}\\n\\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\\n\\twidth: 100%;\\n}\\n\\n.tc-plugin-info {\\n\\tdisplay: flex;\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tfill: <<colour muted-foreground>>;\\n\\tbackground-color: <<colour background>>;\\n\\tmargin: 0.5em 0 0.5em 0;\\n\\tpadding: 4px;\\n align-items: center;\\n}\\n\\n.tc-plugin-info-sub-plugins .tc-plugin-info {\\n margin: 0.5em;\\n\\tbackground: <<colour background>>;\\n}\\n\\n.tc-plugin-info-sub-plugin-indicator {\\n\\tmargin: -16px 1em 0 2em;\\n}\\n\\n.tc-plugin-info-sub-plugin-indicator button {\\n\\tcolor: <<colour background>>;\\n\\tbackground: <<colour foreground>>;\\n\\tborder-radius: 8px;\\n padding: 2px 7px;\\n font-size: 0.75em;\\n}\\n\\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\\n\\tmargin-left: 1em;\\n\\tmargin-right: 1em;\\n}\\n\\n.tc-plugin-info-disabled {\\n\\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\\n\\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\\n}\\n\\n.tc-plugin-info-disabled:hover {\\n\\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\\n\\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover {\\n\\ttext-decoration: none;\\n\\tbackground-color: <<colour primary>>;\\n\\tcolor: <<colour background>>;\\n\\tfill: <<colour foreground>>;\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\\n\\tfill: <<colour foreground>>;\\n}\\n\\n.tc-plugin-info-chunk {\\n margin: 2px;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n\\tline-height: 1;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-icon {\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n\\tline-height: 1;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description {\\n\\tflex-grow: 1;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n text-align: right;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\\n\\tfont-size: 1em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description div {\\n\\tfont-size: 0.7em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\\n\\twidth: 2em;\\n\\theight: 2em;\\n}\\n\\n.tc-plugin-info-dropdown {\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tbackground: <<colour background>>;\\n\\tmargin-top: -8px;\\n}\\n\\n.tc-plugin-info-dropdown-message {\\n\\tbackground: <<colour message-background>>;\\n\\tpadding: 0.5em 1em 0.5em 1em;\\n\\tfont-weight: bold;\\n\\tfont-size: 0.8em;\\n}\\n\\n.tc-plugin-info-dropdown-body {\\n\\tpadding: 1em 1em 0 1em;\\n\\tbackground: <<colour background>>;\\n}\\n\\n.tc-plugin-info-sub-plugins {\\n\\tpadding: 0.5em;\\n margin: 0 1em 1em 1em;\\n\\tbackground: <<colour notification-background>>;\\n}\\n\\n.tc-install-plugin {\\n\\tfont-weight: bold;\\n\\tbackground: green;\\n\\tcolor: white;\\n\\tfill: white;\\n\\tborder-radius: 4px;\\n\\tpadding: 3px;\\n}\\n\\n.tc-install-plugin.tc-reinstall-downgrade {\\n\\tbackground: red;\\n}\\n\\n.tc-install-plugin.tc-reinstall {\\n\\tbackground: blue;\\n}\\n\\n.tc-install-plugin.tc-reinstall-upgrade {\\n\\tbackground: orange;\\n}\\n\\n.tc-check-list {\\n\\tline-height: 2em;\\n}\\n\\n.tc-check-list .tc-image-button {\\n\\theight: 1.5em;\\n}\\n\\n/*\\n** Message boxes\\n*/\\n\\n.tc-message-box {\\n\\tborder: 1px solid <<colour message-border>>;\\n\\tbackground: <<colour message-background>>;\\n\\tpadding: 0px 21px 0px 21px;\\n\\tfont-size: 12px;\\n\\tline-height: 18px;\\n\\tcolor: <<colour message-foreground>>;\\n}\\n\\n.tc-message-box svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n vertical-align: text-bottom;\\n}\\n\\n/*\\n** Pictures\\n*/\\n\\n.tc-bordered-image {\\n\\tborder: 1px solid <<colour muted-foreground>>;\\n\\tpadding: 5px;\\n\\tmargin: 5px;\\n}\\n\\n/*\\n** Floats\\n*/\\n\\n.tc-float-right {\\n\\tfloat: right;\\n}\\n\\n/*\\n** Chooser\\n*/\\n\\n.tc-chooser {\\n\\tborder-right: 1px solid <<colour table-header-background>>;\\n\\tborder-left: 1px solid <<colour table-header-background>>;\\n}\\n\\n\\n.tc-chooser-item {\\n\\tborder-bottom: 1px solid <<colour table-header-background>>;\\n\\tborder-top: 1px solid <<colour table-header-background>>;\\n\\tpadding: 2px 4px 2px 14px;\\n}\\n\\n.tc-drop-down .tc-chooser-item {\\n\\tpadding: 2px;\\n}\\n\\n.tc-chosen,\\n.tc-chooser-item:hover {\\n\\tbackground-color: <<colour table-header-background>>;\\n\\tborder-color: <<colour table-footer-background>>;\\n}\\n\\n.tc-chosen .tc-tiddlylink {\\n\\tcursor:default;\\n}\\n\\n.tc-chooser-item .tc-tiddlylink {\\n\\tdisplay: block;\\n\\ttext-decoration: none;\\n\\tbackground-color: transparent;\\n}\\n\\n.tc-chooser-item:hover .tc-tiddlylink:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-drop-down .tc-chosen .tc-tiddlylink,\\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\\n\\tcolor: <<colour foreground>>;\\n}\\n\\n.tc-chosen > .tc-tiddlylink:before {\\n\\tmargin-left: -10px;\\n\\tposition: relative;\\n\\tcontent: \\\"» \\\";\\n}\\n\\n.tc-chooser-item svg,\\n.tc-chooser-item img{\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-language-chooser .tc-image-button img {\\n\\twidth: 2em;\\n\\tvertical-align: -0.15em;\\n}\\n\\n/*\\n** Palette swatches\\n*/\\n\\n.tc-swatches-horiz {\\n}\\n\\n.tc-swatches-horiz .tc-swatch {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-swatch {\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tmargin: 0.4em;\\n\\tborder: 1px solid #888;\\n}\\n\\ninput.tc-palette-manager-colour-input {\\n\\twidth: 100%;\\n\\tpadding: 0;\\n}\\n\\n/*\\n** Table of contents\\n*/\\n\\n.tc-sidebar-lists .tc-table-of-contents {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-table-of-contents button {\\n\\tcolor: <<colour sidebar-foreground>>;\\n}\\n\\n.tc-table-of-contents svg {\\n\\twidth: 0.7em;\\n\\theight: 0.7em;\\n\\tvertical-align: middle;\\n\\tfill: <<colour sidebar-foreground>>;\\n}\\n\\n.tc-table-of-contents ol {\\n\\tlist-style-type: none;\\n\\tpadding-left: 0;\\n}\\n\\n.tc-table-of-contents ol ol {\\n\\tpadding-left: 1em;\\n}\\n\\n.tc-table-of-contents li {\\n\\tfont-size: 1.0em;\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li a {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: normal;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-table-of-contents li li a {\\n\\tfont-weight: normal;\\n}\\n\\n.tc-table-of-contents li li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: 200;\\n\\tline-height: 1.5;\\n}\\n\\n.tc-table-of-contents li li li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: 200;\\n}\\n\\n.tc-tabbed-table-of-contents {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents {\\n\\tz-index: 100;\\n\\tdisplay: inline-block;\\n\\tpadding-left: 1em;\\n\\tmax-width: 50%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n\\tbackground: <<colour tab-background>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-top: 1px solid <<colour tab-border>>;\\n\\tborder-bottom: 1px solid <<colour tab-border>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\\n\\tdisplay: block;\\n\\tpadding: 0.12em 1em 0.12em 0.25em;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\\n\\tborder-top: 1px solid <<colour tab-background>>;\\n\\tborder-left: 1px solid <<colour tab-background>>;\\n\\tborder-bottom: 1px solid <<colour tab-background>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\\n\\ttext-decoration: none;\\n\\tborder-top: 1px solid <<colour tab-border>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-bottom: 1px solid <<colour tab-border>>;\\n\\tbackground: <<colour tab-border>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\\n\\tborder-top: 1px solid <<colour tab-border>>;\\n\\tborder-left: 1px solid <<colour tab-border>>;\\n\\tborder-bottom: 1px solid <<colour tab-border>>;\\n\\tbackground: <<colour background>>;\\n\\tmargin-right: -1px;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\tpadding-left: 1.5em;\\n\\tpadding-right: 1.5em;\\n\\tborder: 1px solid <<colour tab-border>>;\\n\\t-webkit-flex: 1 0 50%;\\n\\tflex: 1 0 50%;\\n}\\n\\n/*\\n** Dirty indicator\\n*/\\n\\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\\n\\tfill: <<colour dirty-indicator>>;\\n\\tcolor: <<colour dirty-indicator>>;\\n}\\n\\n/*\\n** File inputs\\n*/\\n\\n.tc-file-input-wrapper {\\n\\tposition: relative;\\n\\toverflow: hidden;\\n\\tdisplay: inline-block;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-file-input-wrapper input[type=file] {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tfont-size: 999px;\\n\\tmax-width: 100%;\\n\\tmax-height: 100%;\\n\\tfilter: alpha(opacity=0);\\n\\topacity: 0;\\n\\toutline: none;\\n\\tbackground: white;\\n\\tcursor: pointer;\\n\\tdisplay: inline-block;\\n}\\n\\n/*\\n** Thumbnail macros\\n*/\\n\\n.tc-thumbnail-wrapper {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\tmargin: 6px;\\n\\tvertical-align: top;\\n}\\n\\n.tc-thumbnail-right-wrapper {\\n\\tfloat:right;\\n\\tmargin: 0.5em 0 0.5em 0.5em;\\n}\\n\\n.tc-thumbnail-image {\\n\\ttext-align: center;\\n\\toverflow: hidden;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-thumbnail-image svg,\\n.tc-thumbnail-image img {\\n\\tfilter: alpha(opacity=1);\\n\\topacity: 1;\\n\\tmin-width: 100%;\\n\\tmin-height: 100%;\\n\\tmax-width: 100%;\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\\n\\tfilter: alpha(opacity=0.8);\\n\\topacity: 0.8;\\n}\\n\\n.tc-thumbnail-background {\\n\\tposition: absolute;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-thumbnail-icon svg,\\n.tc-thumbnail-icon img {\\n\\twidth: 3em;\\n\\theight: 3em;\\n\\t<<filter \\\"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\\\">>\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\\n\\tfill: #fff;\\n\\t<<filter \\\"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\\\">>\\n}\\n\\n.tc-thumbnail-icon {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tdisplay: -webkit-flex;\\n\\t-webkit-align-items: center;\\n\\t-webkit-justify-content: center;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n\\n.tc-thumbnail-caption {\\n\\tposition: absolute;\\n\\tbackground-color: #777;\\n\\tcolor: #fff;\\n\\ttext-align: center;\\n\\tbottom: 0;\\n\\twidth: 100%;\\n\\tfilter: alpha(opacity=0.9);\\n\\topacity: 0.9;\\n\\tline-height: 1.4;\\n\\tborder-bottom-left-radius: 3px;\\n\\tborder-bottom-right-radius: 3px;\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\\n\\tfilter: alpha(opacity=1);\\n\\topacity: 1;\\n}\\n\\n/*\\n** Diffs\\n*/\\n\\n.tc-diff-equal {\\n\\tbackground-color: <<colour diff-equal-background>>;\\n\\tcolor: <<colour diff-equal-foreground>>;\\n}\\n\\n.tc-diff-insert {\\n\\tbackground-color: <<colour diff-insert-background>>;\\n\\tcolor: <<colour diff-insert-foreground>>;\\n}\\n\\n.tc-diff-delete {\\n\\tbackground-color: <<colour diff-delete-background>>;\\n\\tcolor: <<colour diff-delete-foreground>>;\\n}\\n\\n.tc-diff-invisible {\\n\\tbackground-color: <<colour diff-invisible-background>>;\\n\\tcolor: <<colour diff-invisible-foreground>>;\\n}\\n\\n.tc-diff-tiddlers th {\\n\\ttext-align: right;\\n\\tbackground: <<colour background>>;\\n\\tfont-weight: normal;\\n\\tfont-style: italic;\\n}\\n\\n.tc-diff-tiddlers pre {\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: none;\\n}\\n\\n/*\\n** Errors\\n*/\\n\\n.tc-error {\\n\\tbackground: #f00;\\n\\tcolor: #fff;\\n}\\n\\n/*\\n** Tree macro\\n*/\\n\\n.tc-tree div {\\n \\tpadding-left: 14px;\\n}\\n\\n.tc-tree ol {\\n \\tlist-style-type: none;\\n \\tpadding-left: 0;\\n \\tmargin-top: 0;\\n}\\n\\n.tc-tree ol ol {\\n \\tpadding-left: 1em; \\n}\\n\\n.tc-tree button { \\n \\tcolor: #acacac;\\n}\\n\\n.tc-tree svg {\\n \\tfill: #acacac;\\n}\\n\\n.tc-tree span svg {\\n \\twidth: 1em;\\n \\theight: 1em;\\n \\tvertical-align: baseline;\\n}\\n\\n.tc-tree li span {\\n \\tcolor: lightgray;\\n}\\n\\nselect {\\n color: <<colour select-tag-foreground>>;\\n background: <<colour select-tag-background>>;\\n}\\n\\n/*\\n** Utility classes for SVG icons\\n*/\\n\\n.tc-fill-background {\\n\\tfill: <<colour background>>;\\n}\\n\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\",\n \"text\": \"15px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\",\n \"text\": \"22px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n \"text\": \"14px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n \"text\": \"20px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n \"text\": \"0px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/storytop\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n \"text\": \"0px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/storyright\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n \"text\": \"770px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n \"text\": \"770px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\",\n \"text\": \"686px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\",\n \"text\": \"960px\"\n },\n \"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\",\n \"text\": \"350px\"\n },\n \"$:/themes/tiddlywiki/vanilla/options/stickytitles\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/options/stickytitles\",\n \"text\": \"no\"\n },\n \"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\",\n \"text\": \"fixed-fluid\"\n },\n \"$:/themes/tiddlywiki/vanilla/options/codewrapping\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/options/codewrapping\",\n \"text\": \"pre-wrap\"\n },\n \"$:/themes/tiddlywiki/vanilla/reset\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/reset\",\n \"type\": \"text/plain\",\n \"text\": \"/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\\n\\n/* Document\\n ========================================================================== */\\n\\n/**\\n * 1. Correct the line height in all browsers.\\n * 2. Prevent adjustments of font size after orientation changes in iOS.\\n */\\n\\nhtml {\\n line-height: 1.15; /* 1 */\\n -webkit-text-size-adjust: 100%; /* 2 */\\n}\\n\\n/* Sections\\n ========================================================================== */\\n\\n/**\\n * Remove the margin in all browsers.\\n */\\n\\nbody {\\n margin: 0;\\n}\\n\\n/**\\n * Render the `main` element consistently in IE.\\n */\\n\\nmain {\\n display: block;\\n}\\n\\n/**\\n * Correct the font size and margin on `h1` elements within `section` and\\n * `article` contexts in Chrome, Firefox, and Safari.\\n */\\n\\nh1 {\\n font-size: 2em;\\n margin: 0.67em 0;\\n}\\n\\n/* Grouping content\\n ========================================================================== */\\n\\n/**\\n * 1. Add the correct box sizing in Firefox.\\n * 2. Show the overflow in Edge and IE.\\n */\\n\\nhr {\\n box-sizing: content-box; /* 1 */\\n height: 0; /* 1 */\\n overflow: visible; /* 2 */\\n}\\n\\n/**\\n * 1. Correct the inheritance and scaling of font size in all browsers.\\n * 2. Correct the odd `em` font sizing in all browsers.\\n */\\n\\npre {\\n font-family: monospace, monospace; /* 1 */\\n font-size: 1em; /* 2 */\\n}\\n\\n/* Text-level semantics\\n ========================================================================== */\\n\\n/**\\n * Remove the gray background on active links in IE 10.\\n */\\n\\na {\\n background-color: transparent;\\n}\\n\\n/**\\n * 1. Remove the bottom border in Chrome 57-\\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\\n */\\n\\nabbr[title] {\\n border-bottom: none; /* 1 */\\n text-decoration: underline; /* 2 */\\n text-decoration: underline dotted; /* 2 */\\n}\\n\\n/**\\n * Add the correct font weight in Chrome, Edge, and Safari.\\n */\\n\\nb,\\nstrong {\\n font-weight: bolder;\\n}\\n\\n/**\\n * 1. Correct the inheritance and scaling of font size in all browsers.\\n * 2. Correct the odd `em` font sizing in all browsers.\\n */\\n\\ncode,\\nkbd,\\nsamp {\\n font-family: monospace, monospace; /* 1 */\\n font-size: 1em; /* 2 */\\n}\\n\\n/**\\n * Add the correct font size in all browsers.\\n */\\n\\nsmall {\\n font-size: 80%;\\n}\\n\\n/**\\n * Prevent `sub` and `sup` elements from affecting the line height in\\n * all browsers.\\n */\\n\\nsub,\\nsup {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n}\\n\\nsub {\\n bottom: -0.25em;\\n}\\n\\nsup {\\n top: -0.5em;\\n}\\n\\n/* Embedded content\\n ========================================================================== */\\n\\n/**\\n * Remove the border on images inside links in IE 10.\\n */\\n\\nimg {\\n border-style: none;\\n}\\n\\n/* Forms\\n ========================================================================== */\\n\\n/**\\n * 1. Change the font styles in all browsers.\\n * 2. Remove the margin in Firefox and Safari.\\n */\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n font-family: inherit; /* 1 */\\n font-size: 100%; /* 1 */\\n line-height: 1.15; /* 1 */\\n margin: 0; /* 2 */\\n}\\n\\n/**\\n * Show the overflow in IE.\\n * 1. Show the overflow in Edge.\\n */\\n\\nbutton,\\ninput { /* 1 */\\n overflow: visible;\\n}\\n\\n/**\\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\\n * 1. Remove the inheritance of text transform in Firefox.\\n */\\n\\nbutton,\\nselect { /* 1 */\\n text-transform: none;\\n}\\n\\n/**\\n * Correct the inability to style clickable types in iOS and Safari.\\n */\\n\\nbutton,\\n[type=\\\"button\\\"],\\n[type=\\\"reset\\\"],\\n[type=\\\"submit\\\"] {\\n -webkit-appearance: button;\\n}\\n\\n/**\\n * Remove the inner border and padding in Firefox.\\n */\\n\\nbutton::-moz-focus-inner,\\n[type=\\\"button\\\"]::-moz-focus-inner,\\n[type=\\\"reset\\\"]::-moz-focus-inner,\\n[type=\\\"submit\\\"]::-moz-focus-inner {\\n border-style: none;\\n padding: 0;\\n}\\n\\n/**\\n * Restore the focus styles unset by the previous rule.\\n */\\n\\nbutton:-moz-focusring,\\n[type=\\\"button\\\"]:-moz-focusring,\\n[type=\\\"reset\\\"]:-moz-focusring,\\n[type=\\\"submit\\\"]:-moz-focusring {\\n outline: 1px dotted ButtonText;\\n}\\n\\n/**\\n * Correct the padding in Firefox.\\n */\\n\\nfieldset {\\n padding: 0.35em 0.75em 0.625em;\\n}\\n\\n/**\\n * 1. Correct the text wrapping in Edge and IE.\\n * 2. Correct the color inheritance from `fieldset` elements in IE.\\n * 3. Remove the padding so developers are not caught out when they zero out\\n * `fieldset` elements in all browsers.\\n */\\n\\nlegend {\\n box-sizing: border-box; /* 1 */\\n color: inherit; /* 2 */\\n display: table; /* 1 */\\n max-width: 100%; /* 1 */\\n padding: 0; /* 3 */\\n white-space: normal; /* 1 */\\n}\\n\\n/**\\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\\n */\\n\\nprogress {\\n vertical-align: baseline;\\n}\\n\\n/**\\n * Remove the default vertical scrollbar in IE 10+.\\n */\\n\\ntextarea {\\n overflow: auto;\\n}\\n\\n/**\\n * 1. Add the correct box sizing in IE 10.\\n * 2. Remove the padding in IE 10.\\n */\\n\\n[type=\\\"checkbox\\\"],\\n[type=\\\"radio\\\"] {\\n box-sizing: border-box; /* 1 */\\n padding: 0; /* 2 */\\n}\\n\\n/**\\n * Correct the cursor style of increment and decrement buttons in Chrome.\\n */\\n\\n[type=\\\"number\\\"]::-webkit-inner-spin-button,\\n[type=\\\"number\\\"]::-webkit-outer-spin-button {\\n height: auto;\\n}\\n\\n/**\\n * 1. Correct the odd appearance in Chrome and Safari.\\n * 2. Correct the outline style in Safari.\\n */\\n\\n[type=\\\"search\\\"] {\\n -webkit-appearance: textfield; /* 1 */\\n outline-offset: -2px; /* 2 */\\n}\\n\\n/**\\n * Remove the inner padding in Chrome and Safari on macOS.\\n */\\n\\n[type=\\\"search\\\"]::-webkit-search-decoration {\\n -webkit-appearance: none;\\n}\\n\\n/**\\n * 1. Correct the inability to style clickable types in iOS and Safari.\\n * 2. Change font properties to `inherit` in Safari.\\n */\\n\\n::-webkit-file-upload-button {\\n -webkit-appearance: button; /* 1 */\\n font: inherit; /* 2 */\\n}\\n\\n/* Interactive\\n ========================================================================== */\\n\\n/*\\n * Add the correct display in Edge, IE 10+, and Firefox.\\n */\\n\\ndetails {\\n display: block;\\n}\\n\\n/*\\n * Add the correct display in all browsers.\\n */\\n\\nsummary {\\n display: list-item;\\n}\\n\\n/* Misc\\n ========================================================================== */\\n\\n/**\\n * Add the correct display in IE 10+.\\n */\\n\\ntemplate {\\n display: none;\\n}\\n\\n/**\\n * Add the correct display in IE 10.\\n */\\n\\n[hidden] {\\n display: none;\\n}\\n\"\n },\n \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\",\n \"text\": \"-apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Helvetica, Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\"\"\n },\n \"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\",\n \"text\": \"\\\"SFMono-Regular\\\",Consolas,\\\"Liberation Mono\\\",Menlo,Courier,monospace\"\n },\n \"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\",\n \"text\": \"fixed\"\n },\n \"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\",\n \"text\": \"auto\"\n },\n \"$:/themes/tiddlywiki/vanilla/sticky\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/sticky\",\n \"text\": \"<$reveal state=\\\"$:/themes/tiddlywiki/vanilla/options/stickytitles\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n``\\n.tc-tiddler-title {\\n\\tposition: -webkit-sticky;\\n\\tposition: -moz-sticky;\\n\\tposition: -o-sticky;\\n\\tposition: -ms-sticky;\\n\\tposition: sticky;\\n\\ttop: 0px;\\n\\tbackground: ``<<colour tiddler-background>>``;\\n\\tz-index: 500;\\n}\\n\\n``\\n<$list filter=\\\"[range[100]]\\\">\\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<<currentTiddler>>/>`) {\\nz-index: `<$text text={{{ [[200]subtract<currentTiddler>] }}}/>`;\\n}\\n`\\n</$list>\\n</$reveal>\\n\"\n }\n }\n}"},"$:/languages/en-US":{"title":"$:/languages/en-US","name":"en-US","plugin-type":"language","description":"English (US)","author":"Ben Webber","core-version":">=5.0.0","dependents":"$:/languages/en-GB","plugin-priority":110,"version":"5.1.23-prerelease","type":"application/json","text":"{\n \"tiddlers\": {\n \"$:/language/Buttons/Clear/Hint\": {\n \"title\": \"$:/language/Buttons/Clear/Hint\",\n \"text\": \"Clear image to solid color\"\n },\n \"$:/language/Buttons/Paint/Caption\": {\n \"title\": \"$:/language/Buttons/Paint/Caption\",\n \"text\": \"paint color\"\n },\n \"$:/language/Buttons/Paint/Hint\": {\n \"title\": \"$:/language/Buttons/Paint/Hint\",\n \"text\": \"Set painting color\"\n },\n \"$:/language/Buttons/Palette/Hint\": {\n \"title\": \"$:/language/Buttons/Palette/Hint\",\n \"text\": \"Choose the color palette\"\n },\n \"$:/language/Buttons/StoryView/Hint\": {\n \"title\": \"$:/language/Buttons/StoryView/Hint\",\n \"text\": \"Choose the story visualization\"\n },\n \"$:/language/Manager/Item/Colour\": {\n \"title\": \"$:/language/Manager/Item/Colour\",\n \"text\": \"Color\"\n },\n \"$:/language/TagManager/Colour/Heading\": {\n \"title\": \"$:/language/TagManager/Colour/Heading\",\n \"text\": \"Color\"\n },\n \"$:/language/RecentChanges/DateFormat\": {\n \"title\": \"$:/language/RecentChanges/DateFormat\",\n \"text\": \"MMM DD, YYYY\"\n },\n \"$:/language/Tiddler/DateFormat\": {\n \"title\": \"$:/language/Tiddler/DateFormat\",\n \"text\": \"MMM DD, YYYY at hh12:0mm am\"\n },\n \"$:/languages/en-US/icon\": {\n \"title\": \"$:/languages/en-US/icon\",\n \"type\": \"image/svg+xml\",\n \"text\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" width=\\\"1235\\\" height=\\\"650\\\" viewBox=\\\"0 0 7410 3900\\\">\\n<rect width=\\\"7410\\\" height=\\\"3900\\\" fill=\\\"#b22234\\\"/>\\n<path d=\\\"M0,450H7410m0,600H0m0,600H7410m0,600H0m0,600H7410m0,600H0\\\" stroke=\\\"#fff\\\" stroke-width=\\\"300\\\"/>\\n<rect width=\\\"2964\\\" height=\\\"2100\\\" fill=\\\"#3c3b6e\\\"/>\\n<g fill=\\\"#fff\\\">\\n<g id=\\\"s18\\\">\\n<g id=\\\"s9\\\">\\n<g id=\\\"s5\\\">\\n<g id=\\\"s4\\\">\\n<path id=\\\"s\\\" d=\\\"M247,90 317.534230,307.082039 132.873218,172.917961H361.126782L176.465770,307.082039z\\\"/>\\n<use xlink:href=\\\"#s\\\" y=\\\"420\\\"/>\\n<use xlink:href=\\\"#s\\\" y=\\\"840\\\"/>\\n<use xlink:href=\\\"#s\\\" y=\\\"1260\\\"/>\\n</g>\\n<use xlink:href=\\\"#s\\\" y=\\\"1680\\\"/>\\n</g>\\n<use xlink:href=\\\"#s4\\\" x=\\\"247\\\" y=\\\"210\\\"/>\\n</g>\\n<use xlink:href=\\\"#s9\\\" x=\\\"494\\\"/>\\n</g>\\n<use xlink:href=\\\"#s18\\\" x=\\\"988\\\"/>\\n<use xlink:href=\\\"#s9\\\" x=\\\"1976\\\"/>\\n<use xlink:href=\\\"#s5\\\" x=\\\"2470\\\"/>\\n</g>\\n</svg>\\n\"\n }\n }\n}"}}}